盲人程序員的編程生涯
本文來(lái)自于Stackoverflow上的一個(gè)問(wèn)題,下面確實(shí)有很多盲人程序員作出回答,筆者感觸頗深,故整理成文。
具體技術(shù)細(xì)節(jié)不必深究,主要了解一下他們的工作狀態(tài),以期讓更多的朋友關(guān)注殘障人士的生活與工作。
原問(wèn)題大致如下:
| 視力應(yīng)是大多數(shù)程序員理所當(dāng)然應(yīng)有的感官之一,大多數(shù)程序員都會(huì)花大量的時(shí)間盯著顯示器(尤其是當(dāng)他們處于巔峰狀態(tài)時(shí)),不過(guò)我知道還存在很多的盲人程序員(比如目前供職于Google的T.V. Raman)。 
             如果你是個(gè)盲人(或者視力衰退嚴(yán)重),那么你會(huì)怎樣設(shè)置你的開(kāi)發(fā)環(huán)境來(lái)協(xié)助你編程呢?  | 
        
下面整理一些精彩回答:
From Jared:
| 我是一個(gè)完全失明的大學(xué)生,已經(jīng)參加過(guò)幾個(gè)編程實(shí)習(xí),所以我的回答將基于這些經(jīng)驗(yàn)。我使用Windows xp作為操作系統(tǒng),使用Jaws的合成語(yǔ)音來(lái)閱讀屏幕上的內(nèi)容。對(duì)于Java編程,我使用eclipse,因?yàn)樗且粋€(gè)全功能可訪(fǎng)問(wèn)的IDE。
             以我的經(jīng)驗(yàn)來(lái)看,java編程中使用SWT作為GUI工具的可訪(fǎng)問(wèn)性要比使用Swing好一些,這就是為什么我放棄netbeans的原因。對(duì)于.net編程,我使用visual studio 2005,因?yàn)檫@是我實(shí)習(xí)時(shí)使用的標(biāo)準(zhǔn)版本,而且通過(guò)使用Jaws和一系列腳本(比如簡(jiǎn)化表單設(shè)計(jì)的腳本),可以使操作變得非常簡(jiǎn)單。 對(duì)于C和C++編程,我使用cygwin加上gcc作為編譯器,使用emacs或者vim作為編輯器,視具體工作而定。我的大部分實(shí)習(xí)涉及到Z/OS的編程,我使用一個(gè)登錄會(huì)話(huà)通過(guò)Cygwin訪(fǎng)問(wèn)USS子系統(tǒng),并且使用C3270作為我的3270模擬器來(lái)訪(fǎng)問(wèn)主框架的ISPF部分。 我一般依賴(lài)于帶點(diǎn)字(Braille:點(diǎn)字/盲文)顯示(譯者注:下圖為一種點(diǎn)字設(shè)備)的合成語(yǔ)音。我發(fā)現(xiàn)在標(biāo)點(diǎn)很重要且比較復(fù)雜的情況下使用點(diǎn)字顯示的話(huà),工作效率會(huì)更高。一個(gè)例子就是當(dāng)有很多if聲明很許多嵌套的括號(hào)和JCL時(shí),標(biāo)點(diǎn)就顯得非常重要了。 更新 我在玩cygwin下的Emacspeak http://emacspeak.sourceforge.net,我不確定這個(gè)作為編程使用的編輯器是否有用,因?yàn)樗袝r(shí)好像反應(yīng)遲鈍,不過(guò)我還沒(méi)有查看任何配置選項(xiàng)。  | 
        
From Saqib
| 我是個(gè)盲人,我已經(jīng)使用Windows、mac、Linux和DOS編程大約13年了,使用的語(yǔ)言從C/C++、Python、Java、C#到各種小眾語(yǔ)言。盡管原問(wèn)題是關(guān)于環(huán)境配置的,不過(guò)我認(rèn)為最好應(yīng)該從盲人如何使用電腦開(kāi)始回答。
             有些人使用有聲環(huán)境,例如T. V. Raman樓上提到的Emacspeak環(huán)境。迄今為止更通用的解決辦法是使屏幕閱讀器運(yùn)行在后臺(tái),并監(jiān)視操作系統(tǒng)的活動(dòng),然后通過(guò)合成語(yǔ)音或者物理點(diǎn)字顯示(一般一次顯示20至80個(gè)字符)提醒用戶(hù)。這就意味著盲人可以使用任何可訪(fǎng)問(wèn)的應(yīng)用程序了。 那么,我自己這些日子在用Visual Studio 2008,只做了很少的更改。我關(guān)掉了一些諸如在輸入時(shí)顯示錯(cuò)誤等功能,因?yàn)槲野l(fā)現(xiàn)這個(gè)功能很容易使你分心。在加入微軟行列之前,我的所有開(kāi)發(fā)工作都在類(lèi)似記事本(Notepad)這樣的標(biāo)準(zhǔn)的文本編輯器中完成,所以仍然沒(méi)有任何自定設(shè)置。 讓屏幕閱讀器讀出縮進(jìn)也是可能的,我自己不用這個(gè)功能,因?yàn)閂isual Studio會(huì)處理這些,并且C#中是用大括號(hào)的。但是在像Python這樣空格很關(guān)鍵的語(yǔ)言中就很重要了。最后,Emacspeak可以使用不同的聲音/音高來(lái)指出語(yǔ)法的不同部分(關(guān)鍵字、注釋、標(biāo)識(shí)符等)。  | 
        
