作為天天和計(jì)算機(jī)打交道的職業(yè)讥电,程序員這個(gè)職業(yè)天生需要和英語打交道——我們常用的編程語言都是使用基于英文的編碼,但是作為中國程序員是否大家的英語都很好呢踩叭?其實(shí)不然
程序員為何要學(xué)好英語
關(guān)于程序員為何要學(xué)好英語,似乎是一個(gè)悖論,在國內(nèi)有大把的(優(yōu)秀)程序員英語水平不是很好制圈,為何一定要學(xué)習(xí)英語呢?
拋開旅游看美劇等文化素養(yǎng)上的需求不談畔况,但從程序員自身的工作需要上來說:
首先鲸鹦,我們不得不承認(rèn),大部分的計(jì)算機(jī)類技術(shù)文獻(xiàn)跷跪,文檔都是由歐美(特別是美國)的計(jì)算機(jī)從業(yè)人員用英語編寫的馋嗜,這其中有一部分被翻譯成中文,但是無論是翻譯的質(zhì)量吵瞻,還是時(shí)效性都遠(yuǎn)遠(yuǎn)跟不上英文材料的總量和增長速度葛菇。在國內(nèi)我們已經(jīng)有博客園甘磨、CSDN等這樣的中文技術(shù)論壇、平臺(tái)眯停,可以搜到大量的資料济舆,但是一旦真正自己涉足到一個(gè)較深或不是那么熱門的領(lǐng)域,中文的資料會(huì)非常的少莺债。
以前有一句笑話是 S oftware E ngineer = S tack O verflow程序員滋觉,說的是程序員”獨(dú)立“寫不出代碼,需要去Google或者StackOverflow上搜索代碼復(fù)制粘貼的行為齐邦。然而事實(shí)上對(duì)于初級(jí)程序員椎侠,大部分確實(shí)需要經(jīng)歷這樣的過程。懂得搜什么措拇,如何搜我纪,也是程序員的一種能力。我以前很多時(shí)候都回去搜中文的問題儡羔,比如”CSS如何實(shí)現(xiàn)Div居中對(duì)齊“宣羊,這樣可以得到很多CSDN等論壇的答案,但是隨鉆研的領(lǐng)域越來越深汰蜘、廣仇冯,終有一天發(fā)現(xiàn)自己搜索的問題已經(jīng)找不到中文答案了,便很自然的切換到用英文去搜索族操,從此便打開了新的知識(shí)寶庫苛坚。
其次,英語是一種交流的工具色难,如果你在一家外企公司泼舱,那么你的代碼不僅會(huì)被中國同事看,也有可能會(huì)被外國同事看到枷莉,而作為程序員之間交流的主要手段——注釋和文檔娇昙,則不可避免的將使用英文為主要語言。即使公司里沒有非中文母語的同事笤妙,如果項(xiàng)目開源冒掌,或者提供SDK,那么也有很大的概率需要“走出國門”蹲盘。那么在給別人看的時(shí)候股毫,你的代碼水平和英文水平一樣重要,代碼中的變量召衔,函數(shù)命名是否遵守英文語言習(xí)慣铃诬,注釋是否清晰易懂,都將會(huì)影響別人對(duì)這個(gè)工程的總體感觀。
往大方向說趣席,我相信中國的計(jì)算機(jī)技術(shù)是越來越好兵志,會(huì)成為領(lǐng)先世界的水平。我們現(xiàn)在的軟件生態(tài)還是離不開國外的技術(shù)產(chǎn)品宣肚,將來再過10年毒姨,20年,可能(我希望)情況會(huì)反過來钉寝。為了讓別人用上我們的東西弧呐,并且讓他們離不開我們,那么我們自己創(chuàng)造出來的“好東西”不僅我們孤芳自賞嵌纲,也要推薦給全世界的同行用俘枫,要讓他們用的順手,要他們幫我們擴(kuò)散逮走。這離不開每個(gè)程序員的努力鸠蚪,讓自己工作的成果國際化。
我的學(xué)英語經(jīng)歷
在我上學(xué)的時(shí)候师溅,英語課是從初一開始學(xué)茅信。我一直覺的自己的英語成績還可以,高考時(shí)英語也得到了140+以上的分?jǐn)?shù)墓臭。進(jìn)入大學(xué)后開始學(xué)習(xí)各種基礎(chǔ)課和專業(yè)課蘸鲸,英語課也就成了可有可無的課程。大一大二時(shí)乘著高中的老本還沒有忘光窿锉,將四六級(jí)都考了酌摇,每次都是低空飛過。
第一次感到自己的英語不夠用是在上專業(yè)課時(shí)嗡载,用到影印版的教材窑多,上面都是密密麻麻的英文,高中的那點(diǎn)可憐的詞匯量根本就派不上用場洼滚,幸好老師準(zhǔn)備了中文版本的筆記埂息。但是因?yàn)榻滩谋旧砭褪菄獯髮W(xué)編寫的, 中文版的講義確實(shí)有不詳盡的地方遥巴∏Э担可惜當(dāng)年自己的惰性太大,對(duì)于這樣的課程只想快點(diǎn)理解笑話挪哄,好應(yīng)付作業(yè)和考試吧秕,沒有去生啃那些原版的教材琉闪。同班的很多同學(xué)從大一便朝著出國留學(xué)的方向努力迹炼,開始啃“紅寶書”,我感覺他們在看英文教材上就有很大的優(yōu)勢,往往該門課上得到的分?jǐn)?shù)也越高斯入。
2009年開始研究Android編程砂碉,以當(dāng)時(shí)Android資料的稀缺性,能夠參考的只有官方的文檔刻两,于是我便開啟了生啃英文文檔的過程增蹭,初讀英文文檔的時(shí)候覺得比較傷腦,好在自己有強(qiáng)烈的學(xué)習(xí)Android編程的動(dòng)力磅摹,能夠堅(jiān)持下來滋迈。感謝當(dāng)年國外網(wǎng)站在國內(nèi)還沒有被普遍屏蔽,那幾年靠著Google和StackOverflow解決了不少編程上的問題户誓,也培養(yǎng)了自己遇到問題去查英文的習(xí)慣饼灿。
研究生的時(shí)候我第一次面試美國公司的實(shí)習(xí)生職位,對(duì)面的面試官問了我一個(gè)基本的問題:面向?qū)ο螅∣OP)的三大特性是什么帝美?這個(gè)問題我作為學(xué)生當(dāng)然知道——封裝碍彭、 繼承、 多態(tài)悼潭,但是當(dāng)時(shí)的我光顧著算法方面的準(zhǔn)備庇忌,對(duì)于這樣的基本概念卻傻眼了。我漲紅了臉舰褪,只能用稚嫩的句子去解釋對(duì)這三個(gè)特性的理解皆疹,好在接下來的面試面試官可能意識(shí)到我的英語表達(dá)水平有限,也沒有過多的詢問這種知識(shí)類的問題占拍。在美國公司實(shí)習(xí)的一年多間墙基,平均一星期會(huì)有一次和美國同事的視頻會(huì)議,雖然當(dāng)時(shí)的英文表達(dá)能力還是很菜刷喜,但是培養(yǎng)了我寫英文郵件的能力残制,以及敢于開口說英文的能力。
2012年出國工作后去了日本工作掖疮,開始學(xué)日語初茶。其實(shí)我在大學(xué)里上了三個(gè)學(xué)期的二外日語,在出國之前也通過了N1的考試浊闪,沒想到到了日本之后恼布,遇到的最大日語理解障礙的是竟然英語。因?yàn)槿照Z和漢語共同的部分我已經(jīng)可以連蒙帶猜的理解搁宾,但是日語中有很多從英文直接“拿”過來的詞語折汞,特別是現(xiàn)代出現(xiàn)的事物,幾乎都都是直接拿來盖腿。在生活中爽待,菜店里的進(jìn)口蔬菜损同,甜品店里的點(diǎn)心,醫(yī)院開出的處方藥鸟款,到處都充斥著英文詞匯膏燃。我的很多英文詞匯,還是在學(xué)習(xí)日語的過程中補(bǔ)充的何什。
2014年跳槽到美國公司之后组哩,辦公室里的官方語言是英文,于是開啟了不得不說英語的模式处渣。剛開始到組里的時(shí)候說英語還是用的腦內(nèi)翻譯漢語的思路伶贰,在腦內(nèi)實(shí)時(shí)翻譯中文的句子,這樣說出來的英語口語是結(jié)結(jié)巴巴的罐栈,而且經(jīng)常有中文概念不知道如何表達(dá)幕袱,只能采用定語從句(Which is blablabla...)來描述,有時(shí)候需要半天才能把自己的想法解釋清楚悠瞬。好在同事比較nice们豌,不會(huì)因?yàn)槲业挠⒄Z說的不流暢就拒絕交流,他們會(huì)嘗試?yán)斫馕业囊馑贾笥谜_的表達(dá)方式重復(fù)一遍浅妆,求證是否是我要表達(dá)的意思望迎,于是我就會(huì)去一點(diǎn)點(diǎn)的模仿別人的英語,如果同事的表達(dá)我覺的比較簡明易懂凌外,下次我在同樣的場景就會(huì)和他說一樣的句子辩尊。漸漸的,我的腦子中不會(huì)再出現(xiàn)中文再翻譯英語的過程康辑,而是有什么想法就直接蹦出來對(duì)應(yīng)的英語語句摄欲。拿算法來對(duì)比的話,就是在腦海里已經(jīng)維護(hù)了一個(gè)自己的意圖(Intent)到英語語句框架(Fragment)的map疮薇,使用O(1)的復(fù)雜度就可以將這個(gè)框架提取出來并填詞胸墙。
直到現(xiàn)在,我也不敢說自己的英語能力有多好按咒,我可以看懂英文資料迟隅,可以正常的用英文和同事交流,但我會(huì)經(jīng)常單復(fù)數(shù)不分励七,會(huì)用錯(cuò)單詞智袭,也會(huì)犯低級(jí)的語法錯(cuò)誤。但是我不會(huì)覺得在一堆老外中插不上話掠抬,可以很自信的去和他們交流自己的觀點(diǎn)吼野。
我的經(jīng)歷可能對(duì)大家沒有太多的參考價(jià)值,畢竟有全英文的工作環(huán)境是一個(gè)很大的助力两波,下面我想分享一下我自認(rèn)為的即使在沒有英文環(huán)境的情況下也可以提高自身英文能力的方法瞳步。
程序員如何提高英語能力
我們將英語能力分為聽說讀寫四方面闷哆,如果一般不在外企工作的話可能聽和說的能力不太長用到,那么我們就談?wù)勛x和寫的能力谚攒。
讀英語的能力
程序員在讀英文文檔中的最大的問題是專業(yè)詞匯的問題。說道專業(yè)詞匯氛堕,不得不說中國在本土化上做的比較好馏臭,國內(nèi)計(jì)算機(jī)專業(yè)的課本幾乎可以做到0英文。所有英語的概念讼稚,都有對(duì)應(yīng)的中文概念翻譯括儒。這在翻譯層次上來說是一個(gè)進(jìn)步,至少不會(huì)像日本那樣在本國的語言中引入大量的外來詞匯茂缚,但是帶來的問題就是大家對(duì)于計(jì)算機(jī)領(lǐng)域中的概念所對(duì)應(yīng)的英文完全不敏感拟烫。
所以我的建議是援制,在接觸一種新的技術(shù)、框架的時(shí)候固逗,先不要搜索《XXX入門寶典》,《學(xué)習(xí)XXX看這一篇就夠了》這樣的總結(jié)性文章藕帜,而是先去項(xiàng)目的官方網(wǎng)站/Github主頁看看對(duì)應(yīng)的文檔烫罩。讀文檔學(xué)英語的好處是你不是為了學(xué)而學(xué),是確實(shí)在工作上有需要去學(xué)習(xí)洽故,這樣降低了學(xué)習(xí)的成本贝攒。
一開始讀英文文檔確實(shí)會(huì)比較頭蒙,但好在現(xiàn)在的翻譯軟件比較發(fā)達(dá)时甚,屏幕取詞隘弊,劃詞翻譯等這些方便的功能可以很便利的提供所選詞匯的意思。一般一種技術(shù)的文檔荒适,讀過幾篇之后就基本上沒有什么障礙了梨熙,因?yàn)樽詈诵牡母拍钤~語就那么幾個(gè),看完幾篇之后就可以融匯貫通了刀诬。其實(shí)計(jì)算機(jī)專業(yè)的詞匯真的不算特別多串结,讀完幾個(gè)項(xiàng)目的文檔之后你會(huì)發(fā)現(xiàn)共通的詞匯越來越多,讀起來也越來越輕松舅列。
對(duì)于剛開始看英文文檔的程序員肌割,個(gè)人建議一開始可以從比較小的項(xiàng)目看起,比如用到的某個(gè)linux命令的用法帐要,某個(gè)小開源插件的用法把敞,等到讀文檔的能力提升了,再去看看大型項(xiàng)目的文檔榨惠。讀文檔不是為了讀而讀奋早,結(jié)合工作上的需要盛霎,能夠引起自己讀的動(dòng)力最好。
寫英語的能力
作為程序員耽装,我們平常的工作中少不了也寫代碼愤炸,在寫代碼的過程中,實(shí)際上我們也不可避免的要書寫英文掉奄。程序員雖然不一定需要達(dá)到能夠?qū)懘笃挠⑽淖h論文的程度规个,但是擁有能夠使用英語正確的向其他程序員表達(dá)自己思想的能力還是很重要的。具體一點(diǎn)來說姓建,有以下幾點(diǎn)值得我們?nèi)ュ憻挕?/p>
1. 代碼中的變量诞仓,函數(shù),類的名字是否清晰易懂速兔,翻譯是否做到“信達(dá)雅”墅拭。在國內(nèi)的程序員有時(shí)限于自己的英語詞匯量,使用拼音來取名涣狗,有時(shí)看的會(huì)覺得莞爾一笑谍婉。有時(shí)程序員做到了英文命名但是用的詞卻不得當(dāng),比如之前有個(gè) 蝦米程序員在代碼中歧視活動(dòng)VIP用戶 的例子镀钓,就是一個(gè)活生生的英語沒有做到“信達(dá)雅”的反面教材屡萤。做活動(dòng)送的VIP用戶可以翻譯成EventVIP或者是PromotionVIP、CampaignVIP掸宛,Event是字面的活動(dòng)意思死陆,但是這里的VIP是指代在促銷(Promotion)活動(dòng)中免費(fèi)送出的VIP,所以從語義上說更加貼近Promotion唧瘾,而在國外這類促銷活動(dòng)俗稱為Campaign措译,所以個(gè)人覺得最好的翻譯應(yīng)該是CampaignVIP。其實(shí)取名方法并不難饰序,開源的代碼很多领虹,開源代碼中和自己項(xiàng)目有類似的概念的地方,都可以借鑒過來求豫。
2. 代碼中的注釋是否語句通順塌衰。一開始寫代碼注釋時(shí)不可避免的會(huì)寫一些語法上比較幼稚的語句,錯(cuò)詞蝠嘉、單復(fù)數(shù)不分最疆、時(shí)態(tài)錯(cuò)誤甚至病句的情況也并不少見。如何改善這樣的情況呢蚤告?我個(gè)人有幾點(diǎn)體會(huì):
a. 照葫蘆畫瓢法努酸。如果該項(xiàng)目中的其他代碼已經(jīng)有比較好的風(fēng)格的注釋,可以把別人寫的句子抄過來杜恰,再將意思稍微改動(dòng)一下获诈。
b. 搜索引擎糾錯(cuò)法仍源。在不得不自己“原創(chuàng)”注釋的時(shí)候,如果自己沒有十分的把握舔涎,覺的句子寫的不是很地道笼踩,那么不妨把自己寫下來的草稿拿去原味Google一番,一般這樣你會(huì)在網(wǎng)上搜到意思相近的句子亡嫌。這樣的方法特別適合糾正一些副詞使用的錯(cuò)誤嚎于,比如in,on昼伴,at等等匾旭。
3. 為項(xiàng)目寫Readme镣屹。Reame就是一個(gè)項(xiàng)目的門面圃郊,寫好Readme的話會(huì)為項(xiàng)目的專業(yè)性增色不少,尤其是有項(xiàng)目有開源需求的時(shí)候女蜈。這里我建議可以去借鑒一下其他開源項(xiàng)目的Readme持舆。Readme其實(shí)也是有“八股”的,參照別人的Readme形式為自己項(xiàng)目的Readme打好結(jié)構(gòu)稿伪窖,然后逐條替換逸寓。長久之后可以形成自己的風(fēng)格,寫起來就越來越順手覆山。
總結(jié)
總結(jié)起來竹伸,我自己總結(jié)程序員學(xué)好英語的兩個(gè)關(guān)鍵就是多讀英文文檔和模仿別人的英語,這和我們學(xué)習(xí)編程的方法其實(shí)是差不多的——讀代碼和模仿代碼簇宽。