Orz oz

 
爲了讀Concepts, Techniques, and Models of Computer Programming這本書,去下了Mozart,一個支持編程語言Oz的開發系統。照這書裏的指點,運行Oz.exe,居然看到Emacs窗口彈出來。瀑布汗。。。這就是Mozart編程界面啊。怪不得只要8MB的安裝空間。這時才注意到書裏直接就用Emacs的黑話了,什麼編輯器分成兩個frames。我就納悶,如果俺不用Emacs怎麼辦呢?爲這麼彪悍的編程系統,失意體前屈一把,也算說得過去吧?
 
剛看完書的前言,已經被撩撥得心癢難忍。這本書和諸如SICP, PAIP, TAOCP這類大部頭一樣,也有自己的簡寫,CTM。Lambda the Ultimate上的常客們熱薦這本書。LtU是理論牛人(比如Erik Meijer)和理論葉公(比如俺)扎堆的地方,推薦的書多少都偏重理論、公式滿篇。但從前言來看,CTM注重討論對程序員重要的編程概念。摘幾條有意思的片段:
  • 作者選取計算模型的主要標準是對編程實踐有沒有用
  • 什麼時候向編程語言里加入新概念取決於“創造性擴展原則”:當程序出於技術原因變得過度複雜,但增加的複雜度和要解決的問題無關時,就可以引入新的概念了。引入的新概念應該簡化程序。用邏輯編程方法解決和約束有關的問題可算一個例子。
  • 編程包含兩坨基本部分:技術和科學基礎。技術部分包括工具,實用技巧,和標準等。技術讓我們能夠實踐編程。科學部分包括深廣而有預測力的理論。這些理論讓我們能夠理解編程。技術和理論對編程缺一不可。沒有技術,我們不過在搞純數學。沒有科學,我們不過在學習一門手藝,也就是說,我們不能深入理解編程。所以說囁,教編程,既要教當前的工具(技術),也要教基礎的概念(科學)。
  • 現在的編程教學分成不同的流派。面向對象,邏輯編程,函數編程。。。每個學派都有自己的理論。整合不同編程流派的單一領域已經失傳了。
  • 每個編程流派各說各話好比修橋的各執己見。木橋門的認爲用木頭造橋是不二法門。鐵橋門的堅持用鋼鐵造橋纔是至理。偏偏沒人想過同時用木頭和鐵造橋。書後用Java舉了個例子:Java程序員覺得併發編程是本質困難,不可避免,但真正的原因是Java裏解決併發問題的編程模型不夠強大。
  • 把編程精簡到邏輯算子的地步,比如lambda算子和π算子,只是簡化了數學分析,但並不能幫助程序員建立直觀概念。搞理論的老大好這一口,但程序員其實得不到多少好處。基礎算子有助於研究計算的基礎性質,但對分析理解通用的應用程序沒有多大幫助。
  • 這本書強調綜合應用各式編程模型。OO裏高階函數一樣大有用處。可變狀態在函數編程裏也能派上用場。邏輯編程並非Prolog這類語言的禁臠。其實不同編程模型的差別也沒那麼大。申明式編程和命令式編程的共性大於個性。另外一方面,支持單一編程模型的語言反而會讓編程變得困難。
 
俺提到過這本書的賣點之一是詳盡討論各式併發編程技術麼?
 
P.S., 俺其實不相信世上有《九陰真經》這類得之稱霸江湖,不得失意武林的祕籍。名動天下的高手們也是把鍵盤敲爛,把筆頭寫斷,在激情的驅動下,一路磨練出來。我就算把這本書背下來,能寫出雲風寫出的遊戲麼?顯然不行嘛。This year head,每讀一本書,也許就失去讀另外10本精彩書籍的機會。所以呢,暫時找不到某本書的老大也不用痛苦,換本書讀就行了。如果要找免費的經典讀物,可以到這裏這裏,和這裏。夠讀個十年二十年了吧。
P.P.S, 這本書有電子版。下載地址俺就不知道老。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章