程序員為什么不能只學好“專業英語”?

jopen 9年前發布 | 5K 次閱讀 程序員

程序員為什么不能只學好“專業英語”?

文/余晟

在我上大學的時候,除去普通的英語課程,專業課程里還有一門《計算機英語》。當時大家的普遍認為,普通的“英語”是過四六級用的,《計算機英語》才是專業真正需要的。

等到工作了,我發現很多人都持這樣的觀點:程序員應該學好英語。這樣才能方便地查找資料,迅速地學習最新的知識。換句話說,“學好英語”在很多 人看來,就是是“學好專業英語”——這項要求已經很高了,我曾經在《程序員要怎樣學英語》里提到,不但要能看懂文檔,還要知道“黑屏”是 blank screen,“死機”是 system halt,否則查找就會很費力。

但是今天我想強調的是,對程序員來說,學好“英語”而不是“專業英語”是非常重要的。只學好專業英語,看得了技術文檔,但那一大堆專業術語和概 念可能會像隕石一樣,沒來由地墜落下來,只能生吞活剝地硬背。如果學好英語,你才會有融會貫通的感覺,知道那些術語和概念原來是從地里長出來的,底下連著 根莖。

程序員經常被認為是呆頭呆腦的古怪家伙,講一口外人聽不懂的語言,其實技術世界里的很多術語都是從生活經驗中借鑒而來,是非常形象而有趣的。可 惜,這些意味和趣味無法通過翻譯傳遞,也很難在硬邦邦地研讀時體會到。所以如果你只看中文資料,或者以學習“專業英語”的態度來對待,即便能記住,也只能 硬背下來。天長日久,“古怪”的感覺也就油然而生了。

比如說 cache 和 buffer,這兩個英文單詞是完全不一樣的,但中文分別翻譯為“緩存”和“緩沖”,看起來非常像,很多人確實會搞混(不要吃驚,我的面試經歷已經證明 了)。分得清的人都知道,“緩存”是 cache,“緩沖”是 buffer,不過其中還有些麻煩,因為“緩存”很多時候是用于讀取的,“緩沖”很多時候是用于寫入的。為避免混淆,很多人干脆放棄中文直接說英文,這確 實是一種有效的辦法,但是 cache 和 buffer 到底是什么意思呢,它們是天上掉下來的,還是地里長出來的?答案是后者。

cache 在“緩存”的含義誕生之前就存在了,意思是 a secret place of storage,也就是“用于存放物品的隱蔽區域”,比如動物貯存食物的地方,或者人類埋藏金幣的秘穴。所以用 cache 來命名計算機中的“緩存”是非常恰當的:cache 把數據存儲起來加快讀取,而且它必須是隱蔽的。我已經見過無數程序員寫的不透明緩存了,這種“緩存”必須改動主線業務,使用和維護都異常麻煩,如果程序員 多懂一點英文,知道 cache 原本的意思,問題會少很多吧。

buffer 也是這樣,它原本的意思是 devices or pieces of material for reducing shock or damage due to contact,也就是“用來減少接觸時產生的震蕩或損壞的裝置或材料”,比如為了用于逃生的氣墊,或者汽車上用的減震器。用 buffer 來命名計算機中的“緩沖”也是非常巧妙的:buffer 用來解決兩種設備在數據交互時的數據丟失(或者阻塞等待)的問題。我讀大學的時候,老師特意強調“緩沖是用來解決速度不匹配的問題”,讓大家印象深刻。但 是如果大家多懂一點英文,知道 buffer 原本的意思,估計不用老師強調自己也能理解了。

再比如 serialize 和 flatten,這兩個單詞 Java 程序員都熟悉,其它程序員也不會陌生。前者是“序列化”或者“串行化”嘛;后者,嗯,有些人翻譯為“扁平化”,還有些人干脆不翻譯,就叫 flatten 好了。總之,這兩個詞都比較難記憶,給其他人解釋的時候也很麻煩。

文檔里是這么描述 serialize 的:the object can be flattened into bytes and subsequently inflated in the future。不妨看看 flat 和 serial 原本的意思。flatten 的意思是“打扁、推倒”,serial 的意思是“無間隔的規律擺放”。這樣看來,整個描述是非常形象了:“序列化”指的是把對象拆散成一堆緊密碼放好的字節(也就是字節數組啦),之后還能組裝 起來。有很多人糾結 serialize 到底是“序列化”還是“串行化”,如果你懂得 seralize 和 flatten 的真正意思就會知道,“序列化”還是“串行化”都不合適,但是,也無所謂。

沒錯,程序員面對的是機器和科技,但這并不意味著他們的工作就沒有任何樂趣,就需要硬生生造出很多“天外飛仙”一般的術語。恰恰相反,許多技術 術語都像莊稼一樣,把生活經驗當成誕生的土壤,所以顯得非常生動形象。如果程序員的母語是英語,他看到 cache, buffer, serialize, flatten 之類的單詞,雖然也要學習其專業含義,但有背景知識和生活經驗可以借鑒,所以“背靠大樹好乘涼”。但如果程序員的母語是中文,英文又不夠好,就沒有這種優 勢,那些專業術語就像隕石雨一樣難以理解和應付,只能生吞活剝,麻煩不說,久而久之也容易變得無趣。

有人說,好的翻譯可以解決這種問題。一定程度上來說確實如此,比如董樂山先生當年翻譯的“導彈”,朗朗上口又生動形象,大家一聽都明白。可惜如 今這樣用心的翻譯家已經太少了,加上新單詞出現太快,翻譯的速度根本跟不上。所以對程序員來說,真正的出路還在于自己,不要自我束縛在“專業英語”的世界 里,而是要認真完整地學英語,了解英文單詞本來的意思,真正懂得用英語思考和理解世界,才能收獲融會貫通的效果。

當然,這個道理反過來也是成立的,還記得前不久被關掉的“曲徑”嗎?它的命名和 cache, buffer, serialize 等等一樣,其中的邏輯“不足為外人道也”,老外程序員如果只懂中文技術資料,看到這個名字多半也要撓頭瞪眼了。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!