视觉是大多数程序员认为理所当然的感官之一。大多数程序员会花几个小时盯着电脑显示器(尤其是在他们全神贯注的时候),但我知道有些程序员是盲人(比如目前在谷歌工作的T.V. Raman)。
如果您是一个盲人(或逐渐失明),您将如何设置您的开发环境来帮助您编程?
(每个回答一个建议。这个问题的目的是把好的想法带到最高层。此外,屏幕阅读器可以更早地阅读到好的想法。)
视觉是大多数程序员认为理所当然的感官之一。大多数程序员会花几个小时盯着电脑显示器(尤其是在他们全神贯注的时候),但我知道有些程序员是盲人(比如目前在谷歌工作的T.V. Raman)。
如果您是一个盲人(或逐渐失明),您将如何设置您的开发环境来帮助您编程?
(每个回答一个建议。这个问题的目的是把好的想法带到最高层。此外,屏幕阅读器可以更早地阅读到好的想法。)
当前回答
一个开始的地方是linux项目:
http://leb.net/blinux/
该项目描述了如何获得Emacspeak(文本到语音的编辑器),并提供了许多其他资源。
我曾经和一个人一起工作,他的视力几乎阻止了他们使用显示器——他们用屏幕阅读器软件做得很好,花了很多时间使用基于文本的应用程序和shell。
维基百科的屏幕阅读器包列表是另一个开始的地方:http://en.wikipedia.org/wiki/List_of_screen_readers
其他回答
一个开始的地方是linux项目:
http://leb.net/blinux/
该项目描述了如何获得Emacspeak(文本到语音的编辑器),并提供了许多其他资源。
我曾经和一个人一起工作,他的视力几乎阻止了他们使用显示器——他们用屏幕阅读器软件做得很好,花了很多时间使用基于文本的应用程序和shell。
维基百科的屏幕阅读器包列表是另一个开始的地方:http://en.wikipedia.org/wiki/List_of_screen_readers
这篇博文有一些关于Visual Studio团队如何使他们的产品易于访问的信息:
Visual Studio核心团队的无障碍实验室参观活动
许多程序员使用Emacspeak:
Emacspeak—完整的音频桌面
正如许多人指出的那样,emacspeak是许多老黑客的跨平台持久解决方案。由于它支持Linux和Mac开箱即用,它已经成为我开发Windows无关项目的首选方法。
关于通过听觉而不是视觉来真正理解语法的问题,我发现存在各种各样的技术来接近语法,即使不是在同一个领域。
例如,听觉图标可以代替口头描述符。你可以用音调表示一行缩进的程度。音调越长,缩进越远。由于音调可以与文本和语音并行播放,信息在相同的时间框架内传递,而不会序列化如此基本的交流。
盲文能够快速而精确地解码出一行文字的确切语法。这对于日常生活中使用盲文的人来说更有用;最大的优点是可以随机访问显示的内容。可刷新单元通常在每个字符单元上方有路由器键,可以将光标指向该单元。不要摆弄方向键O(n) op vs O(1)访问。
听觉维度(音调、速率、音量、变化、丰富度、重音等)可以传达一个概念(关键字、类别、变量、错误等)。例如,注释可以用单调变化来读……正合适,如果我可以这么说的话:)。
Emacs和其他较小程度的编辑器(Visual Studio)允许编码器严格地阅读程序(下一个块、折叠块、向下defun、跳转到def、向上解析树等)。这样做,你可以很快得到整个项目结构的“大”图景;通过像Cedet这样的扩展,你可以在文本编辑器中跨平台地使用VS/Eclipse/etc的优点。
可能还有很多,但简而言之,这就是为什么我们中的一些人在工业、学术界或地下室里不停地工作的基础:)。
NVDA是一个很好的开源屏幕阅读器。
我是个盲人,已经在Windows、Mac、Linux和DOS上编程了大约13年,使用的语言包括C/ c++、Python、Java、c#和各种较小的语言。虽然最初的问题是关于配置环境的,但我认为最好的回答是看看盲人如何使用计算机。
有些人使用谈话环境,比如在其他答案中提到的拉曼和Emacspeak环境。到目前为止,更常见的解决方案是有一个屏幕阅读器,它在后台监控操作系统活动,并通过合成语音或物理盲文显示(通常一次显示20到80个字符)提醒用户。这意味着盲人可以使用任何可访问的应用程序。
因此,我个人现在使用Visual Studio 2008,并且运行它时只做了很少的修改。我关闭了某些功能,比如在打字时显示错误,因为我觉得这会让人分心。在加入微软之前,我所有的开发都是在一个标准的文本编辑器(如记事本)中完成的,所以同样没有定制。
可以配置屏幕阅读器来宣布缩进。我个人不使用这个,因为Visual Studio会处理这个问题,而c#使用大括号。但这在Python这样的语言中是非常重要的,因为这里有空格。最后,Emacspeak使用不同的声音/音调来表示语法的不同部分(关键字、注释、标识符等)。