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