1. 程式人生 > >程式設計師如何學好英語

程式設計師如何學好英語

作為天天和計算機打交道的職業,程式設計師這個職業天生需要和英語打交道——我們常用的程式語言都是使用基於英文的編碼,但是作為中國程式設計師是否大家的英語都很好呢?其實不然。

程式設計師為何要學好英語

關於程式設計師為何要學好英語,似乎是一個悖論,在國內有大把的(優秀)程式設計師英語水平不是很好,為何一定要學習英語呢?

拋開旅遊看美劇等文化素養上的需求不談,但從程式設計師自身的工作需要上來說:

首先,我們不得不承認,大部分的計算機類技術文獻,文件都是由歐美(特別是美國)的計算機從業人員用英語編寫的,這其中有一部分被翻譯成中文,但是無論是翻譯的質量,還是時效性都遠遠跟不上英文材料的總量和增長速度。在國內我們已經有部落格園、CSDN等這樣的中文技術論壇、平臺,可以搜到大量的資料,但是一旦真正自己涉足到一個較深或不是那麼熱門的領域,中文的資料會非常的少。

以前有一句笑話是Software Engineer = StackOverflow程式設計師,說的是程式設計師”獨立“寫不出程式碼,需要去Google或者StackOverflow上搜索程式碼複製貼上的行為。然而事實上對於初級程式設計師,大部分確實需要經歷這樣的過程。懂得搜什麼,如何搜,也是程式設計師的一種能力。我以前很多時候都回去搜中文的問題,比如”CSS如何實現Div居中對齊“,這樣可以得到很多CSDN等論壇的答案,但是隨鑽研的領域越來越深、廣,終有一天發現自己搜尋的問題已經找不到中文答案了,便很自然的切換到用英文去搜索,從此便打開了新的知識寶庫。

其次,英語是一種交流的工具,如果你在一家外企公司,那麼你的程式碼不僅會被中國同事看,也有可能會被外國同事看到,而作為程式設計師之間交流的主要手段——註釋和文件,則不可避免的將使用英文為主要語言。即使公司裡沒有非中文母語的同事,如果專案開源,或者提供SDK,那麼也有很大的概率需要“走出國門”。那麼在給別人看的時候,你的程式碼水平和英文水平一樣重要,程式碼中的變數,函式命名是否遵守英文語言習慣,註釋是否清晰易懂,都將會影響別人對這個工程的總體感觀。

往大方向說,我相信中國的計算機技術是越來越好,會成為領先世界的水平。我們現在的軟體生態還是離不開國外的技術產品,將來再過10年,20年,可能(我希望)情況會反過來。為了讓別人用上我們的東西,並且讓他們離不開我們,那麼我們自己創造出來的“好東西”不僅我們孤芳自賞,也要推薦給全世界的同行用,要讓他們用的順手,要他們幫我們擴散。這離不開每個程式設計師的努力,讓自己工作的成果國際化。

我的學英語經歷

在我上學的時候,英語課是從初一開始學。我一直覺的自己的英語成績還可以,高考時英語也得到了140+以上的分數。進入大學後開始學習各種基礎課和專業課,英語課也就成了可有可無的課程。大一大二時乘著高中的老本還沒有忘光,將四六級都考了,每次都是低空飛過。

第一次感到自己的英語不夠用是在上專業課時,用到影印版的教材,上面都是密密麻麻的英文,高中的那點可憐的詞彙量根本就派不上用場,幸好老師準備了中文版本的筆記。但是因為教材本身就是國外大學編寫的, 中文版的講義確實有不詳盡的地方。可惜當年自己的惰性太大,對於這樣的課程只想快點理解笑話,好應付作業和考試,沒有去生啃那些原版的教材。同班的很多同學從大一便朝著出國留學的方向努力,開始啃“紅寶書”,我感覺他們在看英文教材上就有很大的優勢,往往該門課上得到的分數也越高。

