有哪門語言是所有優秀程序員都應該無差別掌握的?
源 /Chobits的文集 文 / 風口上的豬
為什麼要學習英語
學好英語你可以直接觀看來自世界最著名學校的網上課程或編程高手的教學視頻。較之漢語教學視頻,不知道高到哪裡去了,而這些視頻通常都沒有任何翻譯可尋。
學好英語你可以和世界各地的程序員在Stack overflow,Reddit和Github進行交流,以碼會友。如果你不小心搭上了幾個哥們,你可能就誤打誤撞被他們推薦出國工作了。作為工作多年的老鳥,大家自然知道內推的好使程度,要是拿到了公司的錄取,那麼什麼簽證都是浮雲。
學好英語,你的代碼中變數的命名不會太差,讓人摸不著頭腦(甚至有人變數使用漢語拼音進行命名)。假設別人寫一個方法演示反射的使用,你看到那方法名不是ReflectionDemo,甚至不是ShowReflection,而是FanSheYanShi時,你什麼心情?
學好英語也可以為你的前途打開一扇門,你可以考慮到大陸以外工作生活,領略不同於神州大地的風土人情,感受西方文化,甚至中西合璧,建立一個與眾不同的家庭。即使你留在大陸,英語好至少也會讓你勝任一些外事工作,能人所不能,這對外企員工來說十分重要,你的上級會高看你一眼,你談工資時籌碼比別人多。
什麼水平算是英語比較好了,可以不用刻意繼續學了
如果你覺得你滿足以下這些條件,那我覺得你在英語為母語的國家也可以活得挺滋潤的,找到一個碼農的工作應該是沒什麼問題。當然,你可能會栽在醫院,街頭籃球場,酒吧這種需要高難度英語對話的地方。不過如果僅僅應付工作,你不需要刻意的提高自己的英語水平了,只需要保持即可。
裸考(故意不準備)托福100+,雅思7+,口語的成績不是其中最低的
辭彙量達到8000以上
能夠應付30分鐘左右的全英文面試,且你在面試過程中說話的比例佔至少三分之一,而不是人家說20句你說一句
閱讀一般的技術文章(例如MSDN文檔)和技術書籍沒有太大障礙,具體來說,生詞頻率在1/100之下(即任選文章中的100個連續單詞,平均只有一個不認識)
可以使用英文email和公司的外國人交流
可以和老外聊些簡單家常或你比較熟悉的話題,支撐至少15分鐘
關於單詞與閱讀
學英語不背單詞是不行的,背單詞是第一步,只有認識了單詞,你才能看懂它,聽懂它,最後在口語中運用。如果僅僅為了應付工作,則很多詞並不需要背,例如,下面這個圖中的所有單詞你都不需要知道(可能第15個需要吧,但你多半應該認識),這絲毫不會影響你閱讀技術書籍的速度。基本來說,你只需要知道MSDN,牛人博客裡面出現的比較高頻的單詞,以及你工作中需要用到的概念對應的英文翻譯。
對於初學者而言,不需要閱讀其他亂七八糟的小說散文,也不用把新概念看一遍,最重要的就是把你的主力語言中各種術語的維基百科都看一遍,新概念不會告訴你控制反轉的英文是IOC,pumas are large cat-like animals which are found in America(新概念第三冊的第一句話)只能讓老美覺得你腦子有問題。(這課是講從句的,所以幾乎所有的句子都是從句)背新概念還不如背技術文檔,對於C#,直接看MSDN就行了,例如委託的:https://msdn.microsoft.com/en-us/library/ms173171.aspx
這網頁中的單詞大抵都是技術上最常用的詞了,例如type,method,event,instance(實例)等等。如果你有任意一個單詞不認識,說明你的辭彙量不過關。不過,各種MSDN文檔中的單詞重複頻率很高,讀多了就會越讀越快的。你可以把不會的單詞記在本子上,而不是買本托福辭彙開始背。過了不久你就會發現,技術文檔裡面轉來轉去就那幾百個詞,可能都沒有2000個,而一本托福辭彙背完了,你還是不知道進程和線程怎麼說。如果你對MSDN文檔已經可以做到基本不查字典,你可以嘗試改用谷歌搜索了。例如,如果你拿不準鏈表應該在什麼時候使用,性能如何,你可以搜索stackoverflow linked list performance / linked list performance comparison,然後點開結果鏈接 - 這樣你的工作中的中文出現頻率就大大減少了。如果你已經大規模的使用谷歌,stack overflow,並且對搜出來的鏈接都讀得十分順暢的話,你不需要再背單詞了。
詞根詞綴法
很多技術單詞有個特點,就是他們都是造出來的詞。我們知道100年前,世界上根本沒有計算機語言,所以很多概念不存在,後來,技術發展到今天,出現了很多以前無法想像的概念,例如非同步,多線程這種100年前毫無意義的單詞。它們都是生造出來的,以前的英語不包括這些單詞。而英語造詞法通常有兩種:一種是追本溯源,例如演算法的英文algorithm來自1000年前的某本阿拉伯數學書籍,另一種就是疊加,比如多線程的英文multithreading就是多(multi)和線程(thread)兩個字加起來的。非同步這個詞解釋起來稍微複雜些,首先我們要理解同步這個詞synchronous:它是由syn (同時) + chron (時間) + ous (形容詞後綴)合成的,同時的時間,即為同步。而非同步就是不同步的意思,故在同步的英文之前加上一個前綴a-,其代表否定,就得到了非同步的英文單詞:asynchronous。
詞根是快速擴展英語單詞的利器,例如剛才我們看到的幾個詞根,都是比較常見的,我再舉幾個例子,這次不再限於技術單詞。Chron(時間)演化出來的詞還有: chronicle(編年史),chronosphere (時間結界,這個詞是dota中虛空假面大招的英文,應該是icefrog在dota中造出來的詞。Sphere代表一個半球,和時間拼起來,就是時空半球。我們可以直觀的想像出一個半球罩住一片地方,裡面的時間停止了)。
Covariance和countervariance這兩個貨,很多人一看單詞很長就產生懼怕感,但實際上,越長的單詞,造出來的可能性就越大。先告訴你vari是變的意思,你肯定知道一個它的衍生詞variable,變數(能夠變的東西,瞧,你順便又學會了一個後綴 –able,能夠的意思),variance可以看成是其名詞的形式,在數學上,我們用這個詞表示方差。那麼如果你知道co是協同(和con一樣),counter是反著的,那麼covariance和countervariance這兩個詞的意思你大概也就猜出來了:協變和逆變。另外說一句,counter加上單詞strike(打擊)就成了很多人都很熟悉的一個單詞,縮寫為CS(反恐精英)。當然counterstrike這個單詞本身只是反擊的意思,和恐怖分子,精英都沒有半點關係,不過反恐精英這個翻譯確實不錯。
Interoperablity,別看它很長,你應該也能猜出來,如果你認識operate的話,你就可以看出來它是怎麼來的了吧。它的意思是「互操作性」,我們知道C#有一些庫例如Microsoft.Office.Interop.Word,Microsoft.Office.Interop.Excel,Interop就是Interoperablity的簡單說法,這些庫也是專門用來和COM打交道的,可謂名如其庫。inter代表相互的,交互的,很自然的我們都知道它的兩個派生詞:internet,交互的網,即互聯網(相對的,intranet就是內聯網),interview,互相看,即面試(所以面試不僅僅是公司挑你,你也在挑公司:)),還有intersteller,如果我告訴你stell是星辰的意思,你猜猜這個詞(交互的星辰的人)啥意思 – 中文翻譯 – 星際迷航。那麼好了,你知道stell是星辰了,又知道con是一堆的意思,那麼constellation是啥?一堆星星 – 星座!
一些其他的例子:
Re-factor: 重構
Trans-action: 事務
Pre-process-or: 在前面+處理+的人 –〉預處理器
對於有一定英語基礎,比如考過四級的人來說,詞根詞綴可以迅速擴大辭彙量,通常可以擴大一倍。掌握了一些基本詞根詞綴之後,你會發現,很多詞你根本沒見過,但你就是能猜出它的意思。你的辭彙量遠遠多於你意識中自己的辭彙量個數。詞根詞綴為什麼如此強大?有時候,我會把詞根詞綴造詞法類別漢字中的偏旁部首。我們的漢字有很多字的偏旁都相同,而有些偏旁自己是有意義的,例如雨字頭本身代表下雨,屬於雨字頭的很多字和天氣也有關,例如霏,霽等。英語本身來自於拉丁文,很多詞根自己就是拉丁文單詞,例如aqua,在拉丁文中代表水,它作部首的單詞aquarium(水族館),aquamarine(水藍色)就可以類比為三點水旁的漢字。關於詞根詞綴記憶法,如果有興趣,可以參照http://www.360doc.com/content/11/1117/15/1930525_165197518.shtml。不過,不要鑽牛角尖,也不用把所有的詞根詞綴都背下來,那樣你的辭彙量太大了,保守估計也有2萬,你不需要那麼多單詞,你也沒那麼多時間。你只需要對技術文章中出現過的單詞的詞根詞綴研究一番就行了,碰上一個詞研究一個,沒碰上過的(比如你是不怎麼可能會在技術文章中遇到aqua這個詞根的)就不用管它。
當然,不是所有英文單詞都是這麼造出來的,比如最簡單的get,set,have之類的動詞。在幾百年前,英語的單詞數量遠遠小於現在,那時候就沒什麼單詞是用詞根詞綴造出來的。根據詞根詞綴猜出來的單詞意思也不見得都對(就如同秀才識字讀半邊,不一定全對一樣),不過,一般來說猜出來的意思都八九不離十,而且很多技術單詞是造出來的,這使得我們看技術文章時,可以少背點單詞,多猜測下它是怎麼來的。
掌握一個單詞不僅僅要做到看到單詞知道意思,還要將其讀准,否則,老外依然不知道你在說什麼。你可以使用谷歌查找單詞,獲得單詞的音標,通常後面都有播放鍵。如果你是走美音路線的,要做到一些捲舌。要知道長單詞中重音的位置(有些在前面,有些在中間),盡量減低中文發音的痕迹(有些速成書中把英文音譯成中文以達到速成效果,例如how are you發音好啊油,一定要杜絕這種方式,離這種書越遠越好)。你也可以在視頻中捉到一些你讀的不準確的單詞,聽聽人家怎麼讀的。
關於聽力
當認識了足夠多單詞之後,下一個比較自然的目標就是聽懂它們。這比閱讀難一些,但遠遠比在口語中用到它們容易。練習聽力除了和老外對話,就是看視頻了,看視頻也是我們練英語的一個主要目的。以下的幾個視頻網站是我經常看的,有些需要付費:
Pluralsight:全部都是技術類教學視頻。有些視頻出自大牛,例如Jon Skeet。部分視頻帶有英文字幕。
Coursea:這個大名鼎鼎的網站包含了世界頂級大學的網上課程。好處是免費,壞處是不會有很具體專門的課程,大部分課程都是比較general的,例如演算法課程:https://www.coursera.org/learn/algorithm-design-analysis。
這個網站包括了各種話題的課程,不僅僅只是計算機技術。這個鏈接概括了Coursea課程的特點:https://www.zhihu.com/question/20722223
你也可以找一些喜歡的電影來看,但看的時候要拿掉字幕,然後設法自己把所有的單詞都聽出來寫在紙上,再對照字幕看看自己有哪些地方錯了。這個過程極為辛苦,你最好找你很喜歡的電影來看,起碼知道整個故事的流程。但如果你這麼看了哪怕只有幾部電影,你會發現自己的耳朵彷彿什麼都聽得懂了。
關於口語
一般來說,你只會在面試的時候用上口語。雖然,有些外企你需要和老外打交道,但大陸的外企通常來說還是中國人佔主導,老外只能忍受很多中國人水深火熱的英文而不能自拔。如果你沒有出國工作學習的打算,那麼你可以不用練習口語。如果你打算幾年之後出國工作,體驗不同的人生,你的口語起碼要好到讓老外面試官在和你談技術的時候,知道你在說什麼。就這一點來說,在大陸練習技術口語是比較困難的:你不能和一個大陸人練習口語,特別是一個水平和你差不多的人,這樣你們的發音一定會無可救藥。但很多在大陸做事的外國人又不是碼農,不懂技術。所以,只能通過曲線救國的方式練習:和外國人聊天,但不聊技術,一方面找自信,糾正發音,一方面熟悉日常英語交流。至於技術英語,某種程度上比日常英語容易一些,只要你已經認識了足夠多的技術單詞(常用的也就幾百個),並看了很多視頻,你就能聽得懂。如果你找不到老外,你可以隨便找一套美劇,然後把它所有的台詞都背下來,達到可以隨時配音的程度。你可以在上下班的時候聽,能聽多少遍就聽多少遍。我不建議聽新概念,因為它很多的句子都是十分刻意的,並不符合現在的說話習慣(它很多句子寫成那樣是為了讓你學習某種語法的,比如第三冊有一課,全篇所有的句子都是定語從句)。
我必須要強調,發音是十分重要的。即使你的句子毫無語法,單詞簡單,但只要發音對了,老外也能聽懂你在說什麼。而只要老外懂了,其他都不重要。我認識好幾個在摩根士丹利這種級別的投行工作的碼農,英語水平都菜的一筆,雅思口語目測不會超過7。
我參加的幾次全英語面試中,有些面試官是香港人,英語十分菜鳥,這樣的面試基本都以他支撐不住先改講廣東話為結局。但碰上比較強的主兒,情況就十分複雜而有趣:
美國口音:這是最容易應付的,因為這是現在英語的主流口音。通常你的口音也會是美國口音,除非你裝比學英音。
印度口音:這種口音實在太可怕了,你不習慣基本聽不懂。現在好多大投行的碼農是印度人,而且他們還互相提攜,所以如果你去面投行,你很可能會撞上一個阿三面試官。印度人但凡比較牛鼻的,英語語速都超級快,而且思維也比較快,技術水平倍棒。和阿三面試單挑的強度很大。
日本口音:多拉a夢的英文單詞doraemon是日本人用英語讀「夢(dream)」這個單詞的發音。
英國口音:當你聽了太多蛋疼的口音之後,你會有如沐春風的感覺。英國口音的英語最大的好處就在於,實在太標準了。它讓你不禁有這樣的感嘆:這才是英語阿!當然,你如果沒有經歷過阿三,港式,日式這種奇葩口音的歷練的話,可能不會有太深的感觸。如果你在美國口音中呆了太久,可能會不太習慣,但不會有像聽印度人說話那麼困難。
關於語法和寫作
語法這東西基本很少人在乎。聊技術的時候,基本上你只需要現在時。你不需要被動語態,各種從句,虛擬語氣除了if I were you之外,很多美國人也不知道是什麼。只有聊生活的時候,你可能需要過去或者將來時。基本的語法也沒什麼難度,英語的語法是最簡單的之一,簡單到你不需要學。對於固定搭配,很多美國人自己都整不明白。
寫作是沒有捷徑可言的。一個比較快的提高方法是,將你閱讀時看到的好句子抄下來然後絞盡腦汁的復用它們。比如你背下了新概念3第一課第一句,pumas are large, cat-like animals which are found in america。然後,你就可以展開瘋狂的復用之旅:
delegate is a kind of function pointer which is introduced in C# 1.0.
LINQ is a set of features that extends powerful query capabilities to the language syntax of C#. (MSDN的原句。看來他們也喜歡定語從句。這句話也具有和上一局相同的基本結構)
直到你覺得膩味了為止。你可以積累若干這些例句,這樣一來你的英語就不會再是簡單句的集合了。
將自己置身於英語環境
你可以把自己的操作系統,各種軟體換成英文的,QQ使用國際版。然後弄一些材料,每天不離耳朵,它們包括但不限於:英文歌曲,英文劇視頻,技術教學視頻等(你可以不看光聽)。除了gossip girl這種每季都有若干次激情互動的戲碼,導致你不能專心學英語的劇之外,大部分劇都可以,例如越獄,老友記。你也可以每天寫一小段英文日記。如果你覺得自己就算是寫中文日記也屁都寫不出來的話,你可以找來托福作文題目,然後每天寫一篇,然後和你的好友交換批改。
你也可以考慮玩英文遊戲,不過,這個體驗是十分痛苦的,尤其是如果你單詞量很少的話。不同的英文遊戲對你辭彙量的提高也不同,比如暗黑破壞神,基本上只能讓你掌握一大堆武器護甲的英語單詞。我作為一個暗黑破壞神愛好者,可以做到對任意一件白色裝備,瞥一眼它的英文就可以估計出它大概的價格,但這對我讀技術書籍和面試基本沒有任何幫助。RPG類的英文遊戲可能會好一些,因為它包含一些日常對話,總有點用得到的單詞和小片段。
你可以參與字幕組,嘗試和其他人一起將英文劇中的對話摳出來。你也可以嘗試翻譯一些你感興趣話題的文章,例如國外大牛最新的博客。很多老外非常喜歡和不同文化的人交流,你可以主動在各種社區上和他們互動,不僅練習了寫作,還可以解決你心中技術方面的疑惑。如果有老外和你一見如故,聊到停不下來,你甚至還可以通過他把自己整出國。比如,你可以考慮去撩各個外國大公司在stack overflow上的員工(通過對他們的回答撰寫評論,或者直接問問題),這總比撩女人容易多了,還不用當面交談。
如果你覺得自己技術書籍都看得差不多了,也沒什麼障礙了,你也可以看看Quora,在上面積累自己的名聲,或者看點其他的暢銷小說,例如冰與火之歌,它的難度還是不小的,和哈里波特相當。我個人覺得,如果你已經大概知道了劇情,你再去看原文的看得下去的概率要大大高於什麼都不知道的情況下直接去看原文,所以盡量不要選擇不熟悉的大部頭。但即使是這樣,過於高深的英文也會大大降低你對故事本身的興趣。在我中二的時期,曾對紅樓夢愛的走火入魔,中文看了至少八遍,對各種情節倒背如流。但即使是這樣,也未能讀完它的英譯本,死在了第五回無窮無盡的判詞上。
總的來說,學英語還是有很多渠道的,尤其是現在這個互聯網發達的時代。祝大家從學英語中獲得樂趣,發現英語的魅力。
本文轉載自【Chobits的文集】
TAG:程序員之家 |