当前语言的语法特征对于屏幕阅读器或盲文阅读器有什么问题?听到或感觉到什么符号和结构很烦人?对于盲人程序员来说,如果你要设计一种更容易让其他盲人使用的编程语言,它会是什么样的?
答案 0 :(得分:11)
虽然这是一个非常有趣的问题,但这很大程度上取决于个人喜好和喜好,所以我会像你亲自问我一样回答。
注意:我的工作系统是Windows,所以我会专注于它。当然,我可以编写跨平台的应用程序,但我在Windows机器上执行此操作。
所有与缩进相关的东西或多或少都很烦人,特别是如果缩进是用多个空格而不是标签(是的,我知道整个"圣战"围绕它!)。 Python确实教会我即使在不需要它的语言中也能正确地缩进代码,但是由于这些空间,编写适当的Python仍然会让我感到痛苦。为什么这样?答案很简单:我的屏幕阅读器告诉我空格的数量,实际的嵌套级别是四倍。每个这样的操作(20个空格,aha,除以4,它是第五个嵌套级别)给我带来了一些开销,让我花费我的内心" CPU"我可以免费调试或其他花哨的资源。这是一个小小的事情,你说,你是对的,但这个开销是在我(或其他人的!)代码的每一行和单行上我必须阅读或调试!这是非常多的
标签要好得多:5个标签,第五个嵌套级别,很好很好。这里的盲文显示也是一个问题,因为您可能知道,盲文显示器(尽管名称)是单行文本,通常为14到40个字符长。即,想象一个小型显示器,只有一行文本可以平移(即滚动),除此之外什么都没有。如果20个字符是空格,那么只剩下20个字符代码。更多的是,如果您阅读二年级盲文,但我不知道它是否适合编码,我主要使用语音,除了一些情况。
更令人痛苦的是一些代码样式标准,你必须在行中对齐代码。例如,moment.js中的测试就是这种情况。那里的期望值和消息应该与它们的行位置匹配,因此,例如,开头的报价将在每一行的第55列中(我承认,这很美观)。我无法接受我的拉请求一个多星期,直到我终于明白Iskren(感谢他对我的耐心!),其中一位主要的开发者,试图告诉我。你可以猜到,这对于有视力的人来说是完全明显的。
与前一个问题相邻的问题:对我个人而言,当我知道某个特定代码块结束时,它非常漂亮。右括号(如在C中)或单词end
(如在Ruby中)是好的,缩进级别更改(如在Python中)不是:在知道嵌套级别突然改变时仍然有一些开销。 / p>
很抱歉承认这一点,但盲人几乎没有舒适的 IDE。最接近这样一个IDE的是Microsoft Visual Studio,尤其是最新版本(众神保佑Jenny Lay-Flurrie!),Android Studio似乎也从版本2开始向可访问性方向发展。但是,它们并不是那么可用,对于有视力的用户来说,既漂亮又舒适。因此,例如,我使用文本编辑器和命令行工具来编写,编译和调试我的代码,就像我周围的许多盲人一样。
还有一件事要归咎于Python:camelCase处理snake_case甚至PascalCase要舒服得多。通常屏幕阅读器将用camelCase编写的单词分开,好像它们是用空格分隔的,所以我没有痛苦的阅读这个部分或者说。
当你编写代码时,你必须打开你的标点符号,否则你会错过一些非常小的东西,并且不重要的东西,例如引号,分号或括号。然后,如果您的标点符号已开启,并且您阅读了my_very_cool_descriptive_variable_name
,则会听到以下内容:"我的下划线非常强调下划线...下划线强调下划线!!!" (糟糕的语言和发誓审查)。我甚至尝试用声音替换下划线(是的,我的屏幕阅读器提供了这样的机会),但由于我使用的语音速率较高,声音不能很好地同步。当处理像__proto__
这样的方法和属性时,这是一场噩梦(aha,双方都有两个下划线,不是一个,不是三个 - 好吧,我认为是正确的!),{{1} } 等等等等。是的,你可能会说,我可以替换“#34;下划线"有一些非常短暂的东西,如" un" (这也是可能的),但是仍有一些开销,就像白色空格和代码嵌套一样
PascalCase要好得多,但它意味着更多的注意力,因为我们需要记住第一个大写字母(哦,我现在太挑剔了,让它成为PascalCase,但不是那些... ...哦,你已经得到了它。这就是我放弃Rust的原因,顺便说一句。
正如我已经告诉过你的那样,IDE对我们不利,所以文本编辑器是我们最好的朋友。然后,您需要搜索函数和方法,以及类和代码块。在某些语言中(这次不是Python),没有可以启动函数的关键字(例如,参见C或Java代码)。例如,如果您确实知道文件中的第三个或第四个函数中某处存在逻辑错误,但您没有完全记住它的名称,或者您浏览过,那么在这些条件下搜索函数会变得相当痛苦。某人的代码......嗯,你知道,有很多理由这样做。在这个特定的上下文中,Python是好的,C不是。
这本身不是问题,而是使调试复杂化的情况,例如正则表达式或强嵌套操作,如__repr__
。这个特殊的例子真的是合成的,但你明白我的意思:嵌套的三元运算符(我喜欢,顺便说一句!),条件块等等。还有正则表达式。
最接近理想的盲目友好语言的是D language。唯一的缺点是除了匿名函数之外没有单词((((a + ((b * c) - d) ** e) / f) + g) - h
。 PHP和Javascript也很好,但不幸的是,它们还有许多其他盲目无关的缺点。
在他的一次会谈中,Go语言的主要开发者Rob Pike说,没有人喜欢Gofmt实用程序强加的代码风格。可能没有人 - 除了我!我喜欢它,我非常喜欢它,Go中的每个文件都是如此简洁和易于阅读,因此我对语言非常兴奋。盲目编码器唯一有点烦人的事情是当一个函数在其定义中有几对括号时,就好像它实际上是一个struct方法。 function
渠道运营商仍然让我有时间思考我在做什么,发送或接收什么,但我认为这是习惯问题。