盲人程序员的编程生涯

openkk 12年前
   <p>        本文来自于 <a href="/misc/goto?guid=4958188962313964239" target="_blank">Stackoverflow</a> 上的<a href="/misc/goto?guid=4958344315847911192" target="_blank">一个问题</a>,下面确实有很多盲人程序员作出回答,<a title="笔者" href="/misc/goto?guid=4958344316657066149" target="_blank">笔者</a>感触颇深,故整理成文。</p>    <p>        具体技术细节不必深究,主要了解一下他们的工作状态,以期让更多的朋友关注残障人士的生活与工作。</p>    <p>        原问题大致如下:</p>    <blockquote>     <p>视力应是大多数程序员理所当然应有的感官之一,大多数程序员都会花大量的时间盯着显示器(尤其是当他们<em>处于巅峰状态</em>时),不过我知道还存在很多的盲人程序员(比如目前供职于 Google 的T.V. Raman)。</p>     <p>如果你是个盲人(或者视力衰退严重),那么你会怎样设置你的开发环境来协助你编程呢?</p>    </blockquote>    <p>        下面整理一些精彩回答:</p>    <p>        <strong>From Jared:</strong></p>    <blockquote>     <p>我是一个完全失明的大学生,已经参加过几个编程实习,所以我的回答将基于这些经验。我使用 Windows xp 作为操作系统,使用 <a href="/misc/goto?guid=4958344317450699972" target="_blank">Jaws</a> 的合成语音来阅读屏幕上的内容。对于 Java 编程,我使用 eclipse,因为它是一个全功能可访问的 IDE。</p>     <p>以我的经验来看,java 编程中使用 SWT 作为 GUI 工具的可访问性要比使用 Swing 好一些,这就是为什么我放弃 netbeans 的原因。对于 .net 编程,我使用 visual studio 2005,因为这是我实习时使用的标准版本,而且通过使用 Jaws 和一系列脚本(比如简化表单设计的脚本),可以使操作变得非常简单。</p>     <p>对于C和 C++ 编程,我使用 cygwin 加上 gcc 作为编译器,使用 emacs 或者 vim 作为编辑器,视具体工作而定。我的大部分实习涉及到Z/OS 的编程,我使用一个登录会话通过 Cygwin 访问 USS 子系统,并且使用 C3270 作为我的 3270 模拟器来访问主框架的 ISPF 部分。</p>     <p>我一般依赖于带点字(Braille:点字/盲文)显示(<a title="译者" href="/misc/goto?guid=4958344316657066149" target="_blank">译者</a>注:下图为一种点字设备)的合成语音。我发现在标点很重要且比较复杂的情况下使用点字显示的话,工作效率会更高。一个例子就是当有很多 if 声明很许多嵌套的括号和 JCL 时,标点就显得非常重要了。</p>     <p><strong>更新</strong></p>     <p>我在玩 cygwin 下的 Emacspeak <a href="/misc/goto?guid=4958344318976482275" target="_blank">http://emacspeak.sourceforge.net</a>,我不确定这个作为编程使用的编辑器是否有用,因为它有时好像反应迟钝,不过我还没有查看任何配置选项。</p>    </blockquote>    <p style="text-align:center;"><img title="fudiao-2.jpg" alt="盲人程序员的编程生涯" src="https://simg.open-open.com/show/ed61f5c08cc6980dfd10ed08298c6bca.jpg" width="468" height="346" /></p>    <p>        <strong>From Saqib</strong></p>    <blockquote>     <p>我是个盲人,我已经使用 Windows、<a title="mac" href="/misc/goto?guid=4958344319779853882" target="_blank">mac</a>、Linux 和 DOS 编程大约 13 年了,使用的语言从C/C++、Python、Java、C#到各种小众语言。尽管原问题是关于环境配置的,不过我认为最好应该从盲人如何使用电脑开始回答。</p>     <p>有些人使用有声环境,例如T. V. Raman 楼上提到的 Emacspeak 环境。迄今为止更通用的解决办法是使屏幕阅读器运行在后台,并监视操作系统的活动,然后通过合成语音或者物理点字显示(一般一次显示 20 至 80 个字符)提醒用户。这就意味着盲人可以使用任何可访问的应用程序了。</p>     <p>那么,我自己这些日子在用 Visual Studio 2008,只做了很少的更改。我关掉了一些诸如在输入时显示错误等功能,因为我发现这个功能很容易使你分心。在加入微软行列之前,我的所有开发工作都在类 似记事本(Notepad)这样的标准的文本编辑器中完成,所以仍然没有任何自定设置。</p>     <p>让屏幕阅读器读出缩进也是可能的,我自己不用这个功能,因为 Visual Studio 会处理这些,并且 C# 中是用大括号的。但是在像 Python 这样空格很关键的语言中就很重要了。最后,Emacspeak 可以使用不同的声音/音高来指出语法的不同部分(关键字、注释、标识符等)。</p>    </blockquote>    <p>        <strong>From Manish</strong></p>    <blockquote>     <p>我是个盲人,已经编程大约 12 年了。目前我是 Sapient Corporation(一个剑桥的顾问公司,专注基于 Web 的和胖客户端的企业解决方案)的高级架构师。我使用几个屏幕阅读器,不过大部分是在 Windows 上使用的 Jaws 和 NVDA。</p>     <p>我大部分在微软平台上工作,使用 visual studio 作为开发环境。我也使用像 MS Sql 企业版以及其他的数据库操作工具、网络监控工具等。我曾尝试花些时间使用 emacspeak,不过由于我的工作大部分基于 MS 平台,所以不会在那上面花太多时间。我也花过几年在 Linux 上使用C++,大部分时候是在 windows 上使用记事本或者 visual studio 完成所有的编码工作,然后用 samba 与 linux 环境共享文件。我也使用 borland C 来做些小实验。最近在玩 python,它普遍被认为是对盲人用户最不友好的程序语言,因为它使用缩进作为嵌套机制。说到这里,最流行的开源屏幕阅读器 NVDA 就完全是用 python 写的,而且这个项目的一些贡献者本身就是盲人。一个很有意思的问题就是,我经常被问到,作为一个架构师我是如何处理各种图表的(UML、viso 以及 rational rose 等等)。Visio 可能是最易操作的图表工具了,我还可以写 jaws 脚本来为我读出 rational rose 图表。我曾用过一个叫T-dub(technical diagram understanding for the blind)的工具来处理 UML 2.0 图表,它是一些德国大学开发出来的。我还用过一个基于 java 的非常丑陋的工具叫做 magic draw 来处理模型驱动(model-driven)的开发工作,并且作为 androMDA 项目的一个提交者(commiter)协助开发了从 UML 模型生成 .Net 代码的生成器。</p>     <p>总体来说,我发现我的自力更生激励了整个团队。例如,当一个图表对沟通/文档化一个设计非常重要时,实际的设计过程牵扯到大量的思考和头脑风暴,并 且当设计定稿时,你的一个队友可以帮你快速将其整理为一个干净整齐的图片。人们通常将这种情况视为缺乏独立性或能力,而我却认为这是纯正的相互依存,因为 我很确定那个队友靠他/她自己或着几人轮流都不可能想出那样的设计,如果我依赖他将设计文档化也是如此。我遇到的大部分障碍都是基于工具的不可访问的问 题。例如所有的 oracle 的产品都鼓吹其访问性好多年了(鄙视他们),但在团队环境中却只搞了个在屏幕阅读器和自定义脚本之上的额外的防御层。</p>    </blockquote>    <p>        <strong>From Edward Kmett</strong></p>    <blockquote>     <p>我为大底特律盲人辅导会(Greater Detroit Society for the Blind)工作三年了,运营一个为盲人访问量身定制的 BBS,并且和很多盲人用户一起工作探寻如何能够更好地满足他们的需求,并帮助新的盲人用户训练他们使用软件和硬件。如果不出意外的话,我至少学会了阅读 点字(盲文)来防止万一我遇到跟他们一样的处境。</p>     <p>大部分盲人计算机使用者及程序员使用类似屏幕阅读器的东西。<a href="/misc/goto?guid=4958344320579457699" target="_blank">Jaws</a> 在某种程度上是最受欢迎的。幸运地,现今的大多数应用程序都提供了某种形式的残障人士访问方式。你可能需要将你的环境稍微调整一下,让它少说一些,比如,可以考虑禁止 Visual Studio 中的智能感知(Intellisense)。</p>     <p><a href="/misc/goto?guid=4958344321380095038" target="_blank">点字显示设备</a>就 不那么常用了,相比之下也贵很多,它可以显示 40 或 80 列文本,而且可以用在当精确定位/标点很重要的场合。而屏幕阅读器可以配置成快速读出标点,很多人发现它容易令人分心,其实通过它可以很容易找到适合自己 的方式。Jaws 可以配置成显示驱动的,因此你无法兼顾可访问性应用程序。</p>     <p>同时,很多法律上的盲人用户仍然有一点遗留的视力。使用高对比度的背景和放大功能可以帮助很多这样的用户。</p>     <p>在 Windows 中使用 ToggleKeys 可以在你不小心敲击了”caps lock“、”num lock“、”scroll lock“等健时让你能够听到。</p>     <p>我知道至少有一个 Haskell(<a title="译者" href="/misc/goto?guid=4958344316657066149" target="_blank">译者</a>注: 一种纯函数式编程语言)程序员使用屏幕阅读器,并且不使用 Haskell 的布局规则直接编程,并且不使用非惯用(non-idiomatic)的选项,而是用支持{;}的。因为它不会使阅读器读出大量的标点,而且还得计算出 Haskell 布局规则中精确的缩进,这样他就不会太过分心。同样的,我还听说一些盲人程序员在写 Python 的时候发些牢骚。</p>     <p>最终,你还是要学会发挥自己的长处。</p>    </blockquote>    <p>        <strong>From Kyle Burton</strong></p>    <blockquote>     <p>可以从 Blinux 项目开始:<a href="/misc/goto?guid=4958344322906207591" target="_blank">http://leb.net/blinux/</a></p>     <p>这个项目描述了如何获得 Emacspeak(带文本阅读的编辑器)并且还有许多其他资源。</p>     <p>我曾经跟这样的一个人工作,他的视力导致他不能使用显示器,但他使用屏幕阅读器软件并花费大量时间使用基于文本的应用程序和 shell 也工作得很好。</p>     <p>维基百科上有个屏幕阅读器得列表,也可以从这里开始:</p>     <p><a href="/misc/goto?guid=4958344323702120008" target="_blank">http://en.wikipedia.org/wiki/List<em>of</em>screen_readers</a></p>    </blockquote>    <p>        <strong>From ifwzh</strong></p>    <blockquote>     <p>我是来自中国北京的一个研究生,我是计算机科学专业的并且大部分工作是编程。我天生弱视,需要使用放大工具才能看清屏幕上的文字。我在 windows 上使用微软的放大镜工具,在 linux 上使用 compiz 的放大插件。我一般将工具设置成放大原始字体的三倍。对于我来说,放大工具就够了,主要问题是速度,我需要移动鼠标来确保指针跟随我所看到的文本,微软的 放大镜提供了一个选项”自动跟随文本编辑光标“,这可以让我在编辑文本或编码时摆脱频繁移动鼠标的困扰。但是这招并不总是管用,因为编辑软件或者 IDE 可能不支持。linux 上的放大工具比较难用。KDE 中自带的 KMag 拥有令人恐怖的刷新率,让我的眼睛很不舒服,我现在使用的 compiz 的放大插件还可以,不过没有自动聚焦功能。对我来说,iOS 提供了十分完美的全屏放大解决方案,尤其是 ipad 的9.7英寸显示屏。它们的自动聚焦就没必要了,因为我很少用它们编辑或编码。安卓(Android)系统只提供了非常少的可访问性功能,只有像摇动反馈 这样的功能,对我根本没用。在安卓上没有什么放大工具,更别提像 iOS 上这种全屏放大的功能了。我以前研究 Qt,希望做一个 linux 上好用的放大工具,甚至是安卓上的,不过很难有什么进展。</p>    </blockquote>    <p>        通过以上一些回答,我们可以大致了解一些盲人程序员每天的工作状况,我很惊讶居然有这么多盲人程序员,对于我们来说,可能蒙上眼睛就什么也干不了了,真的很敬佩这些同仁们!</p>    <p>        我也希望能够通过本文让更多 Web 开发者更加关注网站的可用性及可访问性问题,更多地关注残障人士。 </p>    <div id="come_from">    来自:     <a id="link_source2" href="/misc/goto?guid=4958344324493500246" target="_blank">www.ituring.com.cn</a>    </div>