從Jao的Programming Musing 看到的:Babar Kazar 整理了一堆經(jīng)典論文。Jao強(qiáng)烈建議每個(gè)嚴(yán)肅的程序員讀每篇論文,說(shuō)它們都或多或少有意思。粗粗掃了一下,很多論文都沒(méi)讀過(guò)。挑了些俺多少知道一點(diǎn)的介紹。
· An axiomatic basis for computer programming C. A. R. Hoare
Tony Hoare名下的公理化語(yǔ)義(Axiomatic Semantics)。著名的Hoare Triples, P{C}Q, 就是從這里來(lái)的。論文不長(zhǎng),雙列6頁(yè)。前輩們就是這樣的,6頁(yè)紙就能開(kāi)宗立派。不像俺,6頁(yè)紙連介紹部分都寫(xiě)不周全。哪位老大想知道怎么證明程序正確。前置條件,不變條件,后置條件的妙用,可以用這篇論文開(kāi)牙。
· Communicating Sequential Processes (CSP) C. A. R. Hoare
Hoare, 又見(jiàn)Hoare。其實(shí)也正常。牛人之牛,就在于成就深廣。鏈接的文檔應(yīng)該不算論文,而算專(zhuān)著。260頁(yè)。從1985年推出到現(xiàn)在20多年過(guò)去,這本書(shū)的引用率在CS歷史上排名第三,可見(jiàn)其影響之深。對(duì)并發(fā)編程有強(qiáng)烈興趣的老大可以去鉆研一把。我沒(méi)讀過(guò)。
· Call-by-name, call-by-value, and the lambda calculus Gordon Plotkin
沒(méi)讀過(guò)。只見(jiàn)LtU介紹過(guò)。Gordon老大這篇論文的要點(diǎn)之一是要想順利地對(duì)程序進(jìn)行推導(dǎo),就需要有合適的lambda理論。想深入理解call-by-name,call-by-value,和lambda算子的老大們可以上了。
· Towards a theory of type structure John C. Reynolds
號(hào)稱(chēng)經(jīng)典中的經(jīng)典。不過(guò)也沒(méi)讀過(guò)。類(lèi)型系統(tǒng)一直是編程語(yǔ)言研發(fā)的熱點(diǎn),也是非常有趣的方向――類(lèi)型系統(tǒng)的編程好比讓機(jī)器證明一系列定理。Reynolds在論文里討論了什么才是正確的類(lèi)型結(jié)構(gòu),和句法正確必須獨(dú)立于任何具體的類(lèi)型表達(dá)形式,并且給出了帶類(lèi)型的lambda算子的一種擴(kuò)展,允許他描述用戶(hù)自定義類(lèi)型和多態(tài)函數(shù)。滿(mǎn)篇公式,有勇氣去讀的老大要有心理準(zhǔn)備。
· Structured Programming with go to Statements Donald E. Knuth
這篇論文詳細(xì)結(jié)構(gòu)化編程時(shí)討論了什么時(shí)候用goto,什么時(shí)候不用goto。高爺爺精細(xì)務(wù)實(shí)的態(tài)度非常值得學(xué)習(xí)。高老太爺用了一輩子goto(MIX和MMIX程序里沒(méi)了Goto怎么玩兒得轉(zhuǎn)囁?),豈能輕易被Dijkstra對(duì)goto的批評(píng)嚇退?他仔細(xì)探討了幾種不同的程序,考察goto用在那些程序里的利弊。最后得出結(jié)論,goto在某些程序里仍然高效實(shí)用。雖然論文是30年前的,但里面的分析手法和利用goto的優(yōu)化技術(shù)至今可用。
· Definitional interpreters for higher-order programming languages John C. Reynolds
這篇文章俺喜歡。”Metacircular”這個(gè)性感的概念就是在這篇論文里首次提出的。想深入了解用一門(mén)語(yǔ)言寫(xiě)出的解釋器定義這門(mén)語(yǔ)言自身的神奇理念,這篇論文是必讀材料。有興趣的老大可以先讀SICP的第四章。
· An APL Machine 1970 Philip S. Abrams
只知道APL是門(mén)有歷史意義的語(yǔ)言。順便說(shuō)一句,APL這個(gè)名字太土了。A Programming Language ==APL。象什么話(huà)嘛。
· The Anatomy of a Large-Scale Hypertextual Web Search Engine Sergey Brin and Lawrence Page
網(wǎng)絡(luò)是個(gè)大的矩陣(transition probability matrix of Markov Chain)。網(wǎng)頁(yè)的聲譽(yù)(page rank)就是這個(gè)巨大矩陣的principle eigenvector的某個(gè)元素。嗯,反正我只有佩服的份兒。
· No Silver Bullet: Essence and Accidents of Software Engineering Frederic P. Brooks, Jr.
地球銀都知道。不用俺多嘴了。
· A Mathematical Theory of Communication Claude Shannon
Bell實(shí)驗(yàn)室當(dāng)年輝煌一時(shí)。出了名的叫人做A,結(jié)果發(fā)明了B。香農(nóng)老大就是其中杰出代表。香農(nóng)進(jìn)了Bell實(shí)驗(yàn)室后,居然沒(méi)人吩咐他干嘛。香農(nóng)老大轉(zhuǎn)念一想,自己喜歡數(shù)學(xué),Bell的生意盡在通訊,干嘛不看看把數(shù)學(xué)應(yīng)用到通訊上有什么結(jié)果呢?于是1948年這篇論文問(wèn)世樂(lè)。搞通訊的人崩潰樂(lè)。現(xiàn)代信息理論就誕生樂(lè)。
· Bayesian Networks without Tears
貝葉斯理論熱了好幾年了。估計(jì)還會(huì)繼續(xù)熱下去。現(xiàn)在信息越來(lái)越多,我們已經(jīng)審美疲勞。大家渴望的不是信息,而是知識(shí)。靠個(gè)人的力量把信息提煉成知識(shí)太慢,我們需要機(jī)器的幫忙。機(jī)器學(xué)習(xí)不熱都難,而貝葉斯理論在機(jī)器學(xué)習(xí)里有很好的應(yīng)用。這篇文章行為淺顯,可以輕松讀完。對(duì)了,那個(gè)人人喝罵的微軟回形針的智能引擎就是用貝葉斯網(wǎng)絡(luò)實(shí)現(xiàn)的。
· A Universal Algorithm for Sequential Data Compression
沒(méi)讀過(guò)。無(wú)恥地找個(gè)借口:我們系開(kāi)信息理論課的時(shí)候,俺剛好畢業(yè)。
· A Relational Model of Data for Large Shared Data Banks 1970 Edgar F. Codd
沒(méi)有關(guān)系代數(shù),人類(lèi)將會(huì)怎樣?Codd劃時(shí)代的論文奠定了現(xiàn)代數(shù)據(jù)庫(kù)的基礎(chǔ)。嘿嘿,其實(shí)俺也沒(méi)有讀過(guò)這篇論文。順便說(shuō)一句,現(xiàn)在的ORM試圖把data schema和對(duì)象系統(tǒng)映射起來(lái)。問(wèn)題是,data schema只是對(duì)關(guān)系的一種表達(dá)方式而已,還和具體的系統(tǒng)實(shí)現(xiàn)有關(guān)。也許把對(duì)象間的結(jié)構(gòu)和關(guān)系映射起來(lái)才是正道。
· Let's Build a Compiler 1988-1995
教你一步一步寫(xiě)出一坨編譯器。不算論文吧。一篇相當(dāng)不錯(cuò)的指南。
· Gauging Similarity via N-Grams: Language-Independent Sorting... Marc Damashek
第一次聽(tīng)說(shuō)
· Worse Is Better Richard P. Gabriel
網(wǎng)上膾炙人口的文章。很有教育意義。簡(jiǎn)單說(shuō),worse is better包括下面幾點(diǎn):
-- 簡(jiǎn)單:設(shè)計(jì)要簡(jiǎn)單。但如果接口和實(shí)現(xiàn)不能兩全,追求實(shí)現(xiàn)的簡(jiǎn)單。文章里給出的Unix vs Multics的例子非常有意思。
-- 正確:程序必須在所有可見(jiàn)的方面正確。其它地方,如果簡(jiǎn)單和正確不能兩全,追求簡(jiǎn)單。
-- 一致性:程序不能太不一致。但為了簡(jiǎn)單,可以在少數(shù)地方不一致。
-- 完備性:程序應(yīng)該盡可能照顧到重要的地方,但是不能犧牲簡(jiǎn)潔。
強(qiáng)烈推薦。
· Hints on Programming Language Design C.A.R. Hoare
Hoare對(duì)設(shè)計(jì)語(yǔ)言的經(jīng)驗(yàn)總結(jié)。這些經(jīng)驗(yàn)至今有效。文章很容易讀,讀后絕對(duì)增長(zhǎng)程序設(shè)計(jì)的功力。
· Why Functional Programming Matters John Hughes
為普通程序員準(zhǔn)備的大餐,所以寫(xiě)得通俗。沒(méi)有公式,也沒(méi)有拗口的術(shù)語(yǔ)。著重展示了Fold和Map的強(qiáng)大抽象能力。不由想到我在大學(xué)里修的一門(mén)課,編程語(yǔ)言。課是好課,老師是一流老師。課上我們學(xué)習(xí)了淺顯的程序語(yǔ)言理論,重點(diǎn)學(xué)習(xí)了函數(shù)編程(用Common Lisp)和邏輯編程(用Prolog)。這門(mén)課徹底改變我對(duì)編程的理解,明白了imperative programming和OO programming外還有精彩世界。至今想來(lái)都覺(jué)得幸運(yùn)。那門(mén)課的作業(yè)也很有意思,實(shí)現(xiàn)一個(gè)駐留內(nèi)存的數(shù)據(jù)庫(kù),支持關(guān)系代數(shù)里的常見(jiàn)操作。
· On the Expressive Power of Programming Languages Matthias Felleisen
沒(méi)讀過(guò)。待讀。
· The Early History Of Smalltalk Alan Kay
還有什么好說(shuō)的呢?Alan Kay這個(gè)名字說(shuō)明一切。30年前Alan Kay就做出來(lái)Smalltalk,現(xiàn)在想來(lái)仍然讓人驚嘆。引一段文章Alan Kay評(píng)述Smalltalk的話(huà):In computer terms, Smalltalk is a recursion on the notion of computer itself. Instead of dividing "computer stuff" into things each less strong than the whole--like data structures, procedures, and functions which are the usual paraphernalia of programming languages--each Smalltalk object is a recursion on the entire possibilities of the computer. Thus its semantics are a bit like having thousands and thousands of computer all hooked together by a very fast network. Questions of concrete representation can thus be postponed almost indefinitely because we are mainly concerned that the computers behave appropriately, and are interested in particular strategies only if the results are off or come back too slowly.
· Computer Programming as an Art Donald E. Knuth
高老太爺在1974年圖靈獎(jiǎng)儀式上的致詞。真是頂尖geek的風(fēng)范啊。高太爺在文章里解釋了問(wèn)什么他的書(shū)取名為《編程的藝術(shù)》。明顯他對(duì)人們談到編程時(shí)把科學(xué)置于藝術(shù)之上很不了然。高爺爺追溯“藝術(shù)”的詞源,說(shuō)藝術(shù)的本意就是技能,也是技術(shù)和技巧兩次的起源。從這里開(kāi)始,他開(kāi)始討論藝術(shù)和科學(xué)的關(guān)聯(lián),討論藝術(shù)在編程里的表現(xiàn)形式和意義。用他的話(huà)說(shuō),他作為教育者和作者的畢生目標(biāo)就是叫人寫(xiě)美妙的程序。讀起來(lái)讓人心潮彭湃的說(shuō)。
· The next 700 programming languages Peter J. Landin
42年前的論文,影響深遠(yuǎn)。Peter在論文里描述的函數(shù)語(yǔ)言ISWIM(If You See What I Mean)現(xiàn)在沒(méi)有幾個(gè)人知道了。但他對(duì)lambda算子的推崇和對(duì)函數(shù)語(yǔ)言的論述影響了后來(lái)的函數(shù)語(yǔ)言設(shè)計(jì)。
· Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I) 1960 John McCarthy
47年前提出LISP的那篇著名論文。沒(méi)讀過(guò)。動(dòng)態(tài)類(lèi)型檢查,Garbage Collection, 遞歸函數(shù),S-expression, 程序及數(shù)據(jù)。。。可謂貢獻(xiàn)輝煌。
· FORTH - A Language for Interactive Computing Charles H.Moore
只知道Forth是一門(mén)stack oriented的編程語(yǔ)言,影響了后來(lái)的一些語(yǔ)言,比如CAT。其它的就不知道了。
· Teach Yourself Programming in Ten Years 2001 Peter Norvig
大牛之所以為大牛,原因之一就是目光深遠(yuǎn)。這篇文章批評(píng)那些《24秒學(xué)會(huì)C++》之類(lèi)教材的無(wú)稽,討論了學(xué)習(xí)編程,從菜鳥(niǎo)變成鯤鵬的方法。中文版已經(jīng)傳得滿(mǎn)世界都是,趕快找來(lái)看吧。Peter Norvig的網(wǎng)站上還有很多高質(zhì)量的文章。強(qiáng)烈推薦一讀。
· The Definition and Implementation of a Computer Language based on constraints Guy Lewis Steele Jr.
好像是Guy Steels的碩士論文。沒(méi)讀過(guò)。
· Growing a Language Guy Lewis Steele Jr.
好文!G老大在OOPSLA 98上的主題演講。G老大主張應(yīng)該采取漸進(jìn)的方式設(shè)計(jì)一門(mén)可以被自由擴(kuò)展的語(yǔ)言(LISP圈子里的牛人們多半都持這種觀(guān)點(diǎn)吧?)。這篇演講稿針對(duì)該觀(guān)點(diǎn)做了精練地論述。說(shuō)起進(jìn)化的觀(guān)點(diǎn),可以參看另外一篇好文章,SICP作者之一,Jay Sussman的近作。
· Epigrams on Programming Alan J. Perlis
A老大發(fā)表的一系列關(guān)于編程的格言。幽默而深刻。每讀必笑。笑后必哭。嗯嗯嗯,夸張一下。不要當(dāng)真。
· The Complexity of Theorem Proving Procedures Stephen A. Cook
仙風(fēng)道骨的庫(kù)克爺爺?shù)某擅鳌_@篇文章一出,好比有人在加州荒漠里發(fā)現(xiàn)第一塊狗頭金,立刻掀起開(kāi)發(fā)加州的狂潮。計(jì)算復(fù)雜性理論迅速遍地開(kāi)花。相比這篇論文開(kāi)創(chuàng)性的貢獻(xiàn),庫(kù)克因此得到圖靈獎(jiǎng)不過(guò)小小點(diǎn)綴。NP-Complete在這篇論文里被嚴(yán)格定義。更重要的是,庫(kù)克證明了第一個(gè)NP-Complete的問(wèn)題,SAT(Boolean Satisfiability Problem)。有了SAT,再加上折磨了無(wú)數(shù)學(xué)生的Polynomial Reducibility,無(wú)數(shù)的NPC問(wèn)題就出現(xiàn)樂(lè)。。。別看俺在這里唾沫橫飛,當(dāng)年做有關(guān)計(jì)算理論的證明題還是相當(dāng)吃力的,沒(méi)有少熬夜。奇怪的是,某一天我給同學(xué)講解我的解法,NPC的相關(guān)定義突然變得清晰起來(lái)。當(dāng)初讓我絞盡腦汁的證明竟然變得相當(dāng)機(jī)械。后來(lái)知道,給人講解(包括寫(xiě)作)是非常有效地學(xué)習(xí)方法。懷著備課的目標(biāo)讀文章,假設(shè)自己給別人講解正在讀的文章,有助快速理解所讀內(nèi)容。SAT的證明相當(dāng)復(fù)雜,我反正沒(méi)有耐心讀完。
· Steps Toward Artificial Intelligence Marvin Minsky
AI的奠基論文。不過(guò)我沒(méi)讀過(guò)。
· The Original 'Lambda Papers' Guy Steele and Gerald Sussman
一系列講解lambda算子和scheme設(shè)計(jì)的經(jīng)典論文。學(xué)scheme時(shí)讀過(guò),對(duì)理解scheme的設(shè)計(jì)理念很有幫助。
· The UNIX Time-Sharing System Dennis Ritchie and Ken Thompson
作者不用介紹了吧?這篇文章里介紹的Unix特性早為人熟知。不過(guò)第八部分(VIII Perspective)討論了作者的設(shè)計(jì)理念,仍然值得一讀。
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/g9yuayon/archive/2007/02/23/1512851.aspx