擁抱程式設計年華(摘錄)——Joe Armstrong,Erlang語言之父

出版圈郭志敏發表於2012-04-09

“Gmail編輯器不能正確排版引文格式。”

“這可夠丟人的,”馬傑裡說,“看來他們負責引文格式的程式設計師水平不行,企業文化也在走下坡路。”

“我們該怎麼辦?”

“今後我們招募的程式設計師,一定得通讀過《追憶似水年華》 。”

“讀過全部七卷?”

“沒錯。”

“讀這書能讓人更好地駕馭標點符號,從而不至於在引文格式上犯錯?”

“那倒未必,不過他們會因此擁有更精湛的程式設計技藝。這種感覺只可意會、不可言傳……”

學程式設計就好比學游泳,再好的理論也不如一頭紮下水,撲騰著呼吸新鮮空氣管用。在初次沒入水面的那一刻,你必定會驚慌失措,但當你奮力浮出水面、大口大口地喘著氣,你又會無比喜悅。這時你心裡明白:“我學會游泳了。”至少我當初學游泳那會兒,就是這種感受。

程式設計也同樣如此——邁出第一步最難。因此你需要一位好老師,鼓勵你勇敢地跳入水中。

Bruce Tate正是這樣的好老師。他寫的這本書,帶你從程式設計學習中最困難的地方入手,鼓勵你大膽邁出第一步。

假設你想學習某門語言,而且順利完成了下載安裝編譯器或直譯器的艱鉅任務,接下來要做什麼?你用它寫的第一個程式,會是個什麼樣子?

Bruce回答得十分巧妙。他在這本書裡,展示了許多完整程式和程式碼片段,你只需將它們一一輸入,看看結果是否與書上相同。也就是說,你先不要想著自己編寫程式,而是先把書中範例全都實現一遍。隨著信心漸長,你自然會逐漸擁有獨立完成程式設計專案的能力。

獲得任何新技能的第一步,是先別想著獨立解決什麼,而是重複一遍前人已竟之事,這是掌握一門技能最快的方法。

用一門新語言上手程式設計的過程,與其說是投入大量時間反覆實踐,試圖理解語言背後蘊含的深奧原理,還不如說是讓分號、逗號各就各位,同時讀懂出錯時系統反饋的千奇百怪的錯誤資訊。只有不斷提高程式設計水平,讓自己超越先輸入程式碼、再等待編譯成功的枯燥階段,你才有能力思考程式語言中各種語法結構的含義。

跨過輸入、執行程式的門檻後,你會有如釋重負的感覺,因為潛意識將接管餘下的工作。意識剛琢磨出分號放哪兒,潛意識就已明白了表面結構下的深層含義。這樣下去,你終會有所頓悟,理解某個程式邏輯的更深層含義,某種語言結構如此特殊的原因,等等。

對幾門語言均略知一二,這其實是一項相當實用的技能,因為我常常發現,網上的某個程式有助於解決手頭問題,卻沒法直接拿來使用,還得針對問題稍作調整才行。這程式用什麼語言寫的都有可能,所以懂點兒Python、Ruby什麼的就非常管用。

每門語言都自有一套慣用法。它們各有所長,亦各有所短。通過學習各種不同的程式語言,你會明白,哪門語言最適宜解決當下關注的問題。

Bruce對程式語言的愛好不拘一格,這真是你我之幸。他不僅精通那些聲名卓著的語言,比如Ruby,還了解那些鮮為人知的語言,比如Io。程式設計說到底是個理解問題,理解說到底又是個思想問題,因此,若想深入理解程式設計的方方面面,洞察新近湧現的思想是必不可少的一環。

精於禪宗的大師會告訴你,拉丁語學得越好,數學也就越好。程式設計也同樣如此。通過研究邏輯式程式設計或函數語言程式設計,你能領悟到物件導向程式設計的精華;通過學習組合語言,你能更透徹地理解函數語言程式設計。

在我做程式設計師時,對比各門程式語言的書籍曾一度盛行。這些大部頭書多帶有學術腔調,至於如何去真正用好哪門語言,則少有涉及。這如實反映了那個年代的技術發展水平。當時,我們只能從書本上了解某門語言的諸般理念,想用它實戰幾乎不太可能。

如今,我們不僅能瞭解這些理念,還能對它們實踐一番。佇立池畔、暢想游泳之妙,較之親身跳入水中、暢享戲水之樂,二者終究不可同日而語。

我由衷地推薦這本書。也希望你在閱讀它的時候,能夠像我一樣,盡情享受其中的樂趣。

Joe Armstrong,Erlang語言之父

2010年3月2日

於斯德哥爾摩

摘自《七週七語言》序言部分

相關文章