如果你是盲人,如何进行编程?

685

视觉是大多数程序员经常忽略的感官之一。大多数程序员会花费数小时盯着电脑显示器(尤其是在他们处于“状态”时),但我知道有些盲人程序员(例如目前在谷歌工作的T.V. Raman)。

如果你是一个盲人(或者正在逐渐失明),你会如何设置开发环境来辅助编程?

(请每个答案提出一个建议。这个问题的目的是将好的想法排在前面。此外,屏幕阅读器可以更早地读取好的想法。)


建议:使用语音识别软件进行编程。
24个回答

1015

我是一名完全失明的大学生,有过几次编程实习经历,所以我的答案将基于这些经验。我使用Windows XP操作系统和Jaws,通过合成语音读取屏幕上的内容。对于Java编程,我使用eclipse,因为它是一个功能齐全且易于访问的IDE。

根据我的经验,通常情况下,使用SWT作为GUI工具包的Java程序比使用Swing更易于访问,这就是为什么我避免使用netbeans的原因。对于任何.NET编程,我使用Visual Studio 2005,因为它是我实习期间使用的标准版本,并且使用Jaws和一组脚本非常容易访问,例如表单设计器等。

对于C和C++编程,我使用cygwin作为编译器,gcc作为编译器,根据需要使用emacs或vim作为编辑器。我的很多实习都涉及为Z/OS编程。我使用通过Cygwin的rlogin会话访问主机上的USS子系统,使用C3270作为我的3270仿真器来访问主机的ISPF部分。

我通常依赖合成语音,但确实有一个点字显示器。我发现,通常情况下,使用语音工作更快,但在标点符号很重要且变得复杂的情况下,我会使用点字显示器。例如,拥有许多嵌套括号的if语句和标点符号非常重要的JCL。

更新

我正在使用cygwin下的Emacspeak http://emacspeak.sourceforge.net 进行尝试。我不确定它能否用作编程编辑器,因为它似乎有点反应迟钝,但我还没有查看任何配置选项。


275
非常惊人。祝贺! - lurks
31
因为我有一个盲父亲,他非常了解电脑,我知道他为了让Windows可访问所经历的艰辛,所以你的设置让我惊叹。恭喜! :) - geocoin
118
假设您也使用笔记本电脑:您是否曾经关闭显示屏以延长电池寿命?因为这样做会非常划算。 - Jens Roland
99
这是我在SO上第一次看到这样惊人的回答。 - user47589
65
我从未想到这是可能的。我不再会忽略无障碍性。 - ChaosPandion
显示剩余19条评论

400

我是一名盲人程序员,已经在Windows、Mac、Linux和DOS上使用了大约13年的C/C++、Python、Java、C#和其他一些小语言。虽然最初的问题围绕着配置环境,但我认为最好的答案是看一个盲人如何使用计算机。

有些人使用语音环境,例如T. V. Raman和其他答案中提到的Emacspeak环境。到目前为止,远远最常见的解决方案是拥有一个屏幕阅读器,它在后台监控操作系统活动,并通过合成语音或物理点字显示(通常一次显示20到80个字符)提醒用户。这意味着盲人可以使用任何可访问的应用程序。

所以,我个人现在使用Visual Studio 2008,并且几乎没有做任何修改。我关闭某些功能,比如实时显示错误,因为我觉得这会分散注意力。在加入Microsoft之前,我所有的开发都是在像记事本这样的标准文本编辑器中完成的,所以再次没有进行任何自定义。

可以配置屏幕阅读器来宣布缩进。我个人不使用这个功能,因为Visual Studio会处理这个问题,而且C#使用花括号。但是在像Python这样需要考虑空格的语言中,这一点非常重要。最后,Emacspeak确实使用不同的声音/音高来指示语法的不同部分(关键字、注释、标识符等)。


5
记事本,哇。你有没有用过实体记事本来写代码(比如用盲文钢笔)?你使用智能感知吗?你的屏幕阅读器说话速度有多快? - Kragen Javier Sitaker
6
嗨,Saqib,我很喜欢你在hanselminutes上的访谈(假设你是同一个人 :) 。Ctrl-Shift-Escape的提示对我来说是新的! - UpTheCreek
5
UpTheCreek提到的是这个链接:http://channel9.msdn.com/blogs/dan/saqib-shaikh-and-scott-hanselman-designing-for-accessibility。请注意,此翻译仅供参考,不得用于法律或正式场合。 - idbrii
26
你头脑中掌握了多少程序,工作时需要刷新多少内容?就像一个视力正常的人来回滚动屏幕一样。 - Thorbjørn Ravn Andersen
哇,真的很有趣,Emacspeak 使用音高和音调! - Hamish
我之前不知道有盲人程序员。读了一些相关内容后,我感动得快要哭了。 - Adam Bruss

