自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

田春:走在Lisp的岔路上

開發(fā)
田春,Common Lisp 程序員,毽球運(yùn)動(dòng)員,跆拳道 2 級(jí)。網(wǎng)名“冰河”,Glority Software 資深軟件工程師,前網(wǎng)易杭州研究院高級(jí)開發(fā)工程師和系統(tǒng)管理員,資深 Common Lisp 程序員。他 2003 年起開始學(xué)習(xí) Commom Lisp,精通 Lisp 史和各種實(shí)現(xiàn)。

田春,Common Lisp 程序員,毽球運(yùn)動(dòng)員,跆拳道 2 級(jí)。網(wǎng)名“冰河”,Glority Software 資深軟件工程師,前網(wǎng)易杭州研究院高級(jí)開發(fā)工程師和系統(tǒng)管理員,資深 Common Lisp 程序員。他 2003 年起開始學(xué)習(xí) Commom Lisp,精通 Lisp 史和各種實(shí)現(xiàn),2007 年起成為 LispWorks 付費(fèi)用戶,Common Lisp 社區(qū)的網(wǎng)絡(luò)專家,開源項(xiàng)目 cl-net-snmp(SNMP 協(xié)議庫(kù))的作者,usocket 跨平臺(tái)網(wǎng)絡(luò)庫(kù)的主要維護(hù)者,common-lisp.net 站點(diǎn)管理員,水木社區(qū)(newsmth.net)函數(shù)型編程語(yǔ)言(FuncProgram)版主,美國(guó) Versata/Gensym 公司技術(shù)顧問。他曾在 2008 年翻譯了 Paul Graham 的 On Lisp 一書,在 ILC 2009(國(guó)際 Lisp 會(huì)議)上發(fā)表學(xué)術(shù)論文,在《程序員》雜志上發(fā)表 Common Lisp 專題文章,并在網(wǎng)上撰寫過大量相關(guān)的技術(shù)文章。

[[125099]]

圖靈社區(qū):你好,田春,可能大家更熟悉的還是你的網(wǎng)名“冰河”,先向社區(qū)的讀者介紹一下自己,好嗎?

田春:大家好。首先,關(guān)于敝人的網(wǎng)名,其實(shí)是自小學(xué)起就在使用的筆名或昵稱,只是一個(gè)名字而已。但需要解釋的是,敝人跟傳說中的冰河木馬沒有任何關(guān)系,重名純屬巧合。

我從小學(xué)五年級(jí)開始學(xué)習(xí)計(jì)算機(jī),早年在 NOI 信息學(xué)競(jìng)賽上只有一點(diǎn)小成績(jī),初高中階段沉迷游戲和 DOS/Windows 編程,學(xué)習(xí)成績(jī)很一般,高考時(shí)超常發(fā)揮才有幸考入浙大一個(gè)非計(jì)算機(jī)專業(yè)。 大學(xué)期間自學(xué)了包括 Linux 和 Lisp 在內(nèi)的多種計(jì)算機(jī)知識(shí),畢業(yè)后憑借在校期間 Linux 方面的聲望進(jìn)入網(wǎng)易公司從事系統(tǒng)管理,工作期間繼續(xù)學(xué)習(xí) Common Lisp,在該領(lǐng)域?qū)戇^開源項(xiàng)目、發(fā)表過國(guó)際會(huì)議論文、翻譯過經(jīng)典英文教材,***因機(jī)緣巧合接觸到國(guó)外的古老商業(yè) Lisp 軟件,經(jīng)過兩年多的努力,目前以維護(hù)該軟件為生。

圖靈社區(qū):你的經(jīng)歷真是跟 Lisp 是息息相關(guān)啊,但很多人對(duì) Lisp 只有一個(gè)模糊的概念:這是一種中古語(yǔ)言,能否結(jié)合你自己的經(jīng)歷談?wù)?Lisp?

田春:在我計(jì)算機(jī)生涯的前十年,其實(shí)完全沒有想過將來會(huì)以此謀生。我選擇計(jì)算機(jī)領(lǐng)域的具體學(xué)習(xí)方向幾乎完全是興趣導(dǎo)向的。早期的時(shí)候,信息相對(duì)封閉,我和當(dāng)時(shí)其他同行一樣走的是從 DOS 到 Windows,從 BASIC 到C或 Pascal 再到 Visual Studio 系列,這樣一個(gè)循規(guī)蹈矩的學(xué)習(xí)路線。后來到杭州讀大學(xué),不久就開始學(xué)習(xí) Linux 和 Lisp。