2009年開始研究Android程式設計,以當時Android資料的稀缺性,能夠參考的只有官方的文件,於是我便開啟了生啃英文文件的過程,初讀英文文件的時候覺得比較傷腦,好在自己有強烈的學習Android程式設計的動力,能夠堅持下來。感謝當年國外網站在國內還沒有被普遍遮蔽,那幾年靠著Google和StackOverflow解決了不少程式設計上的問題,也培養了自己遇到問題去查英文的習慣。

研究生的時候我第一次面試美國公司的實習生職位,對面的面試官問了我一個基本的問題:面向物件(OOP)的三大特性是什麼?這個問題我作為學生當然知道——封裝、 繼承、 多型,但是當時的我光顧著演算法方面的準備,對於這樣的基本概念卻傻眼了。我漲紅了臉,只能用稚嫩的句子去解釋對這三個特性的理解,好在接下來的面試面試官可能意識到我的英語表達水平有限,也沒有過多的詢問這種知識類的問題。在美國公司實習的一年多間,平均一星期會有一次和美國同事的視訊會議,雖然當時的英文表達能力還是很菜,但是培養了我寫英文郵件的能力,以及敢於開口說英文的能力。

2012年出國工作後去了日本工作,開始學日語。其實我在大學裡上了三個學期的二外日語,在出國之前也通過了N1的考試,沒想到到了日本之後,遇到的最大日語理解障礙的是竟然英語。因為日語和漢語共同的部分我已經可以連蒙帶猜的理解,但是日語中有很多從英文直接“拿”過來的詞語,特別是現代出現的事物,幾乎都都是直接拿來。在生活中,菜店裡的進口蔬菜,甜品店裡的點心,醫院開出的處方藥,到處都充斥著英文詞彙。我的很多英文詞彙,還是在學習日語的過程中補充的。

2014年跳槽到美國公司之後,辦公室裡的官方語言是英文,於是開啟了不得不說英語的模式。剛開始到組裡的時候說英語還是用的腦內翻譯漢語的思路,在腦內實時翻譯中文的句子,這樣說出來的英語口語是結結巴巴的,而且經常有中文概念不知道如何表達,只能採用定語從句(Which is blablabla...)來描述,有時候需要半天才能把自己的想法解釋清楚。好在同事比較nice,不會因為我的英語說的不流暢就拒絕交流,他們會嘗試理解我的意思之後用正確的表達方式重複一遍,求證是否是我要表達的意思,於是我就會去一點點的模仿別人的英語,如果同事的表達我覺的比較簡明易懂,下次我在同樣的場景就會和他說一樣的句子。漸漸的,我的腦子中不會再出現中文再翻譯英語的過程,而是有什麼想法就直接蹦出來對應的英語語句。拿演算法來對比的話,就是在腦海裡已經維護了一個自己的意圖(Intent)到英語語句框架(Fragment)的map,使用O(1)的複雜度就可以將這個框架提取出來並填詞。

直到現在,我也不敢說自己的英語能力有多好,我可以看懂英文資料,可以正常的用英文和同事交流,但我會經常單複數不分,會用錯單詞,也會犯低階的語法錯誤。但是我不會覺得在一堆老外中插不上話,可以很自信的去和他們交流自己的觀點。

我的經歷可能對大家沒有太多的參考價值,畢竟有全英文的工作環境是一個很大的助力,下面我想分享一下我自認為的即使在沒有英文環境的情況下也可以提高自身英文能力的方法。

程式設計師如何提高英語能力

我們將英語能力分為聽說讀寫四方面,如果一般不在外企工作的話可能聽和說的能力不太長用到,那麼我們就談談讀和寫的能力。

讀英語的能力

程式設計師在讀英文文件中的最大的問題是專業詞彙的問題。說道專業詞彙,不得不說中國在本土化上做的比較好,國內計算機專業的課本幾乎可以做到0英文。所有英語的概念,都有對應的中文概念翻譯。這在翻譯層次上來說是一個進步,至少不會像日本那樣在本國的語言中引入大量的外來詞彙,但是帶來的問題就是大家對於計算機領域中的概念所對應的英文完全不敏感。