107

我是一名盲人程序员,已经从事编程工作12年左右。目前是Sapient Corporation(一家总部位于剑桥的咨询公司,创建基于Web和厚客户端的企业解决方案)的高级架构师。

我使用几种屏幕阅读器,但主要使用Windows上的Jaws和NVDA。

我大多数时间都在微软平台上工作,使用Visual Studio作为我的开发环境。我还使用MS Sql企业工作室和其他工具进行数据库访问、网络监控等。

我尝试花一些时间学习Emacspeak,但由于我的工作大多基于微软平台,所以从未真正在那里花费过多的时间。

我也在Linux上用C++工作了几年——大多数情况下我会在Windows上使用记事本或Visual Studio编写所有的代码,然后使用Samba与Linux环境共享文件。我还使用过Borland C进行一些实验性工作。最近一直在尝试使用Python,正如其他人所指出的,对于盲人用户来说它特别不友好,因为它使用缩进作为嵌套机制。话虽如此,最流行的开源屏幕阅读器NVDA就是完全使用Python编写的,并且该项目的一些提交者本身也是盲人。

作为一名架构师,我经常被问到一个特别有趣的问题,那就是我如何处理图表——UML、Visio和Rational Rose等。Visio可能是最易用的绘图工具了。我编写了JAWS脚本来读取Rational Rose图表。我使用过一种叫做T-dub(面向盲人的技术图形理解)的工具,这是由德国一所大学开发的,用于访问UML 2.0图表。我曾经使用基于Java的丑陋工具MagicDraw进行模型驱动开发,并成为AndroMDA项目的提交者之一,帮助从UML模型中开发.NET代码生成器。

总的来说,我发现在一个团队环境中我最能充分发挥自己的优势。例如,虽然图表对于沟通/记录设计非常有用,但实际的设计过程涉及到大量思考和头脑风暴,当设计思路已经确定后,你的团队成员可以帮助你快速将其整理成一个整洁的图片。

人们错误地将以上解释为缺乏独立性或能力,而我认为这是一种纯粹的相互依赖 - 如果只有团队成员自己想出那个设计,那么我相信他/她永远不可能完成它,反过来,如果我依赖他来记录设计,那就这样做吧。 我面临的大部分障碍都是基于工具无法访问。例如,所有的Oracle产品在这些年里逐渐减少了可访问性(真是羞耻),而团队环境基本上使我在屏幕阅读器和自定义脚本之外拥有额外的防御层。


6
你在印度吗?你消失在哪里了?发布完这篇文章后,你好像就不见了。 - Mamta D
1
作为一名程序员,我感到非常抱歉,从未足够关注无障碍问题...真的很抱歉... - Untitled

53

我是一名盲人开发者,我在Windows、GNU Linux和MacOS X平台下工作。每个平台都有不同的工作流程适用于盲人用户,这取决于盲人开发者所使用的屏幕阅读器。 对于盲人开发者来说,开发工具并不完全可访问。我可以在所有IDE中键入代码并使用编译功能,但如果我必须使用设计工具(如Interface Builder、XGlade或其他工具)来设计界面,则会遇到许多问题。当我使用Borland Delphi进行开发时,我可以添加一个控件,例如Button,并且可以使用对象检查器窗口修改控件的每个视觉属性。许多IDE使用对象检查器窗口来修改可视和非可视属性,但对于盲人开发者来说,问题在于添加新控件,因为添加新控件的方法是从画板上的调色板中拖放控件。Visual Studio 200x使用替代方法来完成此操作,但是IDE的界面在每个新版本中都会更改,这是一个大问题,因为Windows屏幕阅读器需要特殊支持,使用脚本来识别某些非标准应用程序的每个区域。盲人开发者可以使用他的屏幕阅读器使用Visual Studio 2008,但是当这个IDE的新版本出现时,他必须等待这个版本的脚本的新版本。 Xcode与Interface Builder目前没有拖放任务的替代方法。我多次向Apple提出了这个问题,但他们正在处理其他事情。我在App Store上发布了3个应用程序(Accessible minesweeper、accessible fruitmachine和Programar a ciegas RSS),我不得不通过代码设计所有界面。这是一项艰苦的工作,但我可以管理每个控件的所有功能。 Eclipse具有可访问的代码编辑器,但其他开发工具(如调试控制台、设计插件或文档区域)对于盲人用户的辅助工具存在问题。
文档对于盲人开发者也是一个问题。许多示例和演示使用图像来显示解释(如图片中所示设置环境设置)。
我认为问题不在于盲人。问题在于公司和开发团队认为无障碍性影响最终软件,但它不会影响开发软件。他们认为盲用户应该是客户,但盲用户不能成为开发伙伴。
盲人协会要求产品和服务的无障碍性,但他们忘记了盲人开发者。盲人可以担任律师、记者、教师,但盲人开发者甚至对盲人来说都是一个奇怪的概念。许多时候我感到孤独,因为我的一些盲人朋友无法理解我的工作。
您可以在我的博客文章中阅读关于这个问题的观点,用西班牙语写成,在http://www.programaraciegas.net/2010/11/05/la-accesibilidad-en-crisis-para-los-desarrolladores-ciegos/网页上有一个翻译工具。抱歉,我没有翻译它。

