計算機經典論文

liguangxian2018發表於2018-06-21

轉載:https://blog.csdn.net/g9yuayon/article/details/1512851


JaoProgramming Musing 看到的:Babar Kazar 整理了一堆經典論文Jao強烈建議每個嚴肅的程式設計師讀每篇論文,說它們都或多或少有意思。粗粗掃了一下,很多論文都沒讀過。挑了些俺多少知道一點的介紹。

· An axiomatic basis for computer programming C. A. R. Hoare
Tony Hoare
名下的公理化語義(Axiomatic Semantics)。著名的Hoare Triples, P{C}Q, 就是從這裡來的。論文不長,雙列6頁。前輩們就是這樣的,6頁紙就能開宗立派。不像俺,6頁紙連介紹部分都寫不周全。哪位老大想知道怎麼證明程式正確。前置條件,不變條件,後置條件的妙用,可以用這篇論文開牙。
· Communicating Sequential Processes (CSP) C. A. R. Hoare
Hoare, 
又見Hoare。其實也正常。牛人之牛,就在於成就深廣。連結的文件應該不算論文,而算專著。260頁。從1985年推出到現在20多年過去,這本書的引用率在CS歷史上排名第三,可見其影響之深。對併發程式設計有強烈興趣的老大可以去鑽研一把。我沒讀過。
· Call-by-name, call-by-value, and the lambda calculus Gordon Plotkin
沒讀過。只見LtU介紹過。Gordon老大這篇論文的要點之一是要想順利地對程式進行推導,就需要有合適的lambda理論。想深入理解call-by-namecall-by-value,和lambda運算元的老大們可以上了。
· Towards a theory of type structure John C. Reynolds
號稱經典中的經典。不過也沒讀過。型別系統一直是程式語言研發的熱點,也是非常有趣的方向――型別系統的程式設計好比讓機器證明一系列定理。Reynolds在論文裡討論了什麼才是正確的型別結構,和句法正確必須獨立於任何具體的型別表達形式,並且給出了帶型別的lambda運算元的一種擴充套件,允許他描述使用者自定義型別和多型函式。滿篇公式,有勇氣去讀的老大要有心理準備。
· Structured Programming with go to Statements Donald E. Knuth
這篇論文詳細結構化程式設計時討論了什麼時候用goto,什麼時候不用goto。高爺爺精細務實的態度非常值得學習。高老太爺用了一輩子goto(MIXMMIX程式裡沒了Goto怎麼玩兒得轉囁?),豈能輕易被Dijkstragoto的批評嚇退?他仔細探討了幾種不同的程式,考察goto用在那些程式裡的利弊。最後得出結論,goto在某些程式裡仍然高效實用。雖然論文是30年前的,但裡面的分析手法和利用goto的優化技術至今可用。
· Definitional interpreters for higher-order programming languages John C. Reynolds
這篇文章俺喜歡。”Metacircular”這個性感的概念就是在這篇論文裡首次提出的。想深入瞭解用一門語言寫出的直譯器定義這門語言自身的神奇理念,這篇論文是必讀材料。有興趣的老大可以先讀SICP的第四章。 
· An APL Machine 1970 Philip S. Abrams
只知道APL是門有歷史意義的語言。順便說一句,APL這個名字太土了。A Programming Language ==APL。象什麼話嘛。

