給未來精英程式設計師的建議

朱巍發表於2014-06-19
舊聞一則:2014年2月,Facebook宣佈以190億美元價格收購跨平臺移動通訊應用WhatsApp。

給未來精英程式設計師的建議

這款總使用者數突破10億、月活躍使用者數4.5億的應用,其背後只有不到50名開發人員。怎麼做到的?祕密在於Erlang,他們把Erlang發揮到了極致。更勵志的是,其主要開發者只用2年左右時間就從Erlang新手成為了高手!

所以,是大眾還是小眾並不重要,能否成為“下一個Java”也不重要,一代又一代程式語言繁榮更替只是時尚,掌握程式設計本質、成為具備真正程式設計能力的精英程式設計師才是王道。

至於該如何才能掌握程式設計本質,大家走的路徑或許不盡相同,但我很推崇編輯過的一篇文章中的觀點,5年時間過去了,仍記憶猶新,談的是給未來程式設計師的建議,我覺得也很貼合我們出版《Erlang程式設計》的動機。現將其中的精華部分摘錄於此。

“大學計算機系的課程裡,傳統上有兩個知識點,許多人從來都沒有真正搞懂過的,那就是指標和遞迴。“

”你進大學後,一開始總要上一門資料結構課, 然後會有連結串列、雜湊表以及其他諸如此類的課程。這些課會大量使用指標。它們經常起到一種優勝劣汰的作用。因為這些課程非常難,那些學不會的人,就表明他們的能力不足以達到電腦科學學士學位的要求,只能選擇放棄這個專業。這是一件好事,因為如果你連指標很覺得很難,那麼等學到後面,要你證明不動點定理的時候,你該怎麼辦呢?”

“對於許多計算機系的青年學生來說,另一門有難度的課程是有關函數語言程式設計的課程,其中就包括遞迴程式設計……我的電腦科學導論課程真是讀得苦不堪言。我注意到很多學生,也許是大部分的學生,都無法完成這門課。課程的內容實在太難了。我給教授寫了一封長長的聲淚俱下的Email,控訴這門課不是給人學的。賓夕法尼亞大學裡一定有人聽到了我的呼聲(或者聽到了其他抱怨者的呼聲),因為如今這門課講授的計算機語言是Java。“

”這就是爭議所在。許多年來,像當年的我一樣懶惰的計算機系本科生不停地抱怨,再加上計算機業界也在抱怨畢業生不夠用,這一切終於造成了重大惡果。過去十年中,大量本來堪稱完美的好學校,都百分之百轉向了Java語言的懷抱。……Java語言中沒有什麼太難的地方,不會真的淘汰什麼人,你搞不懂指標或者遞迴也沒關係。……學習Java語言的孩子是幸運的,因為當他們用到以指標為基礎的雜湊表時,他們永遠也不會遇到古怪的段錯誤 ,他們永遠不會因為無法將資料塞進有限的記憶體空間而急得發瘋。他們也永遠不用苦苦思索,為什麼在一個純函式的程式中,一個變數的值一會保持不變,一會又變個不停!多麼自相矛盾啊!“

”說到這裡,我坦率地承認,當今的軟體程式碼中90%都不需要使用指標。事實上,如果在正式產品中使用指標,這將是十分危險的。好的,這一點沒有異議。與此同時,函數語言程式設計在實際開發中用到的也不多。這一點我也同意。”

“但是,對於某些最激動人心的程式設計任務來說,指標仍然是非常重要的。比如說,如果不用指標,你根本沒辦法開發Linux的核心。如果你不是真正地理解了指標,你連一行Linux的程式碼也看不懂,說實話,任何作業系統的程式碼你都看不懂。”

“如果你不懂函數語言程式設計,你就無法創造出MapReduce ,正是這種演算法使得Google的可擴充套件性達到如此巨大的規模。單詞Map(對映)和Reduce(化簡)分別來自Lisp語言和函數語言程式設計。……發明MapReduce的公司是Google,而不是微軟,這個簡單的事實說出了原因,為什麼微軟至今還在追趕,還在試圖提供最基本的搜尋服務,而Google已經轉向了下一個階段,開發Skynet ,我的意思是,開發世界上最大的並行式超級計算機 。我覺得,微軟並沒有完全明白,在這一波競爭中它落後多遠。”

“除了上面那些直接就能想到的重要性,指標和遞迴的真正價值,在於那種你在學習它們的過程中,所得到的思維深度,以及你因為害怕在這些課程中被淘汰,所產生的心理抗壓能力,它們都是在建造大型系統的過程中必不可少的。指標和遞迴要求一定水平的推理能力、抽象思考能力,以及最重要的,在若干個不同的抽象層次上,同時審視同一個問題的能力。因此,是否真正理解指標和遞迴,與是否是一個優秀程式設計師直接相關。

“……Java語言學校的教學也還是失敗的,因為學校沒有成功訓練好學生的頭腦,沒有使他們變得足夠熟練、敏捷、靈活,能夠做出高質量的軟體設計(我不是指物件導向式的設計,那種程式設計只不過是要求你花上無數個小時,重寫你的程式碼,使它們能夠滿足物件導向程式設計的等級制繼承式結構,或者說要求你思考到底物件之間是has-a從屬關係,還是is-a繼承關係,這種偽問題將你搞得煩躁不安)。你需要的是那種能夠在多個抽象層次上,同時思考問題的訓練。這種思考能力正是設計出優秀軟體架構所必需的。”

引文摘自《軟體隨想錄》第8章。這確實是一本好書,多年後翻看仍引人思考。另外預告,該作者的第一本部落格文集我們也在緊張翻譯中,敬請期待。

給未來精英程式設計師的建議

相關文章