From Manish
| 
             我是個(gè)盲人,已經(jīng)編程大約12年了。目前我是Sapient Corporation(一個(gè)劍橋的顧問(wèn)公司,專(zhuān)注基于Web的和胖客戶(hù)端的企業(yè)解決方案)的高級(jí)架構(gòu)師。我使用幾個(gè)屏幕閱讀器,不過(guò)大部分是在Windows上使用的Jaws和NVDA。 我大部分在微軟平臺(tái)上工作,使用visual studio作為開(kāi)發(fā)環(huán)境。我也使用像MS Sql企業(yè)版以及其他的數(shù)據(jù)庫(kù)操作工具、網(wǎng)絡(luò)監(jiān)控工具等。我曾嘗試花些時(shí)間使用emacspeak,不過(guò)由于我的工作大部分基于MS平臺(tái),所以不會(huì)在那上面花太多時(shí)間。我也花過(guò)幾年在Linux上使用C++,大部分時(shí)候是在windows上使用記事本或者visual studio完成所有的編碼工作,然后用samba與linux環(huán)境共享文件。我也使用borland C來(lái)做些小實(shí)驗(yàn)。最近在玩python,它普遍被認(rèn)為是對(duì)盲人用戶(hù)最不友好的程序語(yǔ)言,因?yàn)樗褂每s進(jìn)作為嵌套機(jī)制。說(shuō)到這里,最流行的開(kāi)源屏幕閱讀器NVDA就完全是用python寫(xiě)的,而且這個(gè)項(xiàng)目的一些貢獻(xiàn)者本身就是盲人。一個(gè)很有意思的問(wèn)題就是,我經(jīng)常被問(wèn)到,作為一個(gè)架構(gòu)師我是如何處理各種圖表的(UML、viso以及rational rose等等)。Visio可能是最易操作的圖表工具了,我還可以寫(xiě)jaws腳本來(lái)為我讀出rational rose圖表。我曾用過(guò)一個(gè)叫T-dub(technical diagram understanding for the blind)的工具來(lái)處理UML 2.0圖表,它是一些德國(guó)大學(xué)開(kāi)發(fā)出來(lái)的。我還用過(guò)一個(gè)基于java的非常丑陋的工具叫做magic draw來(lái)處理模型驅(qū)動(dòng)(model-driven)的開(kāi)發(fā)工作,并且作為androMDA項(xiàng)目的一個(gè)提交者(commiter)協(xié)助開(kāi)發(fā)了從UML模型生成.Net代碼的生成器。 總體來(lái)說(shuō),我發(fā)現(xiàn)我的自力更生激勵(lì)了整個(gè)團(tuán)隊(duì)。例如,當(dāng)一個(gè)圖表對(duì)溝通/文檔化一個(gè)設(shè)計(jì)非常重要時(shí),實(shí)際的設(shè)計(jì)過(guò)程牽扯到大量的思考和頭腦風(fēng)暴,并且當(dāng)設(shè)計(jì)定稿時(shí),你的一個(gè)隊(duì)友可以幫你快速將其整理為一個(gè)干凈整齊的圖片。人們通常將這種情況視為缺乏獨(dú)立性或能力,而我卻認(rèn)為這是純正的相互依存,因?yàn)槲液艽_定那個(gè)隊(duì)友靠他/她自己或著幾人輪流都不可能想出那樣的設(shè)計(jì),如果我依賴(lài)他將設(shè)計(jì)文檔化也是如此。我遇到的大部分障礙都是基于工具的不可訪(fǎng)問(wèn)的問(wèn)題。例如所有的oracle的產(chǎn)品都鼓吹其訪(fǎng)問(wèn)性好多年了(鄙視他們),但在團(tuán)隊(duì)環(huán)境中卻只搞了個(gè)在屏幕閱讀器和自定義腳本之上的額外的防御層。  | 
        