我的 Lisp 經(jīng)歷可以分為N個(gè)階段:

1) 人工智能編程語(yǔ)言階段——小學(xué)五年級(jí)和六年級(jí)。那時(shí)有一本書,叫做《計(jì)算機(jī)應(yīng)用指南》,里面講述了 1994 年時(shí)整個(gè)計(jì)算機(jī)領(lǐng)域的狀況,其中“人工智能與專家系統(tǒng)”那章里著重強(qiáng)調(diào)了 Lisp 和 Prolog 這兩種 AI 語(yǔ)言的應(yīng)用。這是我最早的 Lisp 印象。

2) GNU 和 Emacs 階段——大學(xué)***年。GNU 工程的創(chuàng)始人R. Stallman 早獨(dú)立完成了兩大自由軟件:GCC 和 Emacs,后者使用一種 Emacs Lisp 語(yǔ)言來擴(kuò)展 Emacs 環(huán)境。Stallman 本身也是 Lisp 黑客,在 Lisp 機(jī)上寫過真正的 Lisp 程序,還參與過 Common Lisp 語(yǔ)言***版(CLTL1)的標(biāo)準(zhǔn)制訂工作。按理說所有學(xué)習(xí) Linux 的人都多少會(huì)受到一些 Lisp 方面的熏陶,遺憾的是,最終多數(shù)人只是停留在 Emacs 和 elisp 層面上,我算是少數(shù)順著這條 Lisp 道路一直走向***(Common Lisp)的那些人。

3) Scheme 階段——大學(xué)的第三年。通過 SICP 一書和 MIT OpenCourseWare 的配套視頻來學(xué)習(xí),那個(gè)時(shí)候廣泛接觸了 Linux 系統(tǒng)自帶的各種 Scheme 軟件包,在學(xué)習(xí)計(jì)算機(jī)一般理論的同時(shí)學(xué)習(xí) Scheme 語(yǔ)言。我逐漸發(fā)現(xiàn) Scheme 語(yǔ)言本身太簡(jiǎn)單了,具體的實(shí)現(xiàn)又非常多,互相之間區(qū)別很大。很多人最終停留在 Scheme 階段,其中少數(shù)有能力的人又自己創(chuàng)造了許多新的 Scheme 實(shí)現(xiàn)。但我沒有停下來,繼續(xù)向前走。

4) Common Lisp 階段I——大學(xué)第三年晚期和第四年。學(xué)習(xí) Debian 系統(tǒng)自帶的 onlisp 和* Common Lisp the Language *電子書,然后用 Debian 自帶的 CMU Common Lisp,Steel Bank Common Lisp,GNU Common Lisp 以及 GNU CLISP 等環(huán)境來進(jìn)行 Common Lisp 編程實(shí)踐。

Debian 里還有幾個(gè)很大的 Common Lisp 寫出的軟件,包括 Maxima 和 Axiom 兩種數(shù)學(xué)符號(hào)計(jì)算系統(tǒng)。CMU Common Lisp (cmucl) 的軟件包文檔里有 The Evolution of Lisp 這篇著名的論文。我讀完以后,順藤摸瓜通過學(xué)校內(nèi)網(wǎng)的 ACM Digital Library 等論文渠道,把關(guān)于 Lisp 語(yǔ)言發(fā)展史的關(guān)鍵論文幾乎全看了一遍。不過,這個(gè)時(shí)候還沒寫出一個(gè)像樣的 Common Lisp 程序,完全是在學(xué)習(xí)。

5) Common Lisp 階段 II——主要是發(fā)起自己的開源項(xiàng)目(cl-net-snmp),試圖翻譯各種 Lisp 資料——最主要的就是 On Lisp 一書。我認(rèn)為這是一個(gè)領(lǐng)域的新手通常會(huì)做的兩件事。

6) Common Lisp 階段 III——參與維護(hù)別人發(fā)起的開源項(xiàng)目(usocket、cl-xml、cl-http、cffi 等),以及試圖了解和改進(jìn)各種 Common Lisp 平臺(tái)本身的源代碼。捎帶著參與 Lisp 相關(guān)的國(guó)際會(huì)議,把自己的成果整理成論文,以便跟其他同行建立聯(lián)系,走向領(lǐng)域前沿。

