(點選上方公眾號,可快速關註)
英文: Quora,編譯: 伯樂線上/牧師
【伯樂線上導讀】:
先來看看一位盲人程式員 T.V. Raman 的故事:14 歲時因青光眼失去了視力,在志願者的幫助下他完成了大學學業, 1989 年得到一臺盲人用語音合成器和當時最先進的讀屏軟體,來到美國攻讀博士學位,後來併成為了一名電腦科學家。Raman 目前在谷歌研究院工作,之前在 IBM 和 Adobe 工作,他可以在 23 秒內複原盲人魔方。他現在使用電腦沒有任何障礙,他天天都上網瀏覽資訊,他還可以使用特別的手機來看地圖。他的完整故事看這篇:http://blog.jobbole.com/12176/
有位網友看過 Raman 的故事後,在 Quora 上問「有視覺障礙的程式員是怎樣程式設計的?」伯樂線上摘譯了 3 位網友的分享,其中 2 位就是盲人程式員。
1.Tommy MacWilliam ,Quora 工程經理,285 頂
你曾經參加過 Python 拼寫比賽嗎?想象一下如果你每天的生活都是如此該怎樣。
我最好的朋友之一在高三時被確診為 Leber 遺傳性視神經病變,Leber 遺傳性視神經病變會造成視力逐漸衰退。在剛入大學時,他就失去了雙眼的視力。和我一樣,他主修電腦科學;但不同的是,看他程式設計是我見過的最不可思議的事情。
在大學裡,他曾經把螢幕放大器和文字轉語音軟體組裝到一起。使用的放大器叫做 MAGic,MAGic 可以迅速放大螢幕上的某一點到只顯示出幾個字母。而顯示器本身就是一個巨大的 30 英寸的投影機樣式的東西, 並專門為有視覺障礙的人進行了顯示最佳化。至於文字轉語音的軟體,我記得他嘗試了很多不同的產品,更喜歡使用 JAWS。我特別記得的是,他說現有的開源解決方案相較於他使用的昂貴大型裝置(這完全得益於我們學校的支援)就是一個笑話。
他總是把螢幕閱讀器的速度設定為最快,大概每分鐘掃清 300 字,而有聲書的文字通常以這個速度的一半來播放。在我聽來這就像一種完全不同的語言,但他聽起來卻很順暢。事實上,他更喜歡用一個版本非常古老的火狐瀏覽器(3.5 版本左右),因為這個版本能夠很好地支援他的螢幕閱讀器。他幾乎完全使用鍵盤快捷鍵,這使他能夠快速找到應用程式併在視窗之間迅速切換。也就是說,這個放大了 40 倍的螢幕幾乎不可能跟上他操作的速度,但他卻比我見過的許多其他程式員更有效率。
他的具體程式設計方法。他用的是 emacs 編輯器(我想這是因為他對鍵盤快捷鍵已經極其熟練了),當滾動翻頁時,螢幕閱讀器會讀出程式碼。同樣,螢幕閱讀器會讀出終端輸出,因此任何會導致不能轉換成文字或聲音的問題都是不被允許的。如你所想,程式語言甚至比英文單詞更難理解。沒有大量使用語法符號的程式語言則更容易理解,像 Python,Ruby 等更像英語的友好語言更容易理解。並且,程式中使用縮排比使用花括號更難理解,因為你要聽出每一行使用的 tab 鍵數。
為了更好的描述我的意思,我說一件發生在我們第二堂導論課上的事。這節課用 OCaml 語言教,這是一種語法獨特的函式式語言。他不得不聽著這樣讓人不著頭腦的話:“let rec fib n equals return match n with return pipe one hyphen greater than… semicolon semicolon” 等等。並一度在一個不能編譯的程式碼庫的上工作。他一遍遍聽著大聲朗讀的荒謬的語法,但是一切聽起來都那麼正常。直到他在課上想盡辦法,一個視力正常的助教才指出,由於這樣或那樣的原因,螢幕閱讀器把數字 “0” 讀成了字母 “o” (即 “哦” 的聲音)。而這隻是一個全新的,視力正常的程式員無需處理的 bug。
值得一提的是,他也對 HTML 輔助規範充滿了熱情,尤其是 ARIA。而網際網路上的大多數網站完全忽略了這件事,儘管要實現它是多麼的微不足道。對他而言,網站有與沒有 ARIA 功能就像白天與黑夜的區別。
現在,他是一名全職軟體工程師。
2. Parham Doustdar,1200+ 頂
我是一名盲人 PHP 開發者。我程式設計的方式不同於其他答案下提到的那些方法。在繼續之前,讓我告訴你一些我自己的事。
我生來就是失明的。我眼睛的狀況其實並不重要,重點是,我從未有過 “失去視力” 的問題,因為它不可能發生。這就使很多事情變得簡單了。
我個人使用的開發工具是 IDE 。而很多盲人朋友並不使用 IDE,最可能是因為 IDE 的介面對於我們的螢幕閱讀器來說並不是完全的無障礙。我們的同行有一個問題就是太忙了以致於只照顧到了大多數人而忽視了少數人的聲音。舉個例子,Jetbrains IDE 的整個系列都不是無障礙的。而版本 IDEA-111425 才是為盲人和有視覺障礙的人準備的無障礙開發工具。
我個人使用的是 Zend Studio,這是一款基於 Eclipse 的 IDE,大部分人可能都知道或者用過。Eclipse 是那些使你愉悅的產品之一,它的無障礙功能實現的非常好。雖然並沒有完全實現無障礙,但是實現 80% 就已經夠我使用了。作為盲人,你要學會使用你能夠獲得的來生活。
因此,這就使得我不必記憶方法簽名,檔案和其他所有的事情,從而使我的大腦可以更高效地去思考其他的事情–就像遺留程式碼庫為什麼會這麼難理解。
我沒有使用布萊葉盲文鍵盤。布萊葉鍵盤只有 6 個鍵,輸入每一個字元都必須同時按住 6 個鍵,這就要比有很多鍵可以一個個快速按下的鍵盤慢很多。我也沒有使用盲文顯示器,我只是把螢幕閱讀器的速度設為 420 個字每分鐘,這要比用盲文顯示器閱讀要快得多。
我認為最重要的是,你必須要領先於你的同行。作為盲人,你先天就要很遭遇很多困難,因為你沒有大多數人都有的視覺感官。這不會是個大問題,除非是我之前提過的多數人與少數人的對比。既然你是少數人,你就必須設法做到周圍很多人認為是理所當然的事。 在這一點上,我相信力量是建立在你被禁用的能力之上的:由此你學習去提升自己,去前進,去打破不可能,而不是每天擔心失業。
3. Lucas Radaelli,Google 工程師,17900+ 頂
我完全雙目失明。我在 Google 工作,編寫程式碼來更改排名演演算法。就我個人經驗而言,我認為許多盲人程式員的程式設計方式,和視力正常的同事們並無太大差別。大多數時候,我都會用 Emacs 編輯器(Emacs 有個朗讀擴充套件叫 Emacspeak),還有瀏覽器來查閱谷歌內部頁面。
(Lucas Radaelli 和他的導盲犬)
主要差別是,我們要麼聽螢幕上的內容,要麼透過盲文顯示器來閱讀。我不能對使用盲文顯示器發表評論,因為我還沒有買過這樣的顯示器(太昂貴了),但我可以聊聊程式員是如何透過聽力來寫程式碼的。
僅透過聽力來程式設計的最大挑戰在於,你必須能記住很多東西。一行一行地聽程式碼。也可以逐字或按字元來聽程式碼,問題來了,在規定的時間內要聽完螢幕內的程式碼。聽完後,你還不能動手程式設計,要查詢函式定義,瞭解傳參的變數名。然後記住它。如果想再次查詢函式定義,我會設定一個標記。大家會發現,這樣做或許會耗費一些寶貴時間。所以提高記憶力非常有用。
我喜歡透過 Emacspeak 程式設計,比如說,在寫 C++ 程式碼時,它能提供了許多非常酷的東西。在朗讀變數、函式和其他程式語言元素時,Emacspeak 會使用不同的語調。所以很容易區分,你也可以把這個看成是聲音版的程式碼高亮工具吧。
最後補充回應大家的好奇心:盲人程式員不用縮排程式碼。我們通常是寫完程式碼後,再對縮排程式碼。我們在這方面沒有優勢。
或許你會問,那遇到 Python 程式碼又如何?我挺喜歡 Python 的,即便在縮排這點上…… 但我發明瞭一些技巧,比如在每個縮排塊的結尾跳一行,這樣我可以很快知道程式碼塊何時結束了。當我閱讀其他人的程式碼時,我會先在螢幕閱讀器上設定一個選項,告訴我縮排級別。但我發現這樣有點煩,因為我讀的每一行程式碼,螢幕閱讀器都會讀出該行程式碼中的 space 數量。
看完本文有收穫?請轉發分享給更多人
關註「程式員的那些事」,提升程式設計技能