一、為何想學(xué)lisp
最初了解lisp是從《黑客與畫(huà)家》里,里邊的黑客強(qiáng)烈推薦程序員用lisp,并有部分講《為什么lisp語(yǔ)言如此先進(jìn)?》,書(shū)是阮一峰翻譯的,這節(jié)在他的博客也有節(jié)選:
http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html
總結(jié)一下:
a. 越近代的語(yǔ)言越像lisp;而當(dāng)前最新潮的語(yǔ)言也只是實(shí)現(xiàn)了lisp作者在1958年的設(shè)想,因?yàn)閘isp設(shè)計(jì)目的是數(shù)學(xué)理論演算而不是語(yǔ)言這種本質(zhì)上的一種技術(shù)。技術(shù)會(huì)過(guò)時(shí)而數(shù)學(xué)不。今天最高級(jí)的主流語(yǔ)言,也只是剛剛接近lisp的水平。雖然已經(jīng)接近,但還是沒(méi)有l(wèi)isp那么強(qiáng)大。
b. 等等,其他不一一摘抄。
其中一點(diǎn)提到,“一行l(wèi)isp代碼相當(dāng)于20行C代碼”。lisp會(huì)縮短開(kāi)發(fā)周期,而且還是c能做lisp所有事情的前提下。文中舉例說(shuō),如果你用其他語(yǔ)言跟別人lisp語(yǔ)言的公司競(jìng)爭(zhēng),同樣的功能你就比別人慢很久才能開(kāi)發(fā)完,競(jìng)爭(zhēng)就出于劣勢(shì)。
其他在網(wǎng)絡(luò)上看到的lisp相關(guān)言論:
起名為“格林斯潘第十定律”(Greenspun's Tenth Rule):“任何C或Fortran程序復(fù)雜到一定程度之后,都會(huì)包含一個(gè)臨時(shí)開(kāi)發(fā)的、只有一半功能的、不完全符合規(guī)格的、到處都是bug的、運(yùn)行速度很慢的Common Lisp實(shí)現(xiàn)。”
二、學(xué)習(xí)過(guò)程中
另外還有個(gè)原因,最近想了解函數(shù)式編程,想了解下支持分布式原語(yǔ)的erlang,先學(xué)哪個(gè)還是糾結(jié)了下的。 后來(lái)考慮到新到的項(xiàng)目中想設(shè)計(jì)成分布式擴(kuò)展方便的服務(wù)器架構(gòu),就優(yōu)先學(xué)下erlang。先花幾天把《Erlang程序設(shè)計(jì)》給看完了,看的很激動(dòng),但是考慮到項(xiàng)目人員現(xiàn)狀及將來(lái)的維護(hù),項(xiàng)目沒(méi)用erlang,用了node.js。
之后又花幾天把許式偉他們寫(xiě)的《Go語(yǔ)言編程》看完了。go語(yǔ)言確實(shí)不錯(cuò),以后可以考慮用這個(gè)寫(xiě)個(gè)游戲服務(wù)器引擎什么的。本想立即就開(kāi)動(dòng),但是項(xiàng)目屬于開(kāi)始搭架子階段,需要思考的時(shí)間挺多,回家可以利用的時(shí)間不多,專(zhuān)心寫(xiě)開(kāi)源項(xiàng)目不現(xiàn)實(shí)。
于是回家的時(shí)間先學(xué)Common Lisp(以下簡(jiǎn)稱(chēng)cl),現(xiàn)在正在看田春翻譯的《實(shí)用Common Lisp編程》,看到12.6映射。
cl很多東西跟類(lèi)c的語(yǔ)言差別就比較大了,看的進(jìn)度還是挺慢的。看著看著,一邊驚嘆他強(qiáng)大的表現(xiàn)力,一邊有點(diǎn)害怕太龐大,以后實(shí)用起來(lái)不順利。
如果找份cl的工作,國(guó)內(nèi)大小公司估計(jì)都不大好找。除非能在一個(gè)高手云集的團(tuán)隊(duì)里,大家又都喜歡cl,而且我們有話(huà)語(yǔ)權(quán)……
所以將來(lái)cl在為了更好的思考編程之外,很可能只是用來(lái)寫(xiě)些腳本或者自己的玩具什么的。近期的應(yīng)用可能是生成javascript代碼。
等cl學(xué)的不錯(cuò)了,可以做些個(gè)人項(xiàng)目的快速開(kāi)發(fā)……
三、我了解Common Lisp一些資料
建議一下書(shū)籍,按閱讀順序(在知乎看到的,別的地方推薦也大同小異):
《Structure and Interpretation of Computer Programs》(SICP)可以啟發(fā)思想,尤其是函數(shù)式編程入門(mén);
《Practical Common Lisp》和《Land of Lisp》也適合初學(xué)者;
《On Lisp》主要討論macro的使用;
《Let over Lambda》在《On Lisp》基礎(chǔ)上更深入討論宏。
《On Lisp》和《Practical Common Lisp》(中譯為《實(shí)用Common Lisp編程》) 由田春翻譯完成。我個(gè)人先買(mǎi)了SICP,但是里邊是講Scheme,看了幾節(jié)怕到時(shí)學(xué)lisp會(huì)混亂,就轉(zhuǎn)先實(shí)用lisp這本了。
另外我用的實(shí)現(xiàn)是Steel Bank Common Lisp。
四、附上這段時(shí)間了解的函數(shù)式語(yǔ)言個(gè)人簡(jiǎn)介
這條自己的理解,純粹為了自己做個(gè)筆記。
haskell貌似比較新,應(yīng)用不多,別說(shuō)是分布式,就是普通應(yīng)用也不多。haskell是純函數(shù)式。而lisp不是純的,還可以以別的方式來(lái)編程。
erlang倒是主打分布式。erlang內(nèi)置了多臺(tái)機(jī)器之間的通訊原語(yǔ),程序員只用關(guān)心業(yè)務(wù)邏輯就可以了。
lisp主要是一種全新的看待軟件開(kāi)發(fā)的視角。
go也支持閉包。