我現(xiàn)在處在一個(gè)新的階段,并且也走向了 Lisp 領(lǐng)域一條冷門的岔路上:維護(hù)前人留下的古老商業(yè) Lisp 軟件。我不認(rèn)為這是一條***道路,相反這是一條歧途,但我必須去做,因?yàn)槿绻也蛔龅脑挘@些有價(jià)值的東西就可能失傳。我現(xiàn)在的工作與其說是為了謀生和個(gè)人興趣,還不如說是像一個(gè)歷史學(xué)家一樣,在努力地行使保護(hù)歷史文物的職責(zé)。Lisp 領(lǐng)域可謂是浩如煙海,沒有其他任何語(yǔ)言具有像 Lisp 這樣的深度和廣度,也沒有哪個(gè)語(yǔ)言的程序員可以像 Lisp 程序員那樣熱愛自己的語(yǔ)言。這是我的觀點(diǎn),但它的真正內(nèi)涵需要人們自己去體會(huì)。

圖靈社區(qū):關(guān)于編程語(yǔ)言的學(xué)習(xí),你有一個(gè)很有意思的觀點(diǎn)——C和 Lisp 是編程語(yǔ)言的兩個(gè)極端。可否就此談?wù)?,并?duì)如何學(xué)習(xí)編程語(yǔ)言提供一些建議?

田春:這實(shí)際是 Paul Graham 在 The roots of Lisp(Lisp 之根源)這篇文章中提出的觀點(diǎn)。該文第二段里是這樣寫的:

“我認(rèn)為目前為止只有兩種真正干凈利落, 始終如一的編程模式:C語(yǔ)言模式和 Lisp 語(yǔ)言模式。此二者就像兩座高地,在它們中間是尤如沼澤的低地。隨著計(jì)算機(jī)變得越來越強(qiáng)大,新開發(fā)的語(yǔ)言一直在堅(jiān)定地趨向于 Lisp 模式。二十年來,開發(fā)新編程語(yǔ)言的一個(gè)流行的秘決是,取C語(yǔ)言的計(jì)算模式,逐漸地往上加 Lisp 模式的特性,例如運(yùn)行時(shí)類型和無用單元收集。”

我是在同意 Paul Graham 的上述觀點(diǎn)的基礎(chǔ)上,做出了“C和 Lisp 是編程語(yǔ)言的兩個(gè)極端”這一評(píng)價(jià)的。但我的依據(jù)除了兩種語(yǔ)言的語(yǔ)法風(fēng)格迥異以外,還考慮了C程序和 Lisp 程序截然不同的運(yùn)行方式:C程序總是一些零零散散的獨(dú)立可執(zhí)行文件,由操作系統(tǒng)把它們拼接在一起;而 Lisp 程序本質(zhì)上是對(duì) Lisp 環(huán)境和 Lisp 語(yǔ)言本身的擴(kuò)展,Lisp 環(huán)境就像一個(gè)虛擬機(jī)一樣,行使著操作系統(tǒng)的職責(zé),把其中加載的所有 Lisp 代碼運(yùn)行起來(Emacs 又何嘗不是如此呢)。縱觀其他所有語(yǔ)言,我看不出還有本質(zhì)上的第三種方式了。

圖靈社區(qū):我們知道 Common Lisp 是 Lisp 的一門方言,對(duì)這門方言的實(shí)際應(yīng)用和未來前景,你有什么看法呢?

田春: Common Lisp 是 Lisp 語(yǔ)言家族中唯一具有工業(yè)強(qiáng)度的大型語(yǔ)言,它本身就是為了把之前所有真正用來一般性軟件的 Lisp 語(yǔ)言統(tǒng)一起來,盡量兼容它們并消除不一致的地方,***得到一個(gè)***的集大成體。這個(gè)目標(biāo)事實(shí)上確實(shí)實(shí)現(xiàn)了。1991 年,Common Lisp 發(fā)布***版,至今所有代碼幾乎可以不經(jīng)任何修改,就運(yùn)行在目前還在流行的至少 10 種不同的 Common Lisp 環(huán)境上,整整二十年來 Lisp 程序員的成果一直可以正常運(yùn)行,這對(duì) Lisp 程序員無疑是一種巨大的鼓勵(lì)。相比之下,其他的語(yǔ)言要么消失了,要么已被改得面目全非。