From Edward Kmett
| 
             我為大底特律盲人輔導(dǎo)會(huì)(Greater Detroit Society for the Blind)工作三年了,運(yùn)營(yíng)一個(gè)為盲人訪(fǎng)問(wèn)量身定制的BBS,并且和很多盲人用戶(hù)一起工作探尋如何能夠更好地滿(mǎn)足他們的需求,并幫助新的盲人用戶(hù)訓(xùn)練他們使用軟件和硬件。如果不出意外的話(huà),我至少學(xué)會(huì)了閱讀點(diǎn)字(盲文)來(lái)防止萬(wàn)一我遇到跟他們一樣的處境。 大部分盲人計(jì)算機(jī)使用者及程序員使用類(lèi)似屏幕閱讀器的東西。Jaws在某種程度上是最受歡迎的。幸運(yùn)地,現(xiàn)今的大多數(shù)應(yīng)用程序都提供了某種形式的殘障人士訪(fǎng)問(wèn)方式。你可能需要將你的環(huán)境稍微調(diào)整一下,讓它少說(shuō)一些,比如,可以考慮禁止Visual Studio中的智能感知(Intellisense)。 點(diǎn)字顯示設(shè)備就不那么常用了,相比之下也貴很多,它可以顯示40或80列文本,而且可以用在當(dāng)精確定位/標(biāo)點(diǎn)很重要的場(chǎng)合。而屏幕閱讀器可以配置成快速讀出標(biāo)點(diǎn),很多人發(fā)現(xiàn)它容易令人分心,其實(shí)通過(guò)它可以很容易找到適合自己的方式。Jaws可以配置成顯示驅(qū)動(dòng)的,因此你無(wú)法兼顧可訪(fǎng)問(wèn)性應(yīng)用程序。 同時(shí),很多法律上的盲人用戶(hù)仍然有一點(diǎn)遺留的視力。使用高對(duì)比度的背景和放大功能可以幫助很多這樣的用戶(hù)。 在Windows中使用ToggleKeys可以在你不小心敲擊了”caps lock“、”num lock“、”scroll lock“等健時(shí)讓你能夠聽(tīng)到。 我知道至少有一個(gè)Haskell(譯者注:一種純函數(shù)式編程語(yǔ)言)程序員使用屏幕閱讀器,并且不使用Haskell的布局規(guī)則直接編程,并且不使用非慣用(non-idiomatic)的選項(xiàng),而是用支持{;}的。因?yàn)樗粫?huì)使閱讀器讀出大量的標(biāo)點(diǎn),而且還得計(jì)算出Haskell布局規(guī)則中精確的縮進(jìn),這樣他就不會(huì)太過(guò)分心。同樣的,我還聽(tīng)說(shuō)一些盲人程序員在寫(xiě)Python的時(shí)候發(fā)些牢騷。 最終,你還是要學(xué)會(huì)發(fā)揮自己的長(zhǎng)處。  | 
        
From Kyle Burton
| 
             可以從Blinux項(xiàng)目開(kāi)始:http://leb.net/blinux/ 這個(gè)項(xiàng)目描述了如何獲得Emacspeak(帶文本閱讀的編輯器)并且還有許多其他資源。 我曾經(jīng)跟這樣的一個(gè)人工作,他的視力導(dǎo)致他不能使用顯示器,但他使用屏幕閱讀器軟件并花費(fèi)大量時(shí)間使用基于文本的應(yīng)用程序和shell也工作得很好。 維基百科上有個(gè)屏幕閱讀器得列表,也可以從這里開(kāi)始:  | 
        
From ifwzh
| 我是來(lái)自中國(guó)北京的一個(gè)研究生,我是計(jì)算機(jī)科學(xué)專(zhuān)業(yè)的并且大部分工作是編程。我天生弱視,需要使用放大工具才能看清屏幕上的文字。我在windows上使用微軟的放大鏡工具,在linux上使用compiz的放大插件。我一般將工具設(shè)置成放大原始字體的三倍。對(duì)于我來(lái)說(shuō),放大工具就夠了,主要問(wèn)題是速度,我需要移動(dòng)鼠標(biāo)來(lái)確保指針跟隨我所看到的文本,微軟的放大鏡提供了一個(gè)選項(xiàng)”自動(dòng)跟隨文本編輯光標(biāo)“,這可以讓我在編輯文本或編碼時(shí)擺脫頻繁移動(dòng)鼠標(biāo)的困擾。但是這招并不總是管用,因?yàn)榫庉嬡浖蛘逫DE可能不支持。linux上的放大工具比較難用。KDE中自帶的KMag擁有令人恐怖的刷新率,讓我的眼睛很不舒服,我現(xiàn)在使用的compiz的放大插件還可以,不過(guò)沒(méi)有自動(dòng)聚焦功能。對(duì)我來(lái)說(shuō),iOS提供了十分完美的全屏放大解決方案,尤其是ipad的9.7英寸顯示屏。它們的自動(dòng)聚焦就沒(méi)必要了,因?yàn)槲液苌儆盟鼈兙庉嫽蚓幋a。安卓(Android)系統(tǒng)只提供了非常少的可訪(fǎng)問(wèn)性功能,只有像搖動(dòng)反饋這樣的功能,對(duì)我根本沒(méi)用。在安卓上沒(méi)有什么放大工具,更別提像iOS上這種全屏放大的功能了。我以前研究Qt,希望做一個(gè)linux上好用的放大工具,甚至是安卓上的,不過(guò)很難有什么進(jìn)展。 | 
通過(guò)以上一些回答,我們可以大致了解一些盲人程序員每天的工作狀況,我很驚訝居然有這么多盲人程序員,對(duì)于我們來(lái)說(shuō),可能蒙上眼睛就什么也干不了了,真的很敬佩這些同仁們!
我也希望能夠通過(guò)本文讓更多Web開(kāi)發(fā)者更加關(guān)注網(wǎng)站的可用性及可訪(fǎng)問(wèn)性問(wèn)題,更多地關(guān)注殘障人士。















 
 
 
 
 
 
 