|
本帖最后由 linux_Ultra 于 2009-6-30 09:13 編輯
在網(wǎng)上看到 篇文章,-----俗話(huà)說(shuō),沒(méi)有金剛鉆,就別攬瓷器活兒。套用到IT業(yè),英語(yǔ)不行,就別做程序員。網(wǎng)上關(guān)于程序員學(xué)英語(yǔ)的文章不少,但我想談?wù)勎易约旱目捶。首先詳細討論一下為什么程序員離了英語(yǔ)不行,然后針對程序員應該怎么學(xué)英語(yǔ)說(shuō)說(shuō)我的體會(huì )。英語(yǔ)是計算機的母語(yǔ),是程序的母語(yǔ),所以必然是程序員的母語(yǔ)。程序中的變量名、函數名起得好不好是決定代碼質(zhì)量和可維護性的最關(guān)鍵因素。高質(zhì)量的代碼應該是這樣的:代碼基本上是自解釋的(self-explanatory),不需要太多注釋?zhuān)还艽a的規模有多大,具有相關(guān)知識背景的讀過(guò)文檔的人都可以立刻上手、立刻參與維護和開(kāi)發(fā)。要想使代碼能夠自解釋?zhuān)o變量和函數起個(gè)好名字很關(guān)鍵,很顯然,只能用英文起名字,一是用漢語(yǔ)拼音起名字可讀性很差,二是英文單詞通常比漢語(yǔ)更expressive(看吧,如果用漢語(yǔ)來(lái)說(shuō),就得說(shuō)“表達能力更強”、“更有表現力”這么羅嗦),由于程序的復雜性,變量和函數往往表示一些很抽象的概念,起個(gè)既準確又簡(jiǎn)潔的名字并不容易,可是很多時(shí)候,用漢語(yǔ)需要很多字才能說(shuō)清楚的一件事,用英文一個(gè)單詞再加點(diǎn)詞形變化就能說(shuō)清楚了。例如APUE上講sleep函數的實(shí)現,其中有個(gè)變量表示“本來(lái)應該睡到某個(gè)時(shí)刻,但是提前被信號喚醒了,喚醒時(shí)與本來(lái)應該睡到的時(shí)刻相差的時(shí)間”,如果為了簡(jiǎn)潔而不求準確,這個(gè)變量名至少也得叫“未睡到”,而書(shū)中只用了一個(gè)單詞unslept,非常準確、簡(jiǎn)潔地表達了這個(gè)意思。為了寫(xiě)程序而學(xué)英語(yǔ)需要學(xué)到什么水平?我認為能起出這種變量名就夠水平了。
很多在IT外企工作的中國人,說(shuō)話(huà)寫(xiě)文章經(jīng)常夾雜著(zhù)英文單詞(比我嚴重多了因為我不在外企),非?梢岳斫,確實(shí)是為了表達得更準確簡(jiǎn)潔的需要,而不是純?yōu)榱藀lay zhuangbility?傊,要寫(xiě)程序必須學(xué)好英語(yǔ),否則連變量名都起不好,這雖然是一個(gè)非技術(shù)問(wèn)題,但卻是個(gè)根本問(wèn)題,比任何技術(shù)問(wèn)題都重要。當然,現在很多編程語(yǔ)言也支持用Unicode字符給變量和函數起名,但是你見(jiàn)過(guò)有人用漢字寫(xiě)程序嗎?根本不實(shí)用。有人會(huì )辯駁說(shuō)一頁(yè)英文翻譯成中文往往只占半頁(yè),中文不是更簡(jiǎn)潔嗎?但是你算算打一頁(yè)英文和打半頁(yè)中文哪個(gè)敲鍵盤(pán)次數多。另外,要讀別人的代碼也必須學(xué)好英語(yǔ),如果你不知道unslept是由 sleep變形而來(lái)的,就體會(huì )不到其中的精妙,只有大量閱讀高質(zhì)量的代碼,才能寫(xiě)出高質(zhì)量的代碼,創(chuàng )作都是從模仿開(kāi)始的。說(shuō)說(shuō)英語(yǔ)對于看書(shū)學(xué)習的重要性。中文技術(shù)書(shū)和英文技術(shù)書(shū)的水平根本不在一個(gè)量級上,這是有很多原因的,不能全歸結于中文書(shū)的作者水平差。最重要的是,出中文書(shū)的低回報率決定了作者不可能花太多心血在上面,你去amazon看看一本書(shū)賣(mài)多少美刀,再去chinapub看看一本書(shū)賣(mài)幾塊錢(qián)。老外寫(xiě)一本書(shū),可以做到全書(shū)沒(méi)有一個(gè)拼寫(xiě)錯誤(當然英文的拼寫(xiě)檢查工具更完善也是部分原因),中文能找出一本沒(méi)有錯別字的書(shū)嗎?Knuth可以懸賞讓全世界讀者來(lái)找磋,中文書(shū)作者有哪個(gè)敢這么做?不是因為老外態(tài)度有多認真治學(xué)有多嚴謹,而是因為他們賺到了,就應該拿出高質(zhì)量的作品來(lái),不然會(huì )被讀者罵的。英文技術(shù)書(shū)的翻譯質(zhì)量通常很差。也不能歸結于譯者的水平差,我也翻譯過(guò)書(shū),也努力想譯好,但真的很難譯好。IT業(yè)的新名詞層出不窮,像“內核”、 “網(wǎng)絡(luò )”這種常見(jiàn)術(shù)語(yǔ)還好,稍微專(zhuān)一點(diǎn)的術(shù)語(yǔ)都沒(méi)有統一的譯名。
我們在教學(xué)中發(fā)現,很多學(xué)員看書(shū)時(shí)搞不清這本書(shū)的名詞A和那本書(shū)的名詞B是什么區別,來(lái)問(wèn)老師,才發(fā)現原來(lái)A和B就是一回事兒。這是一個(gè)單詞對應多個(gè)譯名的情況,還有一個(gè)譯名對應多個(gè)單詞的情況,比如field、domain、realm都譯成“域”,block、 bulk都譯成“塊”,argument、parameter都譯成“參數”,attribute、property都譯成“屬性”,雖然這些詞的意思本來(lái)就差不多,但是在一篇文章里,作者可以換著(zhù)用,不同的單詞表示不同的概念,翻譯完了一看,都成一個(gè)概念了。英文書(shū)背后都有index,看到一半忘了某個(gè)名詞是怎么定義的就可以翻index,而譯文通常沒(méi)有index,名詞都已經(jīng)亂七八糟了,沒(méi)法做index。還有更發(fā)指的是,老外喜歡造詞,現有的單詞上加一點(diǎn)變化和組合(例如有人喜歡說(shuō)automagically),看著(zhù)心領(lǐng)神會(huì ),想譯出來(lái)就很費勁。老外即使在技術(shù)書(shū)中也經(jīng)常用一些生動(dòng)的表達方式和俏皮話(huà),而中文的書(shū)面語(yǔ)言非常死板,生動(dòng)的表達方式只存在于口語(yǔ)中,如果寫(xiě)在書(shū)上就很不像話(huà),這也是很難翻譯的一個(gè)重要原因?粗形淖g本,不僅質(zhì)量差,而且跟不上時(shí)代,通常一本英文書(shū)出來(lái),至少要等一到兩年才能看到中文譯本。兩年!等你看到這本書(shū)的中文譯本時(shí),這個(gè)版本都快淘汰了。然后說(shuō)說(shuō)英語(yǔ)在開(kāi)發(fā)工作中的重要性?磿(shū)學(xué)習通常只起一個(gè)引導入門(mén)的作用,在工作中更有用的是手冊、文檔。學(xué)完了C語(yǔ)言開(kāi)始寫(xiě)程序了,誰(shuí)還會(huì )去查 K&R附錄中的庫函數?查man page才是最有效率的。
然而手冊比入門(mén)書(shū)更少有中文譯版,因為手冊是隨時(shí)變的,會(huì )隨著(zhù)軟件版本更新,而且需要看這些開(kāi)發(fā)手冊的人通常不會(huì )有英文障礙,有英文障礙的人即使看了翻譯的手冊也寫(xiě)不出好程序來(lái),所以當然沒(méi)必要翻譯了。不管什么技術(shù),官方的手冊和技術(shù)標準才是最原始的第一手資料,看別的書(shū)都是以訛傳訛,由于自然語(yǔ)言不可避免是有歧義的,文檔中表達得不準確的地方就會(huì )被文檔的讀者也就是技術(shù)書(shū)的作者誤解,技術(shù)書(shū)中再有表達不準確的地方又被譯者誤解。我們小時(shí)候都玩過(guò)傳話(huà)的游戲,幾個(gè)人站一排,通過(guò)悄悄話(huà)傳一句話(huà),傳到最后變成什么了?所以,學(xué)網(wǎng)絡(luò )協(xié)議,就得看RFC,學(xué)ARM,就得看ARM公司的 Architecture Reference Manual,要學(xué)習C語(yǔ)言就得看C99,有歧義不要緊,自己去揣測原作者的意思,總比道聽(tīng)途說(shuō)的可靠。我們的學(xué)員出去面試經(jīng)常被問(wèn)到的一個(gè)問(wèn)題就是:在開(kāi)發(fā)工作中遇到問(wèn)題,書(shū)和文檔上都沒(méi)有答案,網(wǎng)上搜一下也沒(méi)有答案,怎么辦?要我說(shuō),能看懂源代碼的就去源代碼中找答案,這稱(chēng)為hacking,不管是內核、libc還是各種framework,你調用的東西有問(wèn)題都能從它的代碼中找到原因。如果沒(méi)有能力 hacking,或者時(shí)間緊不想去hacking,最好的辦法就是去官方郵件列表和IRC問(wèn)。
如果英文不行就沒(méi)辦法了,只能去一些中文論壇:“各位大蝦幫忙,小弟有一個(gè)問(wèn)題求救!跪求!在線(xiàn)等。!”在線(xiàn)等了好幾天也無(wú)人問(wèn)津,或者答非所問(wèn)。豈不知逛這些論壇的沒(méi)有大蝦,都是菜鳥(niǎo),大蝦們都在IRC上聊得正歡呢。我在做Qt開(kāi)發(fā)時(shí)曾經(jīng)有一個(gè)問(wèn)題,當時(shí)在教育網(wǎng),上國外網(wǎng)不方便,去各大中文論壇問(wèn)了好幾天也沒(méi)人給出滿(mǎn)意的回答,后來(lái)花錢(qián)連了國外網(wǎng),去 trolltech官方新聞組提問(wèn),只等了幾分鐘就得到了滿(mǎn)意的解決辦法。這次經(jīng)歷給我留下了深刻印象,從此以后再也沒(méi)有去中文論壇。那么,如果現在英文水平很差,又想做程序員,應該怎么學(xué)英語(yǔ)呢?我下面說(shuō)的方法有兩個(gè)前提,一是你的英文至少達到高中畢業(yè)水平,也就是語(yǔ)法基本都學(xué)完了,即使用得不熟練也知道有那么回事兒,二是你希望盡快在工作中用上英語(yǔ),寫(xiě)程序夠用就行,而不是有考T考G這樣的更高要求。學(xué)習英語(yǔ)有聽(tīng)說(shuō)讀寫(xiě)四個(gè)方面的要求,做程序員至少需要讀和寫(xiě)非常流暢,如果在外企工作還需要聽(tīng)和說(shuō)的能力。技術(shù)英語(yǔ)和考T考G是不一樣的,一是聽(tīng)和說(shuō)不像讀和寫(xiě)那么重要,不必擔心自己是“聾啞英語(yǔ)”,沒(méi)關(guān)系,絲毫不影響你成為編程高手,二是要求的詞匯量要小得多?糡考G都要拿一本單詞書(shū)背,很少有人會(huì )覺(jué)得背單詞很有意思,至少我是覺(jué)得很痛苦,幸運的是看技術(shù)書(shū)不需要多少詞匯量。
技術(shù)書(shū)的描述對象都是局限于一個(gè)很窄的領(lǐng)域的,就那么幾個(gè)單詞翻來(lái)覆去地用,而且技術(shù)書(shū)是為了讓人看懂的(不像詩(shī)是為了讓人看不懂的),比較復雜的詞在書(shū)中都有定義或解釋。有些作者喜歡賣(mài)弄詞匯量,用一些很生僻的單詞,也有些作者賣(mài)弄一些典故,由于文化背景不同很難理解,不過(guò)這些通常都可以無(wú)視,不會(huì )影響閱讀,還是因為技術(shù)書(shū)是為了讓人看懂的。對于學(xué)習者來(lái)說(shuō),閱讀能力是最重要的,等你完成了學(xué)習,成為一個(gè)合格的開(kāi)發(fā)者時(shí),需要寫(xiě)代碼注釋?zhuān)枰獙?xiě)文檔,需要通過(guò)郵件交流,寫(xiě)作的能力才開(kāi)始重要了。所以應該首先從閱讀開(kāi)始練習英語(yǔ),F在就拿起一本英文原版書(shū)開(kāi)始看吧。
和學(xué)游泳一樣,閱讀的能力只能通過(guò)閱讀本身來(lái)練習。我的經(jīng)驗是,不必先系統學(xué)習了單詞和語(yǔ)法再看書(shū),可以在看書(shū)時(shí)用到什么就補什么。我建議初學(xué)者看電子版,因為現在的詞典軟件都可以鼠標取詞,邊看邊查很方便,很多勤快人喜歡把查過(guò)的單詞都抄下來(lái),我覺(jué)得沒(méi)有必要,反正查字典很方便,下次再看到了就再查,多查幾次總會(huì )記住的,抄下來(lái)就打斷了看書(shū)的思路,而且不見(jiàn)得抄下來(lái)就能記住。也許是因為我這人比較懶,我用的都是懶辦法。很多人不喜歡看電子書(shū),理由是盯著(zhù)屏幕看書(shū)太累,那么盯著(zhù)屏幕寫(xiě)程序累不累?這種人顯然不適合做程序員。語(yǔ)法不熟練怎么辦?大多數情況下單詞的意思都明白了就不影響閱讀。技術(shù)書(shū)有時(shí)候喜歡用長(cháng)句,其中可能包含各種從句,如果實(shí)在讀不懂就去查語(yǔ)法書(shū),同樣也不需要把這種從句徹底弄明白,只要這一句能看過(guò)去就行了,以后多查幾遍書(shū),自然就掌握了。另外,技術(shù)書(shū)是說(shuō)明文,通常不應該有過(guò)去時(shí),看到過(guò)去時(shí)就需要注意了,很可能是虛擬語(yǔ)氣,如果不注意這一點(diǎn),看到的意思可能和真實(shí)的意思正好相反。 |
|