我是一个程序员,我也是一个盲人。我的世界中从来没有任何画面,我生来就看不见任何东西。
每次新同事——那些从来没有经历过任何形式视力障碍的人——听说了我的事迹,常常会跑来问我以下这些问题:
- 那么,你怎么读取别人的代码?
- 哇!你是怎么做到写代码的呢?
- 或,最普遍的一个——你会做梦吗?
我总是一次又一次地被问及这些问题。所以今天的主题主要就是回答这三个问题。我会尽量解答大家最大的困惑——盲人究竟是如何写代码的。
关于如何打字
在很多人的印象里,盲人需要使用经过特殊改装的电脑。甚至有些同样有视力障碍的人也赞同这一观点。
那么,现在就让我来揭穿这个秘密吧。上面你看到的字以及下面我将写下来的字都是用一个非常平常的戴尔 Inspiron 15r SE 笔记本打出来的,你可以在任何戴尔笔记本商店中买到它。该机运行的是 Windows 8(这是预装的)。我只需要做一件事,那就是安装一个开源的屏幕阅读器名为 NVDA(www.nvaccess.org)。
屏幕阅读器,基本上要做的就是——等待它——读取屏幕上的内容。它将屏幕的文本内容通过类似 Siri 的语音完成从文本到语音的转换。
屏幕阅读器还允许使用盲文显示器,盲文显示器这个设备上面的盲文系统单元可以根据屏幕上的高亮内容不断地刷新形成新的字母。
所有有视力障碍的计算机用户只需要适应这些就够了。这个程序,可以让我做很多事情,很多你闭上眼睛可能完全不能想象的事情,如:
- 使用 Firefox 浏览网页
- 使用 Microsoft Word 写报告,然后按照大学教授的严格要求整理格式
- 写博客文章,就像本文
- 录制、编辑、混音和发布音频(唱歌和制做音乐也是我的爱好之一)
- 使用制作音频的 app,如 Reaper、Goldwave、Audacity 和 Sonar
- 使用 Eclipse、Visual Studio 和古老的 NotePad++ 编码网站和 app
我之所以将这些技术一一列举出来是为了说明,我也可以和你们一样使用它们。
关于如何编码
比如下面这段代码:
if(x=5){ print ("hello world!") }
读出来的效果就是:If 左括号x等于 5 右括号左大括号 print 左括号引号 hello world 惊叹号引号右括号右大括号。
这是一个典型的 if 模块 Java 编程语言,听到我耳朵里的就是上面这么冗长的一句话。我倾向于先关闭括号和括号中的语音通知,直到后面需要括号匹配调试的时候再关注括号中的内容,这样我就不会因为描述过于冗长而听得云里雾里不知所以。有的人喜欢将默认的“左大括号”替换成“花括号”或者“开始”,只是为了节省几毫秒的时间。老实说,这语速对于不习惯的人而言那是相当快滴。
也许你不相信,但是我确实是通过语音阅读用 NotePad++ 写下了这篇博客文章。
所以,我的编码方式可能和你们的并没有什么本质的区别,也不用将我想象的有多么的牛逼。唯一的区别是,我不用鼠标,我用的是快捷键和命令行。
不过不幸的是,在盲人编程这个领域,一切都没有得到很好的完善。程序员每天都在使用主要工具,如 IntelliJ 编辑器,以及它所有的衍生产品(PHPStorm、WebStorm、PyCharm),我都没办法使用。因为这些程序的开发人员没有遵守无障碍原则,正如在修建公园的时候没有设置一个无障碍通道一样。SourceTree 也同样如此,虽然它有在慢慢改善,但是直到现在每次用的时候,依然让我异常痛苦。
因此,我不得不不断地寻找可用的教程、程序和工具,而不能像在超市货架上随便挑一个现成的就可以。
关于我如何做梦
我也会做梦,和你们是一样的。大致就是白天接收过的信息,晚上再将这些经历和神经兴奋反馈到梦里。所不同的是,我实际上是看不到任何东西的。
不过,我可以听到、闻到、感觉到一切,就像在现实生活中。原因很简单:梦里面的视觉形象是在已存储的视觉知识上来构建的。由于我打从娘胎以来就一直没看到过东西,所以我没有任何可参考的视觉框架。例如,我的梦中曾碰到过一个大大的 404 error:但是没有图片的。
和我一起写代码
我真心希望这篇文章能对大家有所帮助,无论是鼓励还是激励。编程是一份很有意思的工作,也是可以养活我自己的高薪职业,希望大家能和我一起 good good study,day day up:)