47

Emacs有很多扩展,允许盲人用户处理文本文件。您需要咨询该领域的专家,但emacs具有语音合成功能,可能还有其他功能。

此外,还有BLinux:

http://leb.net/blinux/

致力于为盲人提供Linux操作系统。已经存在很长时间,我认为至少有十年,并且非常成熟。


43
请注意,“盲”是一系列的状况 - 有些人在法律上被视为盲人,但可以通过使用大型监视器或放大镜等辅助工具来阅读,另外也有些人完全没有视力。我记得大学时有一个同学使用特殊设备来放大书本,并使用特殊软件来放大屏幕的部分内容,她为完成学业而努力,因为她的视力越来越差,最终可能会完全失明。
编程也有不同的需求 - 有些人擅长编写大量代码,有些人则更善于考虑整体框架和架构。我想,鉴于屏幕界面带来的困难,盲人的视力障碍可能会增强他们把握整体架构的能力...

31

我曾在大底特律盲人协会工作三年时间,管理一个专为盲人定制的BBS,并与许多盲人用户合作,以更好地满足他们的需求,并帮助新失明者适应当时可用的硬件和软件。如果没有其他东西,至少我学会了读取盲文,以防万一我遇到同样的情况!

大多数盲人计算机用户和程序员使用某种屏幕阅读器,Jaws尤其受欢迎。幸运的是,现在大多数主要应用程序都提供某种形式的残障人士访问。您可能需要微调环境以减少杂音,例如考虑在Visual Studio中禁用Intellisense。

点字显示器不太常见,价格相对较高,可以显示40或80列文本,并且在需要精确定位/标点符号时可以使用。虽然屏幕阅读器可以配置为快速朗读标点符号,但许多人发现这很分散注意力,在许多情况下感觉通过触摸点字更容易。 Jaws可以配置为驱动显示器,因此您无需使用辅助功能应用程序。

此外,许多合法盲人用户仍然有一些视力。使用高对比度背景和放大功能可以帮助这些用户。

在Windows中使用ToggleKeys将使您在意外轻敲模态“大写锁定”、“数字锁定”、“滚动锁定”等键时听到提示音。

我知道至少有一个Haskell程序员使用屏幕阅读器,明确地在不使用Haskell布局规则的情况下进行编程,而是选择使用相当非成语化但受支持的{;},因为对于他来说,让屏幕阅读器朗读标点符号要比找出符合Haskell布局规则的精确缩进更容易/不分心。关于同样的问题,我听到一些盲人程序员抱怨他们必须编写Python时的困难。

最终,你要学会利用自己的优势。


31

Hanselman最近与一名盲人开发者进行了非常有趣的播客访谈,具体内容请点击此处了解。


5
这不是之前发过回答的那个人吗?(Saquib) - UpTheCreek
3
这是指向播客的链接:http://www.hanselminutes.com/default.aspx?showID=143。 - UpTheCreek

23

我无法回忆起来源,但我曾经听说/读过一种称为"颜色编码"的可听语法形式 - 因此,与其将字符串分配读作

foo等于引用这是一个字符串引用

字符串部分将以不同的音高或声音进行朗读,以使元素之间的分离更清晰。


14

一个开始的地方是Blinux项目:

http://leb.net/blinux/

该项目介绍了如何获取Emacspeak(具有文本到语音功能的编辑器)以及许多其他资源。

我曾与一位视力非常差的人合作,他们无法使用显示器 - 他们使用屏幕阅读器软件,并花了很多时间使用基于文本的应用程序和shell。

维基百科上的屏幕阅读器软件列表也是另一个起点:http://en.wikipedia.org/wiki/List_of_screen_readers


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接