· The Anatomy of a Large-Scale Hypertextual Web Search Engine Sergey Brin and Lawrence Page
網路是個大的矩陣(transition probability matrix of Markov Chain)。網頁的聲譽(page rank)就是這個巨大矩陣的principle eigenvector的某個元素。嗯,反正我只有佩服的份兒。
· No Silver Bullet: Essence and Accidents of Software Engineering Frederic P. Brooks, Jr.
地球銀都知道。不用俺多嘴了。
· A Mathematical Theory of Communication Claude Shannon
Bell
實驗室當年輝煌一時。出了名的叫人做A,結果發明了B。夏農老大就是其中傑出代表。夏農進了Bell實驗室後,居然沒人吩咐他幹嘛。夏農老大轉念一想,自己喜歡數學,Bell的生意盡在通訊,幹嘛不看看把數學應用到通訊上有什麼結果呢?於是1948年這篇論文問世樂。搞通訊的人崩潰樂。現代資訊理論就誕生樂。
· Bayesian Networks without Tears
貝葉斯理論熱了好幾年了。估計還會繼續熱下去。現在資訊越來越多,我們已經審美疲勞。大家渴望的不是資訊,而是知識。靠個人的力量把資訊提煉成知識太慢,我們需要機器的幫忙。機器學習不熱都難,而貝葉斯理論在機器學習裡有很好的應用。這篇文章行為淺顯,可以輕鬆讀完。對了,那個人人喝罵的微軟回形針的智慧引擎就是用貝葉斯網路實現的。
· A Universal Algorithm for Sequential Data Compression
沒讀過。無恥地找個藉口:我們系開資訊理論課的時候,俺剛好畢業。
· A Relational Model of Data for Large Shared Data Banks 1970 Edgar F. Codd
沒有關係代數,人類將會怎樣?Codd劃時代的論文奠定了現代資料庫的基礎。嘿嘿,其實俺也沒有讀過這篇論文。順便說一句,現在的ORM試圖把data schema和物件系統對映起來。問題是,data schema只是對關係的一種表達方式而已,還和具體的系統實現有關。也許把物件間的結構和關係對映起來才是正道。
· Let's Build a Compiler 1988-1995
教你一步一步寫出一坨編譯器。不算論文吧。一篇相當不錯的指南。
· Worse Is Better Richard P. Gabriel
網上膾炙人口的文章。很有教育意義。簡單說,worse is better包括下面幾點:
-- 
簡單:設計要簡單。但如果介面和實現不能兩全,追求實現的簡單。文章裡給出的Unix vs Multics的例子非常有意思。
-- 
正確:程式必須在所有可見的方面正確。其它地方,如果簡單和正確不能兩全,追求簡單。
-- 
一致性:程式不能太不一致。但為了簡單,可以在少數地方不一致。
-- 
完備性:程式應該儘可能照顧到重要的地方,但是不能犧牲簡潔。
強烈推薦。
· Hints on Programming Language Design C.A.R. Hoare
Hoare
對設計語言的經驗總結。這些經驗至今有效。文章很容易讀,讀後絕對增長程式設計的功力。
· Why Functional Programming Matters John Hughes
為普通程式設計師準備的大餐,所以寫得通俗。沒有公式,也沒有拗口的術語。著重展示了FoldMap的強大抽象能力。不由想到我在大學裡修的一門課,程式語言。課是好課,老師是一流老師。課上我們學習了淺顯的程式語言理論,重點學習了函式程式設計(用Common Lisp)和邏輯程式設計(用Prolog)。這門課徹底改變我對程式設計的理解,明白了imperative programmingOO programming外還有精彩世界。至今想來都覺得幸運。那門課的作業也很有意思,實現一個駐留記憶體的資料庫,支援關係代數裡的常見操作。
· On the Expressive Power of Programming Languages Matthias Felleisen
沒讀過。待讀。
· The Early History Of Smalltalk Alan Kay
還有什麼好說的呢?Alan Kay這個名字說明一切。30年前Alan Kay就做出來Smalltalk,現在想來仍然讓人驚歎。引一段文章Alan Kay評述Smalltalk的話: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年圖靈獎儀式上的致詞。真是頂尖geek的風範啊。高太爺在文章裡解釋了問什麼他的書取名為《程式設計的藝術》。明顯他對人們談到程式設計時把科學置於藝術之上很不了然。高爺爺追溯“藝術”的詞源,說藝術的本意就是技能,也是技術和技巧兩次的起源。從這裡開始,他開始討論藝術和科學的關聯,討論藝術在程式設計裡的表現形式和意義。用他的話說,他作為教育者和作者的畢生目標就是叫人寫美妙的程式。讀起來讓人心潮彭湃的說。
· The next 700 programming languages Peter J. Landin
42
年前的論文,影響深遠。Peter在論文裡描述的函式語言ISWIMIf You See What I Mean)現在沒有幾個人知道了。但他對lambda運算元的推崇和對函式語言的論述影響了後來的函式語言設計。
· Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I) 1960 John McCarthy
47
年前提出LISP的那篇著名論文。沒讀過。動態型別檢查,Garbage Collection, 遞迴函式,S-expression, 程式及資料。。。可謂貢獻輝煌。

