zoukankan      html  css  js  c++  java
  • 【转载】计算机经典论文选读

    ▶ “On Computable Numbers, with an Application to the Entscheidungs-problem”, Alan Turing, 1936。
    《论可计算的数》一文是阿兰·图灵于1936年发表的, 这篇论文被公认为是现代计算机科学诞生和独立的标志, 黑客道课程将结合对图灵机计算模型的介绍,讨论计算、逻辑与数学的关系。

    ▶ “First Draft of a Report to EDVAC”,John von Neumann, 1945。
    冯·诺依曼是著名的“冯·诺依曼体系”的提出者,其核心思想后来演变为程序与数据等价的观点。

    ▶ “Three Models for the Description of Language”, Noam Chomsky, 1956。
    乔姆斯基提出了语言处理的有限自动机模型,在语言学、数学、逻辑学、计算科学之间建立了一座桥梁,它是当今编译理论的基础。

    ▶ “Recursive Functions of Symbolic Expressions and Their Computation by Machine”, John McCarthy, 1960。
    麦卡锡是 Lisp 语言的发明人,他提出了基于符号表达式的 lambda 演算的计算机实现方案( Lisp 语言),开创了符号计算的新领域。

    ▶ “Revised Report on the Algorithmic Language ALGOL 60”, Peter Naur (ed.), 1963。
    这篇文章在巴克斯工作的基础上提出了巴克斯—劳尔范式,成为描述编程语言规范的形式化工具。

    ▶ “PL/I List Processing”,Harold W. Lawson, 1967。
    这篇文章首次明确提出了指针变量的概念与实现方式,对以后的计算机软件设计产生了巨大影响。

    ▶ “Multiple Computer Networks and Intercomputer Communication”, Lawrence G. Roberts, 1967。
    这篇文章提出了互联网的模型和原理。阅读时可以参考 “The Past and Future History of the Internet”, Venton Verf, Robert Kahn, et al, 1997。这篇文章回顾了互联网的发展历史和未来的发展趋势。

    ▶ “Forth --- a Language for Interactive Computing”, Charles H. Moore and Geoffrey C. Leach, 1970。
    这篇文章详细地说明了堆栈是如何被引入到编程语言中,并加以利用的, Forth 语言是在软件中倚赖堆栈进行计算的语言, 对后期的许多编程语言有很大影响。

    ▶ “System R4 Relational”,Dr. Edgar F. Codd, 1970。
    这篇文章提出了关系性数据库的思想, 关系性数据库与网络性数据库和层次性数据库是三大数据库流派,目前实际应用中(特别是在企业级别的数据库产品应用中) 关系性数据库产品为主流产品。

    ▶ “The UNIX Time-sharing System”, Dennis Ritchie and ken Thompson, 1974。
    UNIX 操作系统是计算机发展历史上一个划时代的操作系统,而且至今仍然被广泛使用。阅读时可以参考 “The Development of the C Language”, Dennis M. Ritchie, 1996。 C 语言是为开发 UNIX 而发明的编程语言, 兼有高级语言和低级汇编语言的特征, 是目前开发系统软件的首选编程语言。

    ▶ “Pansystems Methodology: A Transfield Investigation of Generalized System-Transformation-Symmetry”, Wu XueMou, 1976。
    吴学谋教授的这篇“泛系方法论: 广义系统—转化—对称性的跨领域研究”是网络型科学诞生的标志。

    ▶ “The WEB System for Structured Documentation”, Donald E. Knuth, 1983。
    高德纳教授是世界著名的计算机科学家, 他对算法理论有非常深入的研究, 他发明的 TeX{}排版系统是将计算机科学理论与印刷行业完美结合的产物,这一软件导致是现代出版技术革命的发端,它对科技信息的自由传播产生了重大影响。
    阅读时可以参考“Literate Programming”,Donald E. Knuth, 1984。 “作文式编程法”是受元数学的方法论影响和启发的产生的, TeX 系统中底层的 WEB 模型是采用作文式编程法开发的第一个计算模型。

    ▶ “The GNU Manifesto”,Richard M. Stallman, 1984。
    《GNU 宣言》是计算机科学家在软件领域道德自省后理性思考的结果,由这一宣言引发的自由软件运动极大地改变了计算机工业的格局。
    阅读时可以参考“The GNU Operating System and the Free Software Movement”, Richard M. Stallman, 1999。 开发 GNU 操作系统是自由软件运动核心工程,是为保护和培养自由软件运动的开发而创建的,其目标是开发一个类 UNIX 的操作系统,以及一个符合 GPL 的完整工具集。 在 GNU 工程发轫后, 它得到了众多黑客的支持,成为目前自由软件运动发展的平台。 本文回顾了自由软件思想诞生的经过,阐明了伟大的 GNU 工程的实质与自由软件思想的精髓,剖析了自由软件运动的发展现状和面临的挑战。

    ▶ “The Quantum Theory, the Church-Turing Principle and the Universal Quantum Computer”, David Deutsch, 1985。
    “量子理论,丘奇—图灵原则与通用量子计算机”。大卫·多依奇的这篇论文正式提出了量子计算的模型, 实用的量子计算机尽管还没有制造出来,但是计算模型已经提出。

    ▶ “The X Window System”,Robert W. Scheifler et al, 1986。
    X 视窗系统是将分布式计算与图形用户界面首次成功结合的产物。

    ▶ “Information Management: A Proposal”, Tim Berners-Lee, 1989。
    这篇论文提出了万维网的计算模型,引发了网络出版的革命。

    ▶ “The Programming Language Oberron”,NiklausWirth, 1990。
    Wirth 教授是 Pascal 语言的发明人。 在总结了 Pascal 语言设计的得失的基础上, 他提出了编程语言可以扩展为完整的操作系统的思想,并开发了 Oberron 来予以验证。
    阅读时可以参考“Revenge of the Son of the Lisp Machine”, Matthew Flatt, et al, 1999。 Lisp Machine 是二十世纪八十年代流行的一种计算机体系结构,后因种种原因退出了市场, 但是“编程语言就是操作系统”的思想最近因为硬件技术的飞速发展又开始复苏。 (笔者的 MING/OS 也是受到了这一思潮的影响。)
    阅读这篇文章时还可以参读 “Scripting: Higher Level Programming for the 21st Century”,John K. Ousterhout,1998。随着计算机硬件的飞速发展,计算机系统中的硬件成本大幅度下降,但是软件系统中程序员的成本不降反升,因此如何提高程序 员的开发效率是目前的一个主要课题。 脚本语言由于其高度的模块化和对象化, 比系统编程语言更加贴近人的思维特点,因此越来越受到重视。本文说明了为什么脚本语言将是二十一世纪程序员编程的主要工具。

    ▶ “Molecular Computation of Solutions to Combinatorial Problems”, L. M. Adleman, 1994。
    目前的计算机都是电子计算, 而分子计算机则由于电子计算机无法比拟的超大规模平行计算能力最近受到计算机科学界的高度重视。

    ▶ “Network Computing in Beowulf Clusters”, Thomas L.Sterling, 1995。
    群集计算是利用多台计算机协同工作得到高计算性能的一条有效途径。

    ▶ “Main Principle of E2K Architecture”, Boris Babayan, 2000。
    天才的俄罗斯学者将软件的资源可分割的原理创造性地应用到了计算机通用中央处理器芯片的设计中, 使得系统硬件资源可分割和按需调度,得到了低功耗、抗病毒、高性能的新型 CPU 芯片设计。

    ▶ “The Anatomy of the Grid”,Ian Foster, et al. 2001。
    网格计算是下一代计算机网络发展的主要方向之一,它是以高性能计算机、高性能数据库和宽带通信网络为基础发展起来的。

    ▶ 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-name,call-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(MIX和MMIX程序里没了Goto怎么玩儿得转嗫?),岂能轻易被Dijkstra对goto的批评吓退?他仔细探讨了几种不同的程序,考察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
    教你一步一步写出一坨编译器。不算论文吧。一篇相当不错的指南。

    ▶ Gauging Similarity via N-Grams: Language-Independent Sorting... Marc Damashek
    第一次听说

    ▶ 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
    为普通程序员准备的大餐,所以写得通俗。没有公式,也没有拗口的术语。着重展示了Fold和Map的强大抽象能力。不由想到我在大学里修的一门课,编程语言。课是好课,老师是一流老师。课上我们学习了浅显的程序语言理论,重点学习了函数编程(用Common Lisp)和逻辑编程(用Prolog)。这门课彻底改变我对编程的理解,明白了imperative programming和OO 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在论文里描述的函数语言ISWIM(If 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, 程序及数据。。。可谓贡献辉煌。

    ▶ 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)讨论了作者的设计理念,仍然值得一读。

  • 相关阅读:
    【Shell】Shell编程之while循环命令
    【Shell】Shell编程之grep命令
    【Shell】Shell编程之awk命令
    【Shell】Shell编程之sed命令
    【MySQL】MySQL之示例数据库Sakila下载及安装
    关于JAVA项目报表选型过程
    关于HSQLDB访问已有数据库文件的操作说明
    为什么要用 C# 来作为您的首选编程语言
    ThinkPHP_5对数据库的CURL操作
    使用ECharts画K线图
  • 原文地址:https://www.cnblogs.com/zhangjianghao/p/13215043.html
Copyright © 2011-2022 走看看