所以我的建議是,在接觸一種新的技術、框架的時候,先不要搜尋《XXX入門寶典》,《學習XXX看這一篇就夠了》這樣的總結性文章,而是先去專案的官方網站/Github主頁看看對應的文件。讀文件學英語的好處是你不是為了學而學,是確實在工作上有需要去學習,這樣降低了學習的成本。

一開始讀英文文件確實會比較頭蒙,但好在現在的翻譯軟體比較發達,螢幕取詞,劃詞翻譯等這些方便的功能可以很便利的提供所選詞彙的意思。一般一種技術的文件,讀過幾篇之後就基本上沒有什麼障礙了,因為最核心的概念詞語就那麼幾個,看完幾篇之後就可以融匯貫通了。其實計算機專業的詞彙真的不算特別多,讀完幾個專案的文件之後你會發現共通的詞彙越來越多,讀起來也越來越輕鬆。

對於剛開始看英文文件的程式設計師,個人建議一開始可以從比較小的專案看起,比如用到的某個linux命令的用法,某個小開源外掛的用法,等到讀文件的能力提升了,再去看看大型專案的文件。讀文件不是為了讀而讀,結合工作上的需要,能夠引起自己讀的動力最好。

寫英語的能力

作為程式設計師,我們平常的工作中少不了也寫程式碼,在寫程式碼的過程中,實際上我們也不可避免的要書寫英文。程式設計師雖然不一定需要達到能夠寫大篇的英文議論文的程度,但是擁有能夠使用英語正確的向其他程式設計師表達自己思想的能力還是很重要的。具體一點來說,有以下幾點值得我們去鍛鍊。

1. 程式碼中的變數,函式,類的名字是否清晰易懂,翻譯是否做到“信達雅”。在國內的程式設計師有時限於自己的英語詞彙量,使用拼音來取名,有時看的會覺得莞爾一笑。有時程式設計師做到了英文命名但是用的詞卻不得當,比如之前有個蝦米程式設計師在程式碼中歧視活動VIP使用者的例子,就是一個活生生的英語沒有做到“信達雅”的反面教材。做活動送的VIP使用者可以翻譯成EventVIP或者是PromotionVIP、CampaignVIP,Event是字面的活動意思,但是這裡的VIP是指代在促銷(Promotion)活動中免費送出的VIP,所以從語義上說更加貼近Promotion,而在國外這類促銷活動俗稱為Campaign,所以個人覺得最好的翻譯應該是CampaignVIP。其實取名方法並不難,開源的程式碼很多,開原始碼中和自己專案有類似的概念的地方,都可以借鑑過來。

2. 程式碼中的註釋是否語句通順。一開始寫程式碼註釋時不可避免的會寫一些語法上比較幼稚的語句,錯詞、單複數不分、時態錯誤甚至病句的情況也並不少見。如何改善這樣的情況呢?我個人有幾點體會:

a. 照葫蘆畫瓢法。如果該專案中的其他程式碼已經有比較好的風格的註釋,可以把別人寫的句子抄過來,再將意思稍微改動一下。

b. 搜尋引擎糾錯法。在不得不自己“原創”註釋的時候,如果自己沒有十分的把握,覺的句子寫的不是很地道,那麼不妨把自己寫下來的草稿拿去原味Google一番,一般這樣你會在網上搜到意思相近的句子。這樣的方法特別適合糾正一些副詞使用的錯誤,比如in,on,at等等。

3. 為專案寫Readme。Reame就是一個專案的門面,寫好Readme的話會為專案的專業性增色不少,尤其是有專案有開源需求的時候。這裡我建議可以去借鑑一下其他開源專案的Readme。Readme其實也是有“八股”的,參照別人的Readme形式為自己專案的Readme打好結構稿,然後逐條替換。長久之後可以形成自己的風格,寫起來就越來越順手。

總結

總結起來,我自己總結程式設計師學好英語的兩個關鍵就是多讀英文文件和模仿別人的英語,這和我們學習程式設計的方法其實是差不多的——讀程式碼和模仿代