我的看法是,一個(gè)追求卓越的程序員應(yīng)該廣泛嘗試多種語(yǔ)言,但如何他真的這樣做了,他一定會(huì)在遇到 Common Lisp 時(shí)停下來,因?yàn)樗l(fā)現(xiàn)這門語(yǔ)言是***的,也是最美的,并且學(xué)習(xí)過程也是最艱難的,艱難到以至于學(xué)成之后,再?zèng)]有精力也沒有必要去學(xué)其他語(yǔ)言了。然后他就會(huì)想盡辦法讓一切編程事務(wù)都用 Common Lisp 來做,***會(huì)奇跡般地發(fā)現(xiàn) Common Lisp 什么都可以干,而且沒有哪個(gè)領(lǐng)域是干不了的,甚至于沒有哪個(gè)領(lǐng)域是尚未有 Lisp 程序員踏足的。

至于前景,就像我在《實(shí)用 Common Lisp 編程》一書譯者序里表達(dá)的:一門語(yǔ)言能安全地存活 50 年,那么它就一定可以存活 100 年。人生寶貴,如果希望自己的勞動(dòng)成果長(zhǎng)久流傳于世,那么選用 Common Lisp 來表達(dá)自己的思想是最穩(wěn)妥的。

圖靈社區(qū):《實(shí)用 Common Lisp 編程》的作者,強(qiáng)調(diào)了 Lisp 的“可編程性”和“適合探索性編程”。就這本書,他是如何體現(xiàn)這些特色的?這些帶來怎樣的閱讀體驗(yàn)?zāi)兀?/strong>

田春:主要體現(xiàn)在貫穿于書中的實(shí)踐性章節(jié)里。在很多其他語(yǔ)言的類似實(shí)踐性章節(jié)里,可能是把程序的最終版本逐個(gè)部分地向讀者做解釋,比如這個(gè)函數(shù)將會(huì)完成哪些功能,那個(gè)類是做什么用的,諸如此類。但在學(xué)習(xí)者把所有代碼輸入電腦之前,程序是幾乎跑不起來的。而在《實(shí)用 Common Lisp 編程》一書里,作者借助 Lisp 語(yǔ)言本身的強(qiáng)大優(yōu)勢(shì),采用真正的循序漸進(jìn)教學(xué)法:每一個(gè)函數(shù),都從直接可以運(yùn)行并完成實(shí)際功能的簡(jiǎn)單版本開始,然后再根據(jù)逐漸復(fù)雜的需求被不斷改寫;或者單個(gè)函數(shù)規(guī)模變大以后,再添加新的子函數(shù),諸如此類。這樣能夠確保學(xué)習(xí)者每次都能取得階段性成果,同時(shí)演示了 Lisp 程序員們真正寫程序時(shí),是如何從零開始,邊設(shè)計(jì)邊施工,***一路積累千上萬行代碼的。

我自己也寫過超過 1 萬行代碼規(guī)模的 cl-net-snmp 項(xiàng)目——一個(gè)完整的 SNMP 協(xié)議實(shí)現(xiàn)。在這個(gè)項(xiàng)目里,我甚至做出了 MIB 編譯器,把 MIB 定義轉(zhuǎn)譯成 Lisp,然后要么解釋要么編譯加載。這個(gè)項(xiàng)目就是從零開始,先解決 ASN.1 各種基本數(shù)據(jù)類型的 BER 編解碼,然后封裝 SNMP 數(shù)據(jù)包,再做 MIB 的語(yǔ)法解析,直到整個(gè)服務(wù)器和客戶端都正常跑起來。Common Lisp 開源社區(qū)的同行對(duì)我的成果極為稱贊,雖然我的代碼質(zhì)量和程序效率還不行,但人們普遍驚訝我可以用 Lisp,將一個(gè)看似簡(jiǎn)單的網(wǎng)絡(luò)協(xié)議以最復(fù)雜也最貼近 Lisp 的方式成功實(shí)現(xiàn)。學(xué)完這本書的實(shí)踐部分,就可以掌握編寫 Lisp 程序的正統(tǒng)思路。然后無論多么復(fù)雜的程序,都可以用同樣的思路逐漸寫出來。