· FORTH - A Language for Interactive Computing Charles H.Moore 
只知道Forth是一門stack oriented的程式語言,影響了後來的一些語言,比如CAT。其它的就不知道了。
· Teach Yourself Programming in Ten Years 2001 Peter Norvig
大牛之所以為大牛,原因之一就是目光深遠。這篇文章批評那些《24秒學會C++》之類教材的無稽,討論了學習程式設計,從菜鳥變成鯤鵬的方法。中文版已經傳得滿世界都是,趕快找來看吧。Peter Norvig的網站上還有很多高質量的文章。強烈推薦一讀。
· The Definition and Implementation of a Computer Language based on constraints Guy Lewis Steele Jr.
好像是Guy Steels的碩士論文。沒讀過。
· Growing a Language Guy Lewis Steele Jr.
好文!G老大在OOPSLA 98上的主題演講。G老大主張應該採取漸進的方式設計一門可以被自由擴充套件的語言(LISP圈子裡的牛人們多半都持這種觀點吧?)。這篇演講稿針對該觀點做了精練地論述。說起進化的觀點,可以參看另外一篇好文章,SICP作者之一,Jay Sussman的近作
· Epigrams on Programming Alan J. Perlis
A
老大發表的一系列關於程式設計的格言。幽默而深刻。每讀必笑。笑後必哭。嗯嗯嗯,誇張一下。不要當真。
· The Complexity of Theorem Proving Procedures Stephen A. Cook
仙風道骨的庫克爺爺的成名作。這篇文章一出,好比有人在加州荒漠裡發現第一塊狗頭金,立刻掀起開發加州的狂潮。計算複雜性理論迅速遍地開花。相比這篇論文開創性的貢獻,庫克因此得到圖靈獎不過小小點綴。NP-Complete在這篇論文裡被嚴格定義。更重要的是,庫克證明了第一個NP-Complete的問題,SAT(Boolean Satisfiability Problem)。有了SAT,再加上折磨了無數學生的Polynomial Reducibility無數的NPC問題就出現樂。。。別看俺在這裡唾沫橫飛,當年做有關計算理論的證明題還是相當吃力的,沒有少熬夜。奇怪的是,某一天我給同學講解我的解法,NPC的相關定義突然變得清晰起來。當初讓我絞盡腦汁的證明竟然變得相當機械。後來知道,給人講解(包括寫作)是非常有效地學習方法。懷著備課的目標讀文章,假設自己給別人講解正在讀的文章,有助快速理解所讀內容。SAT的證明相當複雜,我反正沒有耐心讀完。
· Steps Toward Artificial Intelligence Marvin Minsky
AI
的奠基論文。不過我沒讀過。
· The Original 'Lambda Papers' Guy Steele and Gerald Sussman
一系列講解lambda運算元和scheme設計的經典論文。學scheme時讀過,對理解scheme的設計理念很有幫助。

· The UNIX Time-Sharing System Dennis Ritchie and Ken Thompson
作者不用介紹了吧?這篇文章裡介紹的Unix特性早為人熟知。不過第八部分(VIII Perspective)討論了作者的設計理念,仍然值得一讀。

相關文章