今年年初開始接觸Common Lisp(如下都簡稱Lisp), 緣由就是看了Paul Graham的《黑客與畫家》(又被鼓動了, 哈哈). Paul在這本書中強烈推薦程序員學習Lisp, 宣稱經過學習這門語言能給程序員帶來不小的幫助. 具體的內容你們能夠花點時間自行閱讀一下, 書的內容仍是很不錯的. 書中寫的不只僅是關於計算機的知識, 還有一些關於財富的見解、教育的見解等等一系列有意思的觀點, 挺不錯的書. 出於本身的好奇心, 因而打算開始用空餘的時間學習一下Lisp. 因而在amazon上花了很多錢買了一本Paul的《ANSI Common Lisp》來看. 買實體書倒不是由於自身條件有多寬裕, 主要的緣由有兩個: 1. 從本身學習的經驗來看電子類的媒介比較適合快速獲取信息或者是學一些比較淺層的知識. 如果打算較長久的學習一門知識的話, 用實體書來學習效果會更好一點. 2. 有一些電子書的發行並無得到做者的受權, 因此下載電子書極可能會損害原做者的利益. 若做者已受權電子書的下載, 那麼從網上copy一份做爲學習資料也不會違背原做者的意願. 好比在Paul的我的網站的這個連接裏面 http://paulgraham.com/books.html , 《On Lisp》是公開免費下載的. 固然這些只是我本身的想法而已, 不必定對全部狀況都適用.html
說了一堆, 也應該輪到本身說一下Lisp的學習心得. 由於學習的時間還不是很長, 因此只能如瞎子摸象般較爲分散的介紹一下這門語言的基本特色. 從本身的學習感受來看這門語言的最大的特色有兩個: 1. 函數式編程的代碼風格( - -, 這不是廢話麼? 臭雞蛋別來啊) 2. S表達式. 你們稍安勿躁, 稍安勿躁. 爲何只說這兩個呢, 由於不少細節的特性都是圍繞着這兩個特性展開的, 好比基於函數式編程的風格提倡不對參數做任何修改、代碼之間的調用都大多數用的是函數返回值而不是給變量賦值再傳給函數等. 另一個就是S表達式, 其實說白了就是把函數調用放在了最前面, 好比 (+ 1 2) 而不是 i = 1 + 2, Lisp省去了大量的local variable的聲明、賦值操做. 並且全部的Lisp的S表達式的list(Lisp的核心數據結構)的第一個參數都是函數, 每一對 '( ) ' 就是一次獨立的函數運算. 因此一個Lisp程序的結構就是一堆函數的層疊嵌套, 而後根據輸入的數據執行相應的函數邏輯路徑. 所以函數式的編程風格跟S表達式結合起來就是命令式語言中強烈推薦的代碼整潔之道 - 精短的函數, 函數功能職權小而精. 因此這兩個基本語言特性從語言的基因上提供了一個能寫出優良代碼的語言環境. 程序員
有些同窗在初看Lisp的時候會被一堆的括號以及莫名其妙的一堆symbol(符號)搞到頭暈, 但只要能慢慢的熬過這個坎, 就會發現Lisp就是一系列運算, 表達的是一種較爲純淨的運算邏輯. 因此有些同窗會感受這門語言好像實用性不是很強, 大多數的同窗會比較喜歡C/C++系列的語法, 實用、資料多、第三方庫多. 這個可能跟目前的行業有關係, C/C++系列的語言比較適合大量、有次序、機械的數據比較、讀寫操做, 比如是工業化革命裏面的大規模生成的工具. 而Lisp走的是另一種路徑, 它的設計初衷不像C/C++那樣爲了讓機器運算數據, 而是隻是爲了單純的計算. 編程