圖靈社區(qū):能不能向有志于學(xué)習(xí) Common Lisp 的初學(xué)者,介紹一些網(wǎng)絡(luò)資源呢?

田春:所有最重要的網(wǎng)絡(luò)資源,都寫在這本書的***一章里。但我認(rèn)為對(duì)于初學(xué)者來說,看書是最重要的。Common Lisp the Language (CLTL2) 是最重要的 Common Lisp 語(yǔ)言大全。說起來, 《實(shí)用 Common Lisp 編程》一書只涵蓋整個(gè)語(yǔ)言不到一半的特性。要想寫出最專業(yè)的代碼,必須了解并且靈活組合運(yùn)用這門語(yǔ)言所給予程序員的所有東西。因此 CLTL2 是一定要看完的,遺憾的是仔細(xì)看完這本書至少需要半年。

無論如何,我不推薦人們過早地去參與各種線上討論,因?yàn)?Lisp 社區(qū)對(duì)新手并不友好,國(guó)外的社區(qū)尤其是這樣,貿(mào)然去問各種無聊的問題只會(huì)自取其辱。

圖靈社區(qū):跟你合作本書的過程中,圖靈的編輯都獲益良多。在這次的合作之后,你對(duì)技術(shù)圖書的出版,又有哪些看法和建議呢?

田春:這本書得以順利出版,還是要感謝圖靈的編輯們的。盡管這本書 8 月份的時(shí)候離出版還遙遙無期,我當(dāng)時(shí)采取了一個(gè)手段威脅你們(笑)。不過,有幾點(diǎn)我還是不太滿意的:一是排版用 Word 太不專業(yè),推薦用 LaTex 排版;二是這本書的***沒有索引,其實(shí)索引對(duì)這本書比較重要,因?yàn)樗写煮w的字都是 Common Lisp 的關(guān)鍵字,寫代碼的人想用某個(gè)語(yǔ)句的時(shí)候,可以通過索引來查詢;三是出版周期還是太長(zhǎng)。

至于建議,一是希望圖靈的書今后能保留索引,方便讀者查閱;二是應(yīng)在翻譯合同中加入出版時(shí)間的約定,規(guī)定交稿后多長(zhǎng)時(shí)間出版;三是希望圖靈能引進(jìn) On Lisp 的版權(quán)出版翻譯版,我可以提供譯稿供出版使用。

圖靈社區(qū):感謝田春接受圖靈社區(qū)的采訪,與大家分享自己學(xué)習(xí) Lisp 的經(jīng)歷,以及對(duì) Lisp 的看法

原文鏈接:http://segmentfault.com/blog/turing_interview/1190000002433747

責(zé)任編輯:張偉 來源: segmentfault.com
相關(guān)推薦

2013-07-12 11:04:21

技術(shù)管理

2013-07-12 11:08:17

技術(shù)成長(zhǎng)管理

2012-02-06 09:16:14

Windows PhoWindows Pho

2015-07-13 09:19:37

一加氫

2014-12-25 23:15:57

docker中文社區(qū)docker容器

2020-02-07 15:14:23

機(jī)器學(xué)習(xí)人工智能谷歌

2016-11-18 12:37:13

安卓谷歌開源

2012-06-02 11:19:36

《移動(dòng)開發(fā)者》春Phone

2009-09-03 18:32:43

Lisp函數(shù)

2013-03-29 10:13:22

lisp編譯器

2014-03-07 10:14:00

編程語(yǔ)言F#年度編程

2017-03-16 09:30:56

LispAI數(shù)據(jù)結(jié)構(gòu)

2012-06-04 10:34:17

Lisp

2022-03-23 14:44:42

存內(nèi)計(jì)算芯片計(jì)算機(jī)

2012-11-22 10:11:16

LispLisp教程

2015-04-20 10:20:47

NGINX開源

2011-09-29 15:28:14

通信展云手機(jī)移動(dòng)

2013-12-22 23:20:04

田溯寧亞信企業(yè)

2019-05-27 08:41:48

混網(wǎng)管理網(wǎng)絡(luò)

2011-06-23 09:43:05

RADVISIONIPv6
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)