非常好的程式語言通識讀本

高博發表於2014-11-17

從“編碼”(コーディング)到“程式設計”(プログラミング),這個名詞的小小改變,其實凝結了人類的許多智慧和心血。而這其中最重要的大發明,就是程式語言。人類擅長的是用語言交流,所以發明了各種各樣的語言,這麼一來人類就可以用自己熟悉的語言來編寫程式,而不必直接去編寫只有機器才能識別和執行的程式碼了。

程式語言發展到今天,已經經歷了好幾代,從種類上看更是有數千之眾。這些語言當然不可能都為著同樣的目標而被設計出來,所以它們之間的差異還是非常大的。這些差異性體現在諸多方面,語法的差異非常顯著,而相似的語法背後的語義差異則更是無形而且微妙。如果考慮到語言的執行環境、應用領域,還有語言之上建立的方法論,更是讓人感覺:難道在程式語言這個完全由人類創造的領域,也要出現像自然語言一樣的,把程式設計師分成無數宗派甚至族群的“巴別塔”了嗎?

其實不然,程式語言畢竟是工程學產物,它的發展其實是有著統一的計算模型作為背景的,因而可以視為一種“約束下的發展成果”。計算模型落實為實際計算機的體系結構,種類並沒有很多。因此,建構在其上的程式語言,由於最終還是要落實為在這些體系結構之上執行的程式碼,結構和實現上不會完全失控。但話說回來,要寫作一本關於程式語言的通識讀本,能夠在一本書裡講清楚程式語言的共性,並能夠指導具體語言的學習,這件事還是很困難的。很容易就會寫成建立在編譯原理基礎之上的大部頭,這麼一來對讀者的要求就非常高了。還容易寫成各種語言混在一起的大雜燴,把讀者搞得暈頭轉向。更何況,如果真拿具體的語言來講,現在的語言版本更新迭代速度很快,寫成的書很快就過時了。

但是本書就很不一樣,它抓的點非常好,是一些通用但是不會過時的點。這些點從程式結構來說,包括了名字和作用域(哪種語言會沒有名字和作用域呢?)、函式、型別、異常處理;在庫的方面,討論了字串和容器;從執行環境來說,討論了並行處理;從方法論的角度,討論了至今仍然是主流的OOP和類繼承。每個主題都是既深入淺出,不停留在概念層面,又點到即止,避免糾纏技術細節,顯示了日本工業界務實而又認真的做事態度,以及不俗的技術實力和表達能力。

我尤其喜歡第一章提出的兩種程式語言的學習思路:在比較中學習,在歷史中學習。從每種語言的獨特語法結構中,我們能夠體會到這種語言針對的特定問題領域的難點和特色,這也引導著我們提出新的問題,或者在不同領域的問題之間建立關聯。而從那些從屬於不同時代語言的代際比較,我們更可以同時體會到早期語言的強大和不足之處,以及新生語言做了哪些取捨(一定有舍,不可能只有改進,因為結果是一樣的)來向哪些方面做了妥協。其實在學習自然語言的時候,這兩個辦法也是非常管用的,只是學習多種程式語言的人比學習多種自然語言的人要多得多而已。一開篇就開宗明義地提出語言學習方法,這也決定了本書的高度。

總之,本書是一部非常好的程式語言通識讀本,向所有同行推薦。

相關文章