給未來精英程式設計師的建議
舊聞一則: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章。這確實是一本好書,多年後翻看仍引人思考。另外預告,該作者的第一本部落格文集我們也在緊張翻譯中,敬請期待。
相關文章
- 給各位PHP程式設計師十點未來的建議PHP程式設計師
- 給程式設計師“菜鳥”的6條建議程式設計師
- 1024 寫給程式設計師的一些建議程式設計師
- #給java程式設計師的10條建議,吐血推薦!Java程式設計師
- 給中級程式設計師突破瓶頸的幾個建議,收藏~程式設計師
- 程式設計師也要養生,給DBA和IT同行的一些建議程式設計師
- 戰神系列戰鬥設計師:給遊戲設計師的 50 條建議遊戲設計師
- 聊聊程式設計師的職場“圍城”,給出作為過來人的一些建議程式設計師
- Android程式設計師的Java後臺學習建議Android程式設計師Java
- 有哪些讓程式設計師受益終生的建議程式設計師
- 程式設計師只能吃青春飯?程式設計師該怎麼規劃自己的未來程式設計師
- 程式設計師的打怪升級之路,程式設計師未來職業規劃全路線程式設計師
- 程式設計師高薪盛宴背後:未來有哪些程式設計師會被淘汰?程式設計師高薪
- 每個程式設計師必須掌握的常用英語詞彙分享給你(建議收藏)程式設計師
- 給迷茫的JAVA程式設計師一些中肯建議, 你還在虛度光陰嗎?Java程式設計師
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- 關於要不要轉行做程式設計師的建議程式設計師
- 程式設計幾點建議程式設計
- 給程式設計師的一頓午餐?程式設計師
- 學習Java程式設計的建議Java程式設計
- 自學程式設計的朋友,我想給你們這 5 個建議程式設計
- 程式設計師未來會成為非常內卷的職業?程式設計師
- 程式設計師必備基礎:改善Java程式的20個實用建議程式設計師Java
- UI設計師未來的發展趨勢UI
- Midway 後端程式碼的設計建議後端
- 如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- 大學老師告訴我:20年內程式設計師會被取代,未來不需要程式設計師...程式設計師
- [譯] 構建未來的設計生態系統
- ARCHICAD 26:塑造未來的建築設計神話
- 程式設計漫談(二十):如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- 程式設計師給女友最好的禮物是....程式設計師
- 給各位程式設計師的一些忠告程式設計師
- 寫給新入行的程式設計師小朋友程式設計師
- 寫給前端程式設計師的命令列入門前端程式設計師命令列
- 應對未來變化的33條建議
- 祝大家程式設計師節快樂,開發者的未來依然可期程式設計師
- [分享]2021 年對 React 前端程式設計師的 10 個程式碼最佳實踐建議React前端程式設計師
- IT行業高薪的背後:未來9成的程式設計師會被淘汰?行業高薪程式設計師
- 賦能我們的未來生活的十大頂級程式設計師程式設計師