【计算机系统导论】附录


  • 常用数字后缀 kb, mb, gb, tb 等等
  • ASCII 码

写作规范

  • CSAPP 每一章的开头的写法和第一章的写法需要好好研究学习模仿并创新
  • 每一章(全书共八章)的开头,需要有总体介绍,大约 1500 字左右(这部分全书大约有 10000 字)
  • 每一节(每章有五节)的开头,也需要有总体介绍,大约 400 字左右(这部分全书大约有 8*5*400=16000 字)
  • 每一章都可以引入一个 Top 10 之类的排名,高屋建瓴介绍关键概念
  • 第一章 第二章 为引入,介绍计算机系统的前世今生和基本前置概念
  • 第三章 第四章 第五章 介绍计算机硬件的基本知识,围绕冯诺依曼架构的三大元素 - 处理器、存储和输入输出
  • 第六章 第七章 介绍系统软件最重要的操作系统以及互联网时代必不可少的网络
  • 第八章 也是最后一章,介绍云相关内容,以及计算机的未来展望
  • 最后的知识点需要再结合不同课本的目录进行筛查

进度记录

  • 2016.02.14: 完成初稿和目录及内容敲定
  • 2016.02.07: 因故暂停两个月的项目重启
  • 2016.12.05: 项目重启
  • 2016.10.04: 目录确定,初稿网站上线
  • 2016.08.17: 目录重新编排
  • 2016.08.15,目录调整,内容整合
  • 2016.08.09,Wiki 与内核恐慌 整合完成
  • 2016.08.05,操作系统精髓与设计原理 整理完成
  • 2016.08.04,计算机系统要素 整理完成
  • 2016.07.25,维基百科相关条目整理,打算添加内核恐慌的部分内容,有些讨论还是挺有意思的
  • 2016.07.18,资料整理完成,目录调整
  • 2016.07.17,计算机组成与体系结构 性能设计 整理完成
  • 2016.07.12,计算机系统概论 和 计算机体系结构 - 量化研究方法 整理完成
  • 2016.07.09,软硬件接口部分整理完成
  • 2016.06.27,完成二级目录,准备开始写作
  • 2016.06.22,完成前七章的二级目录
  • 2016.06.20,搭了简单的初稿网站,方便随时查看
  • 2016.06.16,目录、想法及相关材料优化
  • 2016.06.15,目录初稿确定,需要进一步斟酌和细化
  • 2016.06.11,两门 CMU 相关课程的复习
    • CMU 18640 Foundations of Computer Architecture 主要是从硬件和底层角度来介绍计算机架构,从超标量的设计开始,介绍指令流、分支预测、寄存器数据流,进而说明动态调度和乱序执行,然后介绍内存数据流和主存系统设计。后半部分涉及更多的是多核和虚拟机的部分,具体选择什么内容还需要进一步考察
    • CMU 18645 How to Write Fast Code 主要是从 CPU、GPU 和集群的角度来介绍如何让代码运行效率更高的方法,包括不同平台的特点以及如何利用这些特点。因为主要集中于性能,可以选取部分内容作为实践习题帮助大家理解软硬件结合以及针对不同硬件可能的不同瓶颈做不同优化的方法,具体还需进一步考察
  • 2016.06.9,五本经典教材的略读与内容选择,详情在这里
    • 《计算机系统概论(第二版)》很不错的一本书,按照不同的层次写法来组织,比 CSAPP 的做法要清晰一些,应该会参考这种自底向上的写法来组织内容
    • 《编码》非常简明易懂的计算机工作原理科普书,从摩尔密码开始说起,由浅入深,刻意减少了诸多概念的描述,而是用类比来帮助大家理解。总体来说,内容比较浅,专业的还是得看课本
    • 《计算机组成与设计:硬件/软件接口》这本书主要是基于 MIPS 体系结构把冯诺依曼体系的五大组件进行了逐一的硬件实现+软件设计介绍,更为重要的是引入了诸多并行计算的内容,这是大部分教材中忽略或者内容较少的,会根据这个思路把并行相关的内容,结合 OpenMP, CUDA 和 Hadoop/Spark 整体融入到新书中,毕竟这是未来发展的趋势
    • 《计算机体系结构:量化研究方法》这本书是前一本书的高级版,所谓高级,指的是涉及到更多的公式、定理和算法。很多内容对于我要写的『导论』来说过于艰深了,比方说 CPU 具体的分支预测和调度算法,在 CMU 也是作为研究生课的内容的。但是部分理解计算机体系的角度很新颖,值得参考
    • 《计算机组成与体系结构:性能设计》这本书算是一个异类,因为是用自顶向下的方式写的,但是总体来说偏于硬件,有些比较难说明的机制也不是特别清晰,但是最后的术语表和参考文献倒是不错,另外是对 ARM 结构说得稍微多一些,我在考虑是否加入到新书中
  • 2016.06.08,项目正式启动,自述

计算机科学中的女性(附录)

不谈性别平等。历史上,女性在计算机科学中就扮演了重要角色,比方说第一个程序员就是女性。同时,我们也有女性 CEO,比如 HP 的 Meg Whitman 和 Yahoo 的 Marissa Mayer。

Grace Hopper 是第一个为编程语言创造编译器的人,也是 Mark I 电脑的程序员之一。ENIAC 的日常编程工作是由 6 名女数学家完成的。Adele Goldberg 是研发 Smalltalk 的七名程序员之一。

由 SWIFT(Supporting Women in Information Technology) 发起的调查发现女性通常认为自己缺少在计算机科学中成功的能力。

男女搭配干活不累,团队氛围。

知名人物

  • 1842: Ada Lovelace (1815–1852) 是查尔斯·巴贝奇计算机分析机论文的分析家,这论文详细说明用该机器计算伯努利数的方法,被认为是世界上第一个计算机程序。她也被后人公认为是第一位计算机程序员。
  • 1926: Grete Hermann (1901-1984) 发表了计算代数奠基论文(其博士论文),名为 The Question of Finitely Many Steps in Polynomial Ideal Theory
  • 1942: 海蒂·拉玛 (1913–2000), 是美国演员,也是展布频谱技术的共同发明人,该技术是现代许多无线通讯系统包括无线局域网络与移动电话的基础关键
  • 1946: Betty Jennings, Betty Snyder, Frances Spence, Kay McNulty, Marlyn Wescoff, 和 Ruth Lichterman 是 ENIAC 的程序员。Adele Goldstine 撰写了 ENIAC 的指南
  • 1948: Kathleen Booth (1922–) 为 ARC2 计算机编写汇编语言is credited with writing the assembly language for the ARC2 computer.[citation needed]
  • 1949:葛丽丝·穆雷·霍普 (1906–1992)是美国海军准将及计算机科学家,世界最早一批的程序员之一,也是最早的女性程序员之一。她是Harvard Mark I上第一个专职程序员,创造了现代第一个编译器A-0 系统,以及第一个高级商用计算机程序语言“COBOL”,被誉为COBOL之母。著名的计算机术语“Debug”(调试排错)便是她在受到从电脑中驱除蛾子的启发而开始使用的,于是她也被冠以“Debug”之母的称号。她也是Y2K危机的创造者。她培育出许多编程语言专家,被人称为不可思议的葛丽丝(Amazing Grace)。
  • 1958: 探险者 1 号的轨道计算由 NASA Jet Propulsion 实验室的全女性团队完成,从高中招募来的
  • 1965: Sister Mary Kenneth Keller (1913–1985) 是第一个获得计算机科学博士学位的美国女性,论文是 Inductive Inference on Computer Generated Patterns
  • 1969: Margaret Hamilton (1936–) 在 1960s 是 MIT Instrumentation 实验室 软件工程分部的主任,为阿波罗空间计划开发了飞行软件,后被授予 NASA Exceptional Space Act Award
  • 1972: Mary Shaw (1943–) 是 CMU 第一位获得计算机科学博士的女性
  • 1972: Adele Goldberg (1945–), Smalltalk 语言的开发者之一
  • 1972: Karen Spärck Jones (1935–2007), 信息获取和自然语言处理的先锋
  • 1974: Elizabeth Feinler (1931–) 和她的团队为互联网主机名定义了简单的文本文件格式,现在负责顶级域名的命名 .mil, .gov, .edu, .org, and .com.
  • 1975: Irene Greif 是 MIT 第一位获得计算机科学博士的女性
  • 1978: Sophie Wilson (1957–) 英国计算机科学家,设计了 Acorn 微处理器以及 ARM 的指令集
  • 1979: Carol Shaw (1955–) 是 Atari 和 Activision 的游戏设计者和开发者
  • 1984: Susan Kare (1954–), 创造了 Apple Macintosh 的图标和许多界面元素,是 NeXT 的创意总监
  • 1988: Éva Tardos (1957–),因为其设计和分析算法的成就获得 Fulkerson Prize
  • 1992: Donna Dubinsky (1955–), Palm 的 CEO 和共同创始人
  • 1993: Shafi Goldwasser (1958–), 理论计算机科学家,因其在复杂性理论、密码学和数值计算理论的贡献,两次获得 Gödel Prizea
  • 1993: 芭芭拉·利斯科夫 (1939.11.7–)与周以真(Jeannette Wing)一起合作提出了著名的Liskov代换原则。芭芭拉是2008年图灵奖得主和2004年约翰·冯诺依曼奖得主。
  • 1994: Sally Floyd (1953–), 因其在 TCP 协议中工作而闻名
  • 1996: Xiaoyuan Tu (1967–), 第一个获得 ACM’s Doctoral Dissertation Award 的女性
  • 1997: 安妮塔·博格 (1949–2003)是安妮塔·博格妇女与科技研究所(IWT)的创建领导人。
  • 2005: 鲁奇·桑维是Facebook第一位女性工程师。
  • 2006: Maria Klawe (1951-), 是哈维马德学院的第一位女性校长,2002到2004年时任ACM计算机协会的主席。
  • 2006: 法兰·艾伦 作为一名编译器优化领域的先驱。1989年成为第一位女性IBM Fellow。她也是IBM技术研究院的主席。2006年她是第一位获得图灵奖的女性。
  • 2012: 玛丽莎·梅耶尔 (1975-), 曾是Google第一位女性工程师,曾任职工程师,设计师,产品经理以及公司副总裁。现在是雅虎的CEO。
  • 2012: 莎菲·戈德瓦塞尔(1958年-) 2012年因她密码学的杰出工作获得图灵奖。[7]。她是美国工程院院士。

此外,应该被景仰的,还有信息检索与自然语言处理的先驱Karen Sparck Jones(1935-2007),操作系统和家庭计算机的先驱Mary Allen Wilkes(她在做出了一系列惊人的科技成就之后转行当了律师),最早的一批计算机游戏程序员Carol Shaw和Roberta Williams,苹果电脑用户界面的重要设计师Susan Kare,著名的算法专家Eva Tardos,Smalltalk的设计者之一Adele Goldberg,软件架构专家Mary Shaw,分布式算法专家Nancy Lynch,ACM前主席Barbara Simons,C++最初研发小组的项目经理Barbara Moo,中国计算机界的女院士夏培肃、杨芙清…… 应该被敬仰的,还有正活跃在计算机业界的女性领袖们,包括Cisco的CTO Padmasree Warrior,BBC公司的CIO Tiffany Hall,维基百科的CTO Danese Cooper,原金融时报集团现BUPA基金会的CIO Yasmin Jetha, OLPC(每个孩子一台笔记本计划)创始人和CTO Mary Lou Jepsen等等。

重点人物

  • 世界第一位程序员 Ada Lovelace - 参考书摘
  • 人肉计算机 Henrietta Swan Leavitt
  • 第一个 bug 猎手 Grace Hopper
  • 第一位女性图灵奖得主 - Frances Allen
  • 第一位计算机女博士 - Barbara Liskov
  • 互联网之母 - Radia Perlman
  • 密码奇人王小云
  • 最强女游戏程序员 Corrinne Yu

图灵奖

  • 2006 – Francis “Fran” Elizabeth Allen
  • 2008 – Barbara Liskov
  • 2012 – Shafi Goldwasser

Ada Lovelace

Ada Lovelace(1815 - 1852),英国著名诗人拜伦之女。从小就展现出过人的数学天赋,被拜伦称为平行四边形公主(后半句有误,应该说的是拜伦的妻子,Ada之母)。 1842年至1843年间,她花了9个月翻译意大利数学家Federico Luigi为查尔斯巴贝奇设计的机械式计算机所写的程序设计书。在译文里,她附加了许多注记,详细说明用计算机进行伯努利数的运算方式,而被认为是世界上第一个电脑程序。她预言道:这个机器未来可以用来排版、编曲或是各种更复杂的用途。 1852年,Ada因治疗子宫颈癌失血过多而去世,时年36岁。此时正值中国咸丰初年,太平军初起时,慈禧时年17岁,身份还是兰贵人。 1980年,美国国防部用她的名字Ada命名了一种新的编程语言。另外,美国国防部标准化局还以她的出生年份为Ada语言标准进行了编号,即MIL-STD-1815。

Henrietta Swan Leavitt

Henrietta Swan Leavitt (1868 - 1921),天文学家,聋哑人。19世纪90年代,哈佛大学天文学家皮克林招募了一些聋哑女性对天文台拍摄的照相底片进行测量和分类 工作,实际 上就是以人力来做今天计算机的工作,因此她们也被称为哈佛计算机。 1893年开始,Leavitt参加了这项工作,每周的薪水是10.5美元。她在枯燥的工作中发现了著名的造父变星周光关系,革命性地改变了现代天文学理论。 1893年,新西兰成为第一个给妇女投票权的国家。 同年,日本 首次改用公历。这一年是光绪十九年,年初宋庆龄出生,年底毛泽东出生。次年,甲午海战爆发。

Grace Hopper

Grace Hopper (1906-1992),计算机科学先驱,美国海军准将。她是最早的计算机之一哈佛Mark I的第一批程序员,并为第一个程序设计语言设计了编译器。她是COBOL语言的设计者,常被称为COBOL之母,但是她自己喜欢被称为COBOL祖母,因为COBOL语言实际上是她设计的原型语言FLOW-MATIC的派生。 除了语言设计之外,她在语言标准化方面也做出了奠基性的贡献。 她还有一个重要的荣誉,就是抓住了计算机历史上第一个bug。这只真正的臭虫,如今还荣幸地存放在计算机档案馆里供人瞻仰。

Frances Allen

Frances Allen,1932年出生。美国科学家,IBM Fellow。因在编译器、代码优化和并行编译方面的贡献获得2006年计算机界最高荣誉图灵奖。 有意思的是,Allen女士本来一直从事数学方面的教学,但由于还不起上学欠下的贷款而加入IBM,直至退休。
更多介绍请阅读博客文章:http://blog.csdn.net/g9yuayon/archive/2007/02/22/1512490.aspx。

Barbara Liskov

Barbara Liskov 生于1939年,MIT教授,美国工程院院士。1968年在斯坦福大学获得计算机博士学位。因在计算机编程语言和编程方法、分布式系统等领域的贡献分别与2004年和2008年获得冯诺依曼奖和图灵奖。 更多情况请阅读博客文章:http://blog.csdn.net/turingbook/archive/2009/03/13/3982492.aspx。

Perlman

Perlman是MIT博士,Sun公司的杰出工程师。她在20世纪70年代对路由的研究,发明了生成树协议,是今天互联网的重要基础之一。 此外,她还撰写了两部重要的网络著作:Interconnections: Bridges, Routers, Switches, and Internetworking Protocols和 Network Security: Private Communication in a Public World 。

王小云

1966年生于山东诸城,1983年至1993年就读于山东大学数学系,先后获得学士、硕士和博士学位,19 93年毕业后留校任教。1994年开始用十年时间先后破解了MD5、HAVAL-128、MD4、RIPEMD和SHA-1五大密码,轰动世界。 2005年6月受聘为清华大学高等研究中心杨振宁讲座教授,现为清华大学长江学者特聘教授。 有意思的是,王小云本身的理想是搞物理,只是因为高考意外失败才不得不去读数学的。她的研究组里有一半以上是女博士。 更多情况可以访问这篇采访 http://tech.sina.com.cn/d/2006-12-22/07571301237.shtml。

Corrinne Yu

香港出生的著名女程序员。被著名游戏媒体网站Kotaku评为十年来最具影响的十位游戏界女性之一,也是其中唯一的女程序员。微软Halo团队的游戏引擎主程序员,Direct3D顾问委员会创始成员,也是微软游戏部门第一位女性技术主管。此前担任过多个游戏公司的技术总监。 更多情况,参见她的维基百科条目和个人网站。(信息来自Milo Yip的博客http://www.cnblogs.com/miloyip/archive/2010/03/08/1680968.html)

计算机科学名人堂(附录)

图灵奖得主

图灵奖(ACM A.M. Turing Award)是计算机协会(ACM)于1966年设立的奖项,专门奖励对计算机事业作出重要贡献的个人。其名称取自世界计算机科学的先驱、英国科学家、英国曼彻斯特大学教授艾伦·图灵(A.M. Turing),这个奖设立目的之一是纪念这位现代计算机科学的奠基者。获奖者必须是在计算机领域具有持久而重大的先进性的技术贡献。大多数获奖者是计算机科学家。是计算机界最负盛名的奖项,有“计算机界诺贝尔奖”之称。

  • 1966年 - 艾伦·佩利(Alan J. Perlis) - 高级程序设计技巧,编译器构造
  • 1967年 - 莫里斯·威尔克斯(Maurice V. Wilkes) - 存储程序式计算机EDSAC,程序库
  • 1968年 - 理查德·卫斯里·汉明(Richard Hamming) - 数值方法,自动编码系统,错误检测和纠错码
  • 1969年 - 马文·闵斯基(Marvin Minsky) - 人工智能
  • 1970年 - 詹姆斯·维尔金森(James H. Wilkinson) - 数值分析,线性代数,倒退错误分析
  • 1971年 - 约翰·麦卡锡(John McCarthy) - 人工智能
  • 1972年 - 艾兹格·迪科斯彻(Edsger Dijkstra) - 程序设计语言的科学与艺术
  • 1973年 - 查理士·巴赫曼(Charles W. Bachman) - 数据库技术
  • 1974年 - 高德纳(Donald E. Knuth) - 算法分析、程序设计语言的设计、程序设计
  • 1975年 - 艾伦·纽厄尔(Allen Newell) 赫伯特·西蒙(Herbert A. Simon) - 人工智能,人类认知心理学和列表处理
  • 1976年 - 迈克尔·拉宾(Michael O. Rabin) 达纳·斯科特(Dana S. Scott) - 非确定性自动机
  • 1977年 - 约翰·巴克斯(John Backus) - 高级编程系统,程序设计语言规范的形式化定义
  • 1978年 - 罗伯特·弗洛伊德(Robert W. Floyd) - 设计高效可靠软件的方法学
  • 1979年 - 肯尼斯·艾佛森(Kenneth E. Iverson) - 程序设计语言和数学符号,互动系统的设计,运用 APL 进行教学,程序设计语言的理论与实践
  • 1980年 - 东尼·霍尔(C. Antony R. Hoare) - 程序设计语言的定义与设计
  • 1981年 - 埃德加·科德(Edgar F. Codd) - 数据库系统,尤其是关系型数据库
  • 1982年 - 史提芬·库克(Stephen A. Cook) - 计算复杂度
  • 1983年 - 肯·汤普逊(Ken Thompson) 丹尼斯·里奇(Dennis M. Ritchie) - UNIX 操作系统和 C 语言
  • 1984年 - 尼古拉斯·沃斯(Niklaus Wirth) - 程序设计语言设计、程序设计
  • 1985年 - 理查德·卡普(Richard M. Karp) - 算法理论,尤其是 NP-完全性理论
  • 1986年 - 约翰·霍普克罗夫特(John Hopcroft) 罗伯特·塔扬(Robert Tarjan) - 算法和数据结构的设计与分析
  • 1987年 - 约翰·科克(John Cocke) - 编译理论,大型系统的体系结构,及精简指令集(RISC)计算机的开发
  • 1988年 - 伊凡·苏泽兰(Ivan Sutherland) - 计算机图形学
  • 1989年 - 威廉·卡亨(William Morton Kahan) - 数值分析
  • 1990年 - 费尔南多·考巴托(Fernando J. Corbató) - CTSS 和 Multics
  • 1991年 - 罗宾·米尔纳(Robin Milner) - LCF,ML语言,CCS
  • 1992年 - 巴特勒·兰普森(Butler W. Lampson) - 分布式,个人计算环境
  • 1993年 - 尤里斯·哈特马尼斯(Juris Hartmanis) 理查德·斯特恩斯(Richard E. Stearns) - 计算复杂度理论
  • 1994年 - 爱德华·费根鲍姆(Edward Feigenbaum) 拉吉·瑞迪(Raj Reddy) - 大规模人工智能系统
  • 1995年 - 曼纽尔·布卢姆(Manuel Blum) - 计算复杂度理论,及其在密码学和程序校验上的应用
  • 1996年 - 阿米尔·伯努利(Amir Pnueli) - 时序逻辑,程序与系统验证
  • 1997年 - 道格拉斯·恩格尔巴特(Douglas Engelbart) - 互动计算
  • 1998年 - 詹姆斯·尼古拉·格雷(James Gray) - 数据库与事务处理
  • 1999年 - 弗雷德里克·布鲁克斯(Frederick P. Brooks,Jr.) - 计算机体系结构,操作系统,软件工程
  • 2000年 - 姚期智(Andrew Chi-Chih Yao) - 计算理论,包括伪随机数生成,密码学与通信复杂度
  • 2001年 - 奥利-约翰·达尔(Ole-Johan Dahl) 克利斯登·奈加特(Kristen Nygaard) - 面向对象编程
  • 2002年 - 罗纳德·李维斯特(Ronald L. Rivest) 阿迪·萨莫尔(Adi Shamir) 伦纳德·阿德曼(Leonard M. Adleman) - 公钥密码学(RSA加密算法)
  • 2003年 - 艾伦·凯(Alan Kay) - 面向对象编程
  • 2004年 - 文特·瑟夫(Vinton G. Cerf) 罗伯特·卡恩(Robert E. Kahn) - TCP/IP协议
  • 2005年 - 彼得·诺尔(Peter Naur) - Algol 60 语言
  • 2006年 - 法兰西斯·艾伦(Frances E. Allen) - 优化编译器
  • 2007年 - 爱德蒙·克拉克(Edmund M. Clarke) 艾伦·爱默生(Allen Emerson) 约瑟夫·斯发基斯(Joseph Sifakis) - 开发自动化方法检测计算机硬件和软件中的设计错误
  • 2008年 - 芭芭拉·利斯科夫(Barbara Liskov) - 编程语言和系统设计的实践与理论
  • 2009年 - 查尔斯·萨克尔(Charles Thacker) - 帮助设计、制造第一款现代PC
  • 2010年 - 莱斯利·瓦伦特(Leslie Valiant) - 对众多计算理论所做的变革性的贡献\
  • 2011年 - 犹大·伯尔(Judea Pearl) - 人工智能
  • 2012年 - 沙菲·戈德瓦塞尔(Shafi Goldwasser) 西尔维·奥麦克林(Silvio Micali) - 由于在密码学和复杂理论领域做出创举性工作
  • 2013年 - 莱斯利·兰伯特(Leslie Lamport) - 在提升计算机系统的可靠性及稳定性领域的杰出贡献
  • 2014年 - 迈克尔·斯通布雷克 - 对现代数据库的概念和实践作出的根本性贡献
  • 2015年 - 惠特菲尔德·迪菲(Whitfield Diffie) 马丁·赫尔曼(Martin E. Hellman) - 发明迪菲-赫尔曼密钥交换,对公开密钥加密技术有重大贡献

王选奖得主

2005年设立。旨在表彰计算机领域取得重大理论、技术突破或获得重大科研成果的个人,是为纪念已故的王选院士而设。 CCF王选奖奖励的人应具备如下条件之一:

  1. 在基础研究或应用基础研究方面有得到国内外同行公认的重大理论突破或做出原创性的研究成果;
  2. 有重大的技术发明或技术突破,通过原理性样机或系统,展示了新思想、新技术或新方法,被后来的研究者采纳,并最终影响了工业界。
  3. 把新技术首次应用于某一领域,并在应用中效果显著,得到了一定的推广,形成了对产业或社会的重要影响。
  4. 在与信息化建设相关的计算机系统重大工程方面取得了创新性成果,产生了良好的经济或社会效益。

历年得主

  • 2006年 - 胡伟武(龙芯2号增强型通用处理器) 赵有健(IPv6核心路由器) 朱建生(中国铁路客票发售和预订系统v5.0项目)
  • 2007年 - 应明生(通讯并发系统中的拓扑结构、随机性与噪音) 唐卫清(PDSOFT 计算机辅助工厂设计系统)
  • 2008年 - 孙育宁(信息设备资源共享协同服务国际标准研制)
  • 2009年 - 孟小峰(纯XML数据库技术研究)
  • 2010年 - 高文(北京大学教授 音视频研究、标准的制定和应用) 刘积仁(东北大学教授 软件新技术研发和研究成果在行业领域的推广与应用)
  • 2011年 - 廖湘科(国防科技大学教授 高性能计算机和操作系统的研究及应用) 孙凝晖(中科院计算所研究员 集群高性能计算机领域的研究和应用)
  • 2012年 - 刘庆峰(安徽科大讯飞 计算机语音技术领域的创新努力和突出贡献)
  • 2013年 - 李彦宏(百度 全球最大的中文搜索引擎) 李晓明(北京大学教授 搜索引擎理论方面)
  • 2014年 - 赵沁平(北京航空航天大学教授 建立了我国第一个基于广域网络的分布式虚拟环境) 雷军(小米科技董事长兼CEO 在手机硬件、人机交互方面有大量创新)
  • 2015年 - 李建中(哈尔滨工业大学教授 海量数据的计算研究) 刘迎建(汉王科技公司 手写汉字识别技术)
  • 2016年 - 李星(清华大学教授 互联网和下一代互联网科技领域的主要开拓者)

计算机先驱奖得主

计算机先驱奖(Computer Pioneer Award)是 IEEE 计算机协会于 1981 年设立的奖项,兼顾了理论与实践,设计与工程实现,硬件与软件,系统与部件。奖励那些在概念真正流行起来的 15 年前就开始做出巨大贡献的人。

  • 1981年
    • Jeffrey Chuan Chu - 电子计算机逻辑设计
  • 1982年
    • Harry D. Huskey - 并行计算机 SWAC
    • Arthur Burks - 电子计算机逻辑设计
  • 1984年
    • John Vincent Atanasoff - 有序串行内存的电子计算机
    • Jerrier A. Haddad - IBM 701
    • Nicholas C. Metropolis - 使用 ENIAC 解决了核能问题
    • Nathaniel Rochester - IBM 702 的架构师
    • Willem L. van der Poel - 串行电脑 ZEBRA
  • 1985年
    • John G. Kemeny - BASIC 语言
    • John McCarthy - LISP 语言与人工智能
    • Alan Perlis - 计算机语言翻译
    • Ivan Sutherland - 图像化绘图板
    • David J. Wheeler - 汇编语言编程
    • Heinz Zemanek - Mailüfterl 计算机及编程语言
  • 1986年
    • Cuthbert C. Hurd - 计算
    • Peter Naur - 计算机语言开发
    • James H. Pomerene - IAS 和 Harvest 电脑
    • Adriann van Wijngaarden - ALGOL 68
  • 1987年
    • Robert E. Everett - Whirlwind
    • Reynold B. Johnson - RAMAC
    • Arthur L. Samuel - 自适应非数值处理
    • Niklaus E. Wirth - Pascal 语言
  • 1988年
    • Friedrich L. Bauer - 计算机栈
    • Marcian E. Hoff, Jr. - 芯片上的微处理器
  • 1989年
    • John Cocke - 指令流水线和 RISC 概念
    • James A. Weidenhammer - 高速 I/O 机制
    • Ralph L. Palmer - IBM 604 电子计算器
    • Mina S. Rees & Marshall C. Yovits & F. Joachim Weyl & Gordon D. Goldstein - 自 1946 年开始进行的 ONR 计算机研发
  • 1990年
    • Werner Buchholz - 计算机架构
    • C.A.R. Hoare - 编程语言定义
  • 1991年
    • Bob O. Evans - 兼容电脑
    • Robert W. Floyd - 编译器
    • Thomas E. Kurtz - BASIC 语言
  • 1992年
    • Stephen W. Dunwell - Project stretch
    • Douglas C. Engelbart - 人机交互
  • 1993年
    • Erich Bloch - 高速计算
    • Jack S. Kilby - 合作发明了集成电路
    • Willis H. Ware - 设计了 IAS 和 JOHNNIAC 电脑
  • 1994年
    • Gerrit A. Blaauw - IBM System/360 系列
    • Harlan B. Mills - 结构化编程
    • Dennis M. Ritchie & Ken L. Thompson - Unix
  • 1995年
    • Gerald Estrin - 早期计算机
    • David Evans - 计算机图形学
    • Butler Lampson - 个人电脑
    • Marvin Minsky - 人工智能
    • Kenneth Olsen - 迷你电脑
  • 1996年(今年主要是冷战结束后给老对手颁发安慰奖)
    • Angel Angelov - 保加利亚的计算机科学
    • Richard F. Clippinger - 在 Aberdeen Proving Ground 把 ENIAC 转化成一个程序
    • Edgar Frank Codd - 数据库管理的抽象模型
    • Norber Fristacky - 数码设备
    • Victor M. Glushkov - 计算机架构的数字自动化
    • Jozef Gruska - 计算理论和有组织的活动
    • Jiri Horejs - 信息论与计算机科学
    • Lubomir Georgiev Iliev - 第一个保加利亚的计算机,抽象数学和软件
    • Robert E. Kahn - TCP/IP 协议和 Internet
    • László Kalmár - 1956 逻辑机器,在匈牙利设计 MIR 电脑
    • Antoni Kilinski - 波兰的商业化电脑,大学的计算机科学
    • László Kozma - 1930 relay machines, 战前匈牙利的早期电脑
    • Sergey A. Lebedev - 苏联的计算机事业
    • Alexey A. Lyaponov - 苏联的控制论和编程
    • Romuald W. Marczynski - 波兰的数字计算机和计算机架构
    • Grigore C. Moisil - 逻辑交换电路
    • Ivan Plander - 斯洛伐克的计算机硬件技术
    • Arnold Reitsakas - Estonia’s computer age
    • Antonin Svoboda - 捷克斯洛伐克的计算机研究
  • 1997年
    • Homer (Barney) Oldfield - 银行应用 ERMA 和计算机制造
    • Francis Elizabeth (Betty) Snyder-Holberton - Univac 电脑的排序生成器
  • 1998年
    • Irving John (Jack) Good - Colossus 和 Manchester Mark I
  • 1999年
    • Herbert Freeman - SPEEDAC of Sperry Corporation,计算机图形学和图像处理
  • 2000年
    • Harold W. Lawson - 指针变量的发明
    • Gennady Stolyarov - Minsk 系列电脑的软件
    • Georgy Lopato - Minsk 系列电脑的硬件
  • 2001年
    • Vernon Schatz - 电子资金转移,使得银行可以进行数字交易
    • William H. Bridge - GE DATANET-30 计算机和交流技术
  • 2002年
    • Per Brinch Hansen - 操作系统和并发编程
    • Robert W. Bemer - ASCII 码和转义序列
  • 2003年
    • Martin Richards - 系统软件可移植化
  • 2004年
    • Frances E. Allen - 编译器优化的理论与实践
  • 2006年
    • Mamoru Hosaka - 日本的计算事业
    • Arnold M. Spielberg - 实时数据获取和记录
  • 2008年
    • Betty Jean Jeanings Bartik - ENAIC 的程序员
    • Edward J. McCluskey - 五十年来设计综合数字系统
    • Carl A. Petri - Petri 网络理论 (1962) 和并行/分布式计算
  • 2009年
    • Jean E. Sammet - 最早的编程语言开发者
    • Lynn Conway - 对超标量架构的突出贡献,包括多发射动态指令调度
  • 2011年
    • David Kuck - 并行架构
  • 2012年
    • Cleve Moler - 创造 MATLAB
  • 2013年
    • Edward Feigenbaum - 知识库系统的开发和应用
  • 2014年
    • Linus Torvalds - Linux 内核和开源
  • 2015年
    • Michael J. Flynn - 超过五十多年的 TCCA 和 SIGARCH 的老领导
    • Peter M. Kogge - 多核处理器开发和计算机控制流水线
  • 2016年
    • E. Grady Booch - 对象建模和 UML

计算机历史博物馆 Fellow Award 得主

奖励那些改变世界的人,包括:计算、网络、软件、硬件、存储、编程语言等等

  • 1987年
    • Grace Murray Hopper - 开发编程语言
  • 1995年
    • Jay W. Forrester - 内存技术,早期计算机系统设计和开发
  • 1996年
    • Mitch Kapor - 开发 Lotus 1-2-3
    • Ken Olsen - DEC 公司的共同创始人,为 Minicomputer 做出贡献
  • 1997年
    • John Backus - FORTRAN,计算机系统理论和软件管理
    • Dennis Ritchie & Ken Thompson - UNIX 和 C
  • 1998年
    • Gene Amdahl - 为计算机架构和设计做的基本的工作,项目管理和领导力
    • Donald Knuth - 算法,TeX 语言和在数学和计算机科学领域的贡献
    • Gordon Moore - 设计和制造半导体设备,Fairchild 和 Intel 的共同创始人
    • Steve Wozniak - Apple 共同创始人,设计了 Apple I
  • 1999年
    • Alan Kay - 个人电脑和人机界面
    • John McCarthy - 人工智能,分时系统
    • Konrad Zuse - 发明了第一个程序控制的高级语言 Plankalkul
  • 2000年
    • Frances Allen - 并行电脑程序编译和优化
    • Vinton Cerf - 创造和发展了 Internet
    • Tom Kilburn - 随机访问存储,虚拟内存和 Multiprogramming
  • 2001年
    • Frederick P. Brooks - 计算机架构,操作系统,软件工程
    • Jean Sammet - 编程语言及其历史
    • Sir Maurice V. Wilkes - 早期计算机设计
  • 2002年
    • John Cocke - 精简指令集,程序优化
    • Charles Geschke & John Warnock- 商业电脑,计算机图形和打印
    • Carver Mead - 自动化
  • 2003年
    • Gordon Bell - 微型电脑的进化
    • Sir Tim Berners-Lee - 开发 WWW
    • David Wheeler - 架构设计,计算机测试
  • 2004年
    • Erich Bloch - 工程管理
    • Dan Bricklin & Bob Frankston- VisiCalc 电子表单
    • Bob Evans - 硬件,软件项目管理
    • Niklaus Wirth - 编程语言核算法
  • 2005年
    • Paul Baran - Internet 架构
    • Douglas C. Engelbart - 人机交互,发明鼠标
    • Alan F. Shugart - 现代磁盘驱动器
    • Ivan E. Sutherland - Sketchpad 应用,计算机图形学
  • 2006年
    • Sir Antony Hoare - 发明快速排序,编程语言
    • Robert Kahn - 在科学研究中利用网络
    • Butler Lampson - 工作站,操作系统,计算机安全,文档发布
    • Marvin Minsky - 人工智能,神经网络,机器人
  • 2007年
    • Morris Chang - 开发独立半导体制作产业
    • John Hennessy - 工程教育,计算机架构
    • David Patterson - 工程教育,计算机架构
    • Charles (Chuck) Thacker - 领导开发 Xerox PARC Alto
  • 2008年
    • Jean Bartik - 在 ENIAC 上编程
    • Bob Metcalfe - 发明、标准化核商业化以太网
    • Linus Torvalds - 创造 Linux 内核,开源
  • 2009年
    • Donald Chamberlin - SQL 与数据库架构
    • Robert Everett - MIT Whirlwind 和 SAGE 计算机系统
    • Federico Faggin & Marcian Hoff & Stan Mazor & Masatoshi Shima - 开发 Intel 4004,世界上第一个商业处理器
  • 2011年
    • Whitfield Diffie & Martin Hellman & Ralph Merkle - 公钥加密
    • Bill Joy - BSD Unix 系统
  • 2012年
    • Fernando Corbato - 分时系统,Multics 操作系统
    • Edward Feigenbaum - 人工智能,专家系统
    • Steve Furber & Sophie Wilson- ARM 处理器架构
  • 2013年
    • Edwin Catmull - 计算机图形,动画,电影制作
    • Harry D. Huskey - 计算系统
    • Robert W. Taylor - 计算机网络,在线信息和交流系统
  • 2014年
    • Lynn Conway - 集成电路设计
    • John Crawford - 工业标准微处理器架构
    • Irwin Jacobs - 数字电话通信技术
  • 2015年
    • Charles W. Bachman - 早期数据库系统开发
    • Evelyn Berezin - 计算机设计
    • Bjarne Stroustrup - 创造 C++ 编程语言
  • 2016年
    • David Cutler - 计算机架构,编译器,操作系统,软件工程
    • Lee Felsenstein - 早期个人电脑时代的影响力
    • Philip Moorby - 发明和提高 Verilog 这一硬件描述语言

计算机科学先驱

我们来考考古,看看历史上对计算机产生过深远影响的人。更多内容请查看维基百科(下面的参考链接有),这里按照个人喜好进行了筛选。

  • 拉蒙·柳利(Ramon Llull, 1300~): 计算理论的先驱,影响了莱布尼茨等人
  • 布莱兹·帕斯卡(Blaise Pascal, 1642): 发明了机械式计算器
  • 戈特弗里德·莱布尼茨(Gottfried Leibniz, 1670~): 对二进制发展、符号逻辑和形式逻辑做出了贡献
  • 查尔斯·巴贝奇(Charles Babbage, 1837): 提出差分机与分析机,被视为计算机先驱
  • 艾达·洛夫莱斯(Ada Lovelace, 1843): 公认的第一位计算机程序员
  • 乔治·布尔(George Boole, 1854): 在符号逻辑运算中做出突出贡献,很多计算机语言中把逻辑运算称为布尔运算,结果称为布尔值
  • 赫尔曼·何乐礼(Herman Hollerith, 1889): 现代机械数据处理之父,随着他发明的制表机,自动数据处理的时代开启
  • 阿兰·图灵(Alan Turing, 1936): 计算机科学与人工智能之父
  • 克劳德·香农(Claude Shannon, 1937): 信息论、数字计算机理论和数字电路设计理论的创始人
  • 约翰·冯·诺依曼(John von Neumann, 1945): 现代计算机与博弈论的重要创始人
  • 诺姆·乔姆斯基(Noam Chomsky, 1956): 生成语法是理论语言学研究上的重要贡献,建立了乔姆斯基层级
  • 道格拉斯·恩格尔巴特(Douglas Engelbart, 1963): 鼠标的发明者,所在小组是超文本系统、网络计算和图形用户界面的先驱
  • 马文·闵斯基(Marvin Minsky, 1963): MIT 人工智能实验室的创始人之一,奠定了人工神经网络的研究基础
  • 高德纳(Donald Knuth, 1968): 现代计算机科学先去,创造了算法分析的领域,在数个理论计算机科学的分支做出基石一般的贡献,《计算机程序设计艺术》,TEX 的发明人

未解决的问题(附录)

未解决的问题有很多,这里只列出我稍微了解的两类,真的是抛砖引玉,希望天才们来创造奇迹。

计算复杂性问题

这类问题比较抽象也偏数学,大部分是形如 P=NP 这样的问题,因为这部分我了解的不多,这里简单搬运一下维基的列表

  • P = NP 问题,可谓是信息论中的桂冠,但是至今无人摘下,是七个千禧年大奖(Millennium Prize Problems)难题之一(具体的问题可以在参考链接中找到)
  • NC = P 问题
  • NP = co-NP 问题
  • P = BPP 问题
  • P = PSPACE 问题
  • L = NL 问题
  • L = RL 问题
  • BQP 和 NP 的关系是什么
  • Unique Games Conjecture
  • 指数时间假说是真的吗
  • 单向函数存在吗(一个例子是,公钥加密算法可能吗)

算法问题

算法部分主要是跟乘法以及数论有关,这部分往往按照传统的方式计算复杂度较高,有很大的优化空间

  • 两个 n 位数相乘速度最快的算法是什么?这个涉及到 CPU 中运算器的实现
  • 矩阵乘法算法速度最快是什么?这个在许多图形相关以及向量相关的计算中都有涉及,但是现在想要提高一点点都很难
  • 可以在多项式时间内做质因数分解吗
  • 可以在多项式时间内计算离散对数吗
  • 可以在多项式时间内解决图同构问题吗
  • 可以在多项式时间内解决奇偶校验问题吗
  • 快速傅里叶变换算法的复杂度的上下限是什么
  • 可以在平方时间内解决 3SUM 问题吗
  • K 服务器问题
  • X + Y 排序能够在 $O(n^2log n)$ 时间内完成吗

穿插在各章节的有趣话题

各类键盘们

机械键盘、薄膜键盘、电容键盘、单手键盘、无刻印键盘、人体工学键盘、「和弦」键盘(Chorded Keyboard)、IBM Model M、Apple Extended Keyboard II、Matias Keyboard、HHKB、Das Keyboard、CODE Keyboard、黑轴、红轴、青轴、白轴、透明轴、Alps 轴、美式英语键位、英式英语键位、国际英语键位、德语键位、法语键位

静态网站生成器

  • 静态网站生成器是什么,为什么流行,效果如何
  • JekyII
  • JekyII Bootstrap
  • Octopress
  • Middleman
  • Pelican
  • Hyde
  • Hugo
  • Hexo

编辑器的战争

Emacs VS Vim

这俩背后的设计思想与计算机系统结合

其他选手:Sublime Text, TextMate, Chocolat, SciTE, UltraEdit, EditPlus, Notepad++, Atom, Acme, Eclipse, IntelliJ, NetBeans, Visual Studio, Visual Studio Code

字体战争

编程要用什么字体

  • San Francisco Font - Yosemite 系统字体
  • DIN 1451 字体
  • 德国车牌字体 FE-Schrift
  • Susan Kare
  • Monaco
  • Menlo
  • Input 字体
  • Consolas 字体
  • Source Code Pro 字体
  • PT mono 字体
  • PragmataPro 字体,专为编程设计的 ligature
  • AAnonymous Pro
  • DejaVu Sans Mono
  • Linux Libertine 系列字体
  • OCR A
  • 字体是可以和早期显示技术结合起来的,也非常有意思
  • 结合中文字体进行介绍

穿插在各章节的计算机名人名言

关于计算机科学的本质

Hal Abelson (1986) 在 SICP 的教学视频中所说的

[Computer science] is not really about computers – and it’s not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes…and geometry isn’t really about using surveying instruments. Now the reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought geometry was about surveying instruments: when some field is just getting started and you don’t really understand it very well, it’s very easy to confuse the essence of what you’re doing with the tools that you use.”


Richard Feynman 1970 年在关于计算的讲座上说:

Computer science… differs from physics in that it is not actually a science. It does not study natural objects. Neither is it, as you might think, mathematics; although it does use mathematical reasoning pretty extensively. Rather, computer science is like engineering; it is all about getting something to do something, rather than just dealing with abstractions, as in the pre-Smith geology.


Richard Hamming 1962 年在《科学家与工程师的数值方法》一书的前言中说:

The purpose of computing is insight, not numbers.

如何学习计算机

比尔盖茨和面试者的对话:

Interviewer: Is studying computer science the best way to prepare to be a programmer?

Bill Gates: No. the best way to prepare is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating system. You got to be willing to read other people’s code, then write your own, then have other people review your code. You’ve got to want to be in this incredible feedback loop where you get the world-class people to tell you what you’re doing wrong.

关于软件工程

Richard Hamming 在 1968 年的图灵奖获奖演说时说:

Without real experience in using the computer to get useful results the computer science major is apt to know all about the marvelous tool except how to use it. Such a person is a mere technician, skilled in manipulating the tool but with little sense of how and when to use it for its basic purposes.

Indeed, one of my major complaints about the computer field is that whereas Newton could say, “If I have seen a little farther than others, it is because I have stood on the shoulders of giants,” I am forced to say, “Today we stand on each other’s feet.” Perhaps the central problem we face in all of computer science is how we are to get to the situation where we build on top of the work of others rather than redoing so much of it in a trivially different way. Science is supposed to be cumulative, not almost endless duplication of the same kind of things.


David Wheeler 在 1993 年的图灵奖获奖演说时说(这是非常著名的一段话,被认为是软件工程的基础理论):

Any problem in computer science can be solved with another level of indirection.

关于编程

Joshua Bloch 在 Coders At Work 一书的访谈中说

The cleaner and nicer the program, the faster it’s going to run. And if it doesn’t, it’ll be easy to make it fast.


John Barnes 在《Programming in Ada》一书中说

Playing with pointers is like playing with fire. Fire is perhaps the most important tool known to man. Carefully used, fire brings enormous benefits; but when fire gets out of control, disaster strikes.


James Gleick 在其论文中说

Computer programs are the most intricate, delicately balanced and finely interwoven of all the products of human industry to date. They are machines with far more moving parts than any engine: the parts don’t wear out, but they interact and rub up against one another in ways the programmers themselves cannot predict.


C.A.R. Hoare 说

There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.


Donald Knuth 的经典语录之一

Premature optimization is the root of all evil.


Erik Naggum 说

Languages shape the way we think, or don’t.


Larry O’Brien 和 Bruce Eckel 在 Thinking in C# 一书中说:

Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends – commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours, but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see.


Sam Redwine 在一个 Workshop 中说:

Software and cathedrals are much the same – first we build them, then we pray.


Gerald M. Weinberg 在《计算机编程心理学》一书中说

Asking for efficiency and adaptability in the same program is like asking for a beautiful and modest wife. Although beauty and modesty have been known to occur in the same woman, we’ll probably have to settle for one or the other. At least that’s better than neither.


Edsger W. Dijkstra 说过不少有意思的话:

If debugging is the process of removing bugs, then programming must be the process of putting them in.

Testing can only prove the presence of bugs, not their absence.


Donald Knuth 老爷子关于调试的见解也别出心裁:

Beware of bugs in the above code; I have only proved it correct, not tried it.


Sidney Markowitz 真相了:

The last bug isn’t fixed until the last user is dead.

穿插在各章节的计算机科学趣事

冯诺依曼小传

熟悉计算机发展历史的人大都知道,美国科学家冯·诺依曼历来被誉为“电子计算机之父”.可是,数学史界却同样坚持认为,冯·诺依曼是本世纪最伟大的数学家之一,他在遍历理论、拓扑群理论等方面做出了开创性的工作,算子代数甚至被命名为“冯·诺依曼代数”. 物理学家说,冯·诺依曼在30年代撰写的《量子力学的数学基础》已经被证明对原子物理学的发展有极其重要的价值;而经济学家则反复强调,冯·诺依曼建立的经济增长横型体系,特别是40年代出版的著作《博弈论和经济行为》,使他在经济学和决策科学领域竖起了一块丰碑.

无论史学家怎样评价,美籍匈牙利裔学者约翰·冯·诺依曼(John Von Neumann , 1903-1957)都不愧为杰出的全才科学大师.人们至今还在津津乐道,这位天才人物的少年时代,竟请不到一位家庭教师……

事情发生在1931年匈牙利首都布达佩斯.一位犹太银行家在报纸上刊登启事,要为他11岁的孩子招聘家庭教师,聘金超过常规10倍.布达佩斯人才济济,可一个多月过去,居然没有一人前往应聘.因为这个城市里,谁都听说过,银行家的长子冯·诺依曼聪慧过人,3岁就能背诵父亲帐本上的所有数字,6岁能够心算8位数除8位数的复杂算术题,8岁学会了微积分,其非凡的学习能力,使那些曾经教过他的教师惊诧不已.

父亲无可奈何,只好把冯·诺依曼送进一所正规学校就读.不到一个学期,他班上的数学老师走进家门,告诉银行家自己的数学水平已远不能满足冯·诺依曼的需要.“假如不给创造这孩子深造的机会,将会耽误他的前途,”老师认真地说道,“我可以将他推荐给一位数学教授,您看如何?”

银行家一听大喜过望,于是冯·诺依曼一面在学校跟班读书,一面由布达佩斯大学教授为他“开小灶”.然而,这种状况也没能维持几年,勤奋好学的中学生很快又超过了大学教授,他居然把学习的触角伸进了当时最新数学分支——集合论和泛函分析,同时还阅读了大量历史和文学方面的书籍,并且学会了七种外语.毕业前夕,冯·诺依曼与数学教授联名发表了他第一篇数学论文,那一年,他还不到17岁.

考大学前夕,匈牙利政局出现动荡,冯·诺依曼便浪迹欧洲各地,在柏林和瑞士一些著名的大学听课.22岁时,他获瑞士苏黎士联邦工业大学化学工程师文凭.一年之后,轻而易举摘取布达佩斯大学数学博士学位.在柏林当了几年无薪讲师后,他转而攻向物理学,为量子 力学研究数学模型,又使自己在理论物理学领域占据了突出的地位.风华正茂的冯·诺依曼,靠着顽强的学习毅力,在科学殿堂里“横扫千军如卷席”,成为横跨“数、理、化”各门学科的超级全才.

“机遇只偏爱有准备的头脑”.1928年,美国数学泰斗、普林斯顿高级研究院维伯伦教授(O.Veblen)广罗天下之英才,一封烫金的大红聘书,寄给了柏林大学这位无薪讲师,请他去美国讲授“量子力学理论课”.冯·诺依曼预料到未来科学的发展中心即将西移,欣然同意赴美国任教.1930年,27岁的冯·诺依曼被提升为教授;1933年,他又与爱因斯坦一起,被聘为普林斯顿高等研究院第一批终身教授,而且是6名大师中最年轻的一名.

在冯·诺依曼的一些同事眼里,他简直就不象是我们这个地球上的人.他们评价说:“你看,琼尼的确不是凡人,但在同人们长期共同生活之后,他也学会了怎样出色地去模仿世人.”冯·诺依曼的思维极快,几乎在别人才说出头几句话时,就立即了解到对方最后的观点.天才出自于勤奋,他差不多天都工作到黎明才入睡,也常常因刻苦钻研而神魂颠倒,闹出些小笑话来.
据说有一天,冯·诺依曼心神不定地被同事拉上了牌桌.一边打牌,一边还在想他的课题,狼狈不堪地“输掉”了10元钱.这位同事也是数学家,突然心生一计,想要捉弄一下他的朋友,于是用赢得的5元钱,购买了一本冯·诺依曼撰写的《博奕论和经济行为》,并把剩下的5元贴在书的封面,以表明他 “战胜”了“赌博经济理论家”,着实使冯·诺依曼“好没面子”.

另一则笑话发生在ENIAC计算机研制时期. 有几个数学家聚在一起切磋数学难题,百思不得某题之解.有个人决定带着台式计算器回家继续演算.次日清晨,他眼圈黑黑,面带倦容走进办公室,颇为得意地对大家炫耀说:“我从昨天晚上一直算到今晨4点半,总算找到那难题的5种特殊解答.它们一个比一个更难咧!”说话间,冯·诺依曼推门进来,“什么题更难?”虽只听到后面半句话,但“更难”二字使他马上来了劲.有人把题目讲给他听,教授顿时把自己该办的事抛在爪哇国,兴致勃勃地提议道:“让我们一起算算这5种特殊的解答吧.”

大家都想见识一下教授的“神算”本领.只见冯·诺依曼眼望天花板,不言不语,迅速进到“入定” 状态.约莫过了5分来钟,就说出了前4种解答,又在沉思着第5种…….青年数学家再也忍不住了,情不自禁脱口讲出答案.冯·诺依曼吃了一惊,但没有接话茬.又过了1分钟,他才说道:“你算得对!”
那位数学家怀着崇敬的心情离去,他不无揶揄地想:“还造什么计算机哟,教授的头脑不就是一台‘超高速计算机’吗?”然而,冯·诺依曼却呆在原地,陷入苦苦的思索,许久都不能自拔.有人轻声向他询问缘由,教授不安地回答说:“我在想,他究竟用的是什么方法,这么快就算出了答案.”听到此言,大家不禁哈哈大笑:“他用台式计算器算了整整一个夜晚!”冯·诺依曼一愣,也跟着开怀大笑起来.

冯·诺依曼对科学做出的最大贡献当然是在计算机领域.

1944年仲夏的一个傍晚,戈德斯坦来到阿贝丁车站,等候去费城的火车,突然看见前面不远处,有个熟悉的身影向他走过来.来者正是闻名世界的大数学家冯·诺依曼.天赐良机,戈德斯坦感到绝不能放过这次偶然的邂逅,他把早已埋藏在心中的几个数学难题,一古脑儿倒出来,向数学大师讨教.数学家和蔼可亲,没有一点架子,耐心地为戈德斯坦排忧解难.听着听着,冯·诺依曼不觉流露出吃惊的神色,敏锐地从数学问题里,感到眼前这位青年身边正发生着什么不寻常的事情.他开始反过来向戈德斯坦发问,直问得年轻人“好像又经历了一次博士论文答辩”.最后,戈德斯坦毫不隐瞒地告诉他莫尔学院的电子计算机课题和目前的研究进展.

冯·诺依曼真的被震惊了,随即又感到极其兴奋.从1940年起,他就是阿贝丁试炮场的顾问,同样的计算问题也曾使数学大师焦虑万分.他急不可耐地向戈德斯坦表示,希望亲自到莫尔学院看一看那台尚未出世的机器.多年后,戈德斯坦回忆说:“当琼尼看到我们正在进行的一件工作时,他就双脚跳到电子计算机旁”.

莫契利和埃克特高兴地等待着冯·诺依曼的来访,他们也迫切希望得到这位著名学者的指导,同时又有点儿怀疑.埃克特私下对莫契利说道:“你只要听听他提的第一个问题,就能判断出冯·诺依曼是不是真正的天才”.
骄阳似火的8月,冯·诺依曼风尘仆仆地赶到了莫尔学院的试验基地,马不停蹄约见攻关小组成员.莫契利想起了埃克特的话,竖着耳朵聆听数学大师的第一个问题.当他听到冯·诺依曼首先问及的是机器的逻辑结构时,不由得对埃克特心照不宣地一笑,两人同时都被这位大科学家的睿智所折服!从此,冯· 诺依曼成为莫尔学院电子计算机攻关小组的实际顾问,与小组成员频繁地交换意见.年轻人机敏地提出各种设想,冯·诺依曼则运用他渊博的学识把讨论引向深入,逐步形成电子计算机的系统设计思想.冯·诺依曼以其厚实的科技功底、极强的综合能力与青年们结合,极大提高了莫尔小组的整体水平,使莫尔小组成为“人才放大器”,至今依然是科学界敬慕的科研组织典范.

人们后来把“电子计算机之父”的桂冠戴在冯·诺依曼头上,而不是第一台电脑的两位实际研制者,这并不是没有根据的.莫契利和埃克特研制的ENIAC计算机获得巨大的成功,但它最致命的缺点是程序与计算两分离.指挥近2万电子管“开关”工作的程序指令,被存 放在机器的外部电路里.需要计算某个题目前,埃克特必须派人把数百条线路用手接通,像电话接线员那样工作几小时甚至好几天,才能进行几分钟运算.

在ENIAC尚未投入运行前,冯·诺依曼就已开始准备对这台电子计算机进行脱胎换的改造.在短短10个月里,冯·诺依曼迅速把概念变成了方案.新机器方案命名为“离散变量自动电子计算机”,英文缩写EDVAC.1945年6月,冯·诺依曼与戈德斯坦等人,联名发表了一篇长达101页纸洋洋万言的报告,即计算机史上著名的“101页报告”.这份报告奠定了现代电脑体系结构坚实的根基,直到今天,仍然被认为是现代电脑科学发展里程碑式的文献.

在EDVAC报告中, 冯·诺依曼明确规定出计算机的五大部件: 运算器CA、 逻辑控制器CC、存储器M、输入装置I和输出装置O,并描述了五大部件的功能和相互关系.与ENIAC相比,EDVAC的改进首先在于冯·诺依曼巧妙地想出“存储程序”的办法,程序也被他当作数据存进了机器内部,以便电脑能自动一条接着一条地依次执行指令,再也不必去接通什么线路.其次,他明确提出这种机器必须采用二进制数制,以充分发挥电子器件的工作特点,使结构紧凑且更通用化.人们后来把按这一方案思想设计的机器统称为“诺依曼机”.

自冯·诺依曼设计的EDVAC计算机始,直到今天我们用“奔腾”芯片制作的多媒体计算机为止,电脑一代又一代的“传人”,大大小小千千万万台计算机,都没能够跳出“诺依曼机”的掌心.冯·诺依曼为现代计算机的发展指明了方向,从这个意义上讲,他是当之无愧的“电子计算机之父”.当然,随着人工智能和神经网络计算机的发展,“诺依曼机”一统天下的格局已经被打破,但冯·诺依曼对于发展电脑做出的巨大功绩,永远也不会因此而泯灭其光辉!

第二次世界大战结束后,由于种种原因,ENIAC研制小组发生令人痛惜的分裂,“内存程序”的机器无法被立即研制.冯·诺依曼、戈德斯坦和勃克斯三人返回了新泽西州普林斯顿大学.1946年,他们为普林斯顿高级研究院先期研制出新的IAS计算机(IAS即高级研究院英文缩写).

冯·诺依曼的归来,在普林斯顿掀起了一股强劲的电脑热.一向冷冷清清的研究院沸腾了,大批专业人才仰慕他的大名,纷至沓来,使普林斯顿高级研究院一时间成为美国电子计算机的研究中心. 冯·诺依曼乘热打铁,着手将他那101页计算机方案付诸实施.1951 年,这台凝聚着他多年心血的EDSAC计算机终于面世,程序储存在机器内部后,效率比ENIAC提高数百倍,只用了3563个电子管和1万只晶体二极管,以1024个水银延迟线来储存程序和数据,消耗电力和占地面积亦只有ENIAC的三分之一.

在冯·诺依曼研制ISA电脑的期间,美国涌现了一批按照普林斯顿大学提供的ISA照片结构复制的计算机.例如,洛斯阿拉莫斯国家实验室研制的MANIAC,伊利诺斯大学制造的ILLAC.雷明顿·兰德公司科学家沃尔(W. Ware)甚至不顾冯·诺依曼的反对,把他研制的机器命名为JOHNIAC(“约翰尼克” ,“约翰”即冯·诺依曼的名字).冯·诺依曼的大名已经成为现代电脑的代名词.

在普林斯顿,冯·诺依曼还利用计算机去解决各个科学领域中的问题.他提出了一项用计算机预报天气的研究计划,构成了今天系统的气象数值预报的基础;他受聘担任IBM公司的科学顾问,帮助该公司催生出第一台存储程序的电脑IBM 701;他对电脑与人脑的相似性怀着浓厚的兴趣,准备从计算机的角度研究人类的思维;他虽然没有参加达特默斯首次人工智能会议,但他开创了人工智能研究领域的数学学派;他甚至是提出计算机程序可以复制的第一人,在半个世纪前就预言了电脑病毒的出现……

1957年2月8日,冯·诺依曼身患骨癌,甚至没来得及写完那篇关于用电脑模拟人类语言的讲稿,就在美国德里医院与世长辞,只生活了 54个春秋.他一生获得了数不清的奖项,包括两次获得美国总统奖,1994年还被追授予美国国家基础科学奖.他是电脑发展史上最有影响的一代伟人.


一个学生在走廊上碰上诺依曼,顺便就问了个问题:

S: 呃,打扰一下,冯·诺依曼教授,您能帮我解答一下这个分析问题吗?
N: 好吧小子,最好快点,我很忙。
S: 我不太懂这个积分…
N: 我们来看看 (短暂的思考后) 好了小子,结果是2π/5。
S: 答案我都知道,老师,但我不懂怎么推导出来。
N: 好吧,我再看看 (又一次思考后)答案是2π/5。
S: (沮丧的说)诶,老师,我知道答案,就是不明白该怎么推导。
N: 你还想怎样嘛小子,我都用了两种方法做了!


第二则是保罗·哈尔莫斯讲的

“有个著名的苍蝇问题,两人骑车从相距20英里的两地相向行驶,两人均保持稳定的10英里时速,一只苍蝇以15英里的速度从一辆车前轮飞向另一辆车轮前轮,飞到时再折返,直到被两车前轮挤扁。

问题是:这只苍蝇一共飞行了多长距离?(这个中国学生都会)

笨办法是算出第一段从一车轮到另一车轮距离,再算下一段,以此类推,最后全都加起来。

聪明的办法是注意到两个自行车从开始到相遇一共用时1小时,所以苍蝇也飞了1小时,距离就是15英里。”

当这个问题抛给冯·诺依曼的时候,他立即解答出来了,还显得对提问者很失望。

“噢,你一定早知道这个题的技法了!”

“什么技法?” 冯·诺依曼问道,“我就是做了无穷数列求和而已。”

关于编程语言的名字

世界上第一个可编程的机器是由法国人Joseph Marie Jacquard于1801年发明的雅卡尔织布机,使用打孔卡片进行编程,控制织布机织出不同图案的布,图片来自维基百科。

英国诗人拜伦的女儿、数学家Ada Lovelace描述了一个计算伯努利数的算法和程序,被认为是最早的计算机程序,并被尊为第一位程序员。但是,1815年才出生的她,不可能比上一则说的Jacquard更早地进行编程工作。后来美国国防部组织开展研发的Ada语言以这位女数学家的名字命名。

我们一般认为1957年发明的Fortran是世界上第一门高级编程语言,而实际上早在1942至1945年,发明了世界上第一台图灵完全的通用数字计算机Z3的德国工程师Konrad Zuse还研发了一种叫作Plankalkül的语言。可惜的是,Z3在1944年柏林轰炸中被炸毁,Plankalkül在战争结束前既没有正式发表,也没有被实现。这门语言的设计一直到了1972年才被正式发表出来,而1998年第一个该语言的编译器才首次被实现。这门语言对后世的编程语言设计几乎没有任何影响,但是它却考虑了包括赋值语句、子程序、条件判断、循环、浮点小数计算、数组、拥有层次结构的结构体、断言、异常处理、结果导向执行(注:书上写作目标搜寻,英文似乎是goal-directed execution)等后来许多语言都不具有的功能,这些设计在当时以及之后的很长一段时间内都是非常具有先进性的。

著名计算机科学家、图灵奖得主John McCarthy于1958年发明了LISP语言,但是LISP这种迥异于其他语言的表达方法S-expression并不是他原本的设计,John McCarthy原本设计了一种叫作M-expression的表达方法,而S-expression则是一种中间语言。令他万万没有想到的是,最后流行开的是那个中间语言S-expression。另外LISP具备垃圾回收、异常处理等后来高级语言的许多特性,也是一门很先进的语言。

Guido van Rossum喜欢看喜剧团体Monty Python,所以发明了一个编程语言叫作Python。同样的,Python自带的那个IDE,IDLE名字来源于该团体的成员Eric Idle。此外,用来表示垃圾邮件的单词spam也是出自Monty Python这部作品,而这个单词在剧中指的是Spam品牌的午餐肉。

编程语言Perl的名字来源于珍珠Pearl,发明者Larry希望给语言起一个简短而有积极含义的名称。受到这个影响,松本行弘在发明Ruby的时候也从珠宝中选择名字,并且选择了Ruby。松本还提到,Ruby还跟诞生石(birthstone)有关,可是生于4月的松本行弘为什么选择了七月份出生的同事的诞生石红宝石呢,一定是好基友啊。

JavaScript的命名还真跟Java有关,所以他们不是雷锋和雷峰塔的关系,更像是印度和印度尼西亚的关系。Netscape希望这是一个Java的客户端版本,一种轻型的脚本语言,并且不像Java和C++那样针对专业的开发人员。

Lua的意思是月亮女神,是由三个巴西人Roberto Ierusalimschy、Waldemar Celes、Luiz Henrique de Figueiredo发明。发明的原因是巴西石油公司(当然,是一个国企)PETROBRAS没办法使用指定的硬件,使用公众的资金需要通过一系列的严格手续,并且现有设备中什么平台什么系统都有,所以Lua被设计成一个基于ANSI C开发可以任意跨平台的语言。

Smalltalk现在已经很难见到,但是他影响了我们今天还在使用的许许多多语言,以及后来的所有面向对象编程语言的开发者。

Brainfuck是一门奇葩编程语言,由Urban Müller发明,只有8种符号,语言本身难懂,但是他是图灵完全的,也就是你用C、Java或者Haskell实现的算法都能用brainfuck来实现。这门语言除了高效也并不是完全没有用,用来学习和理解图灵机,以及作为编程习题,都是挺不错的。

Whitespace。好吧,这门语言更奇葩了,使用空格和制表符(TAB)的交替组合来表示程序,其他字符全部是注释,也就是能看得见的内容全是注释。

编程语言Haskell的名字来源于逻辑学家Haskell Curry,他提出的柯里化(currying)是一种把多元函数变成若干个一元函数的嵌套的方法,使得形式语义学里面,研究lambda演算可以只针对一元的lambda演算进行,然后通过currying推广。Haskell Curry的厉害之处在于一帮人为了纪念他搞出了Haskell语言,而另一帮人为了纪念他又搞出了Curry语言。

现在iOS开发者所使用的、在现在大红大紫的Objective-C,是一个和C++同岁的语言,都是早期对C语言进行拓展的面向对象编程的开拓者。不过iOS上使用的Objective-C 2.0,跟Objective-C的作者Brad Cox没有一点关系,“除了我喜欢Apple的产品以外,我同他们没有什么关系”。

Unix 与 C 语言诞生的故事

当年肯·汤普森为MULTICS操作系统写了一个叫space travel的游戏。你猜在这破烂系统上运行这玩意要多少开销?

75美元,每次。

Are u kidding me!?老子写个游戏自娱自乐,玩一次得花75美元!?现在你知道MULTICS为什么流产了吧。

离开这个项目后,汤姆森还在惦记着他的space travel(显然不MULTICS)。MULTICS是工作,space travel可以自己玩不是。可是想玩space travel没操作系统啊,没办法只好自己写一个(在没有轮子的时代发明轮子并不是错)。

接下来的事情大家都知道了,汤普森喊上了丹尼斯·里奇,哥俩花了一个月时间用汇编写出了一操作系统。贝尔实验室里的一个同事嘲笑汤普森说,你们这个OS这么烂,干脆叫UNIX得了。

后来两人想在不同的机器玩游戏,不过用汇编写的UNIX移植性太差。难道我们每换台计算机就得重写操作系统,只为了玩个space time?他俩试着用Fortran语言重写,效果不怎么样,又换了BCPL语言,还是不咋地。于是俩哥们把BCPL一整合,顺手发明了B语言。里奇还是不满意,觉得B语言性能很杯具,着手进一步改进B语言,于是发明了C语言。

用C语言重写第三版内核之后,UNIX基本成型了。

汤普森和里奇两位哥为了玩个游戏发明了UNIX,顺手发明了B语言和C语言,这是我看过最美妙的八卦之一。

顺便说一句,那个给UNIX起名的哥们叫布来恩·克尼汉。

卡马克的故事

美国著名游戏公司id software曾经推出大名鼎鼎的《雷神之锤》系列与《毁灭战士》系列。该公司技术带头人约翰-卡马克(John Carmack)在计算机图形图像技术方面颇有建树,在工作生活中也堪称奇人一个。

  1. 卡马克编程全神贯注是出了名的。创业初期,朋友在戏弄他,在他面前播放成人影片以测试他的专注力。播放2分钟后,卡马克才发现有人放成人影片。他的反应是:哦一声,继续编程。
  2. 卡马克坚持黑客精神,可能是最早支持源代码的重要程序员。他开放了《毁灭战士》等游戏的引擎代码,大大推动了图形图像技术的发展。
  3. 卡马克支持游戏demo,开放游戏修改权,支持玩家修改游戏,这对互动游戏领域有积极的影响。dota的诞生,映照着卡马克的开放精神。
  4. 比尔-盖茨曾经想收购卡马克的公司,让卡马克为他工作。结果卡马克拒绝了。
  5. 卡马克数学能力惊人,他曾经去赌城赌钱,全靠脑力算牌,结果赢了很多。赌场不得不叫保安把卡马克带出去。后来卡马克把赢来的钱捐给慈善机构。

Paul Allen 写 Basic 的引导程序

1975年,艾伦和盖茨给Altair 8800计算机写了个BASIC解释器卖给MITS,他们很快完成了解释器,甚至包括自己的IO系统和编辑器,一共只需要4k内存。 不过最后他们发现还需要一个引导程序将这些东西从外存整进去。

Paul Allen在飞机航班上完成了这项工作。
这是1975年,没有笔记本。
他用的是纸笔。
写的是8080机器码。。。

高德纳趣事

Donald Knuth,他很喜欢中国文化,有一个中国名字叫高纳德,他找人做了一个中文的印章,放在自己的网站上。因为这个名字,在计算机科学这个领域的中国人喜欢叫他高老头。

高老头现在是斯坦福大学的退休教授,关于这一点后面还要接着八。他在斯坦福任教的时候,人不总是有三急么,斯坦福教室楼里的厕所,都是那种一个坑旁边有两卷卫生纸的(我在这里也经常见到)。老高去上厕所,一来二去也琢磨出来点道道。具体说,就是对于这种两卷卫生纸并排的情况,如何做调度的算法,算法的目的是计算两卷同时没纸的概率(估计老高是遇到过这种情况才会想到这个算法的)。就这样,他写了一篇论文,论文投到计算机方面最有名的一个杂志去,很快就收到了修改意见,杂志的编辑认为这篇论文的内容很不错,可是就是“厕所”用语实在太多,要求他必须删除所有的厕所用语。老高很不情愿的把文中的厕所用语都删除了,但是留下标题里的厕纸,死活也不愿意改。他想了一个主意,给编辑回信说,这个标题他不能改,因为相关题目他已经用来在很多地方做了报告,大家都知道了,再改掉反而会让人不知所云。于是这个杂志历史上出现了唯一一篇“论厕纸的使用”。

这是以前八卦过的,现在先说说高老头的生平。高老头在Case Institute of Techonology(不是加州理工California Institute of Techonology)本科毕业,不过这里说本科毕业不合适。实际上,老高在Case Institute of Techonology毕业的时候,因为成绩实在太好,学校决定打破常规,历史上唯一一次同时授予他本科和硕士的学位。之后他在加州理工数学系拿的博士学位,28岁进斯坦福当老师,30岁终身教授。

31岁的时候,他决定开始写一部关于算法的巨著。高纳德是个很有浪漫思想的人,他认为计算机科学是一种艺术,关于要写的这套书,他想得也很清楚,要象罗曼.罗兰写约翰.克利斯朵夫那样,把他写成一部巨著。计划是写七部,书的名子就叫做“计算机编程艺术” 《The Art of Computer Programming》。在计算机界,这本书一般简称为TAOCP,其中前三个字母正好凑成“道”(就是老子《道德经》里的道)的英文翻译,所以我总是情不自禁的把这套书称做编程之道。

TAOCP本来打算是出七卷,现在已经写完了三卷,但是老高才出了这三卷就已经轰动世界,书里提供了太多令人拍案惊奇的算法。因为这三卷书的出版,老高获得了计算机科学领域的最高奖图灵奖。

老高还有一个著名的贡献,说起来有趣,是为了写这套书而得到的副产品。他发现地球上居然没有一个好用称手的排版软件,就自己动手写了一个,软件他起名叫TeX。TeX是目前世界上专业文献排版领域应用最广泛的软件,后来有人为TeX写了各种宏包。在科学领域最有名的就是LaTeX。TeX/LaTeX在公式处理方面的专业与高效是Word不可比拟的。现在基于TeX的各种宏包可以很专业的显示各种数学公式,费曼图,化学式,图表,棋谱。比如在LaTeX 中,可以处理中国象棋,国际象棋,围棋,五线谱。其实实话说,我在听说TAOCP之前,还以为老高是因为TeX得的图灵奖。为了写这个TeX软件,老高发明了一种字体描述语言MetaFont,这成了排版行业的事实标准。

在TAOCP里,老高不知道是出于什么心态,所有的程序和算法,既不是用C/C++,也不是用Pascal之类。为了描述他的算法,他用的是“汇编”!!而且这里用的汇编,既不是pc的汇编,也不是用的苹果的汇编,而是他根据十几种体系结构,自己创立的一种虚拟汇编语言。

斯坦福大学给老高的教授加了好几个头衔,不过他最喜欢的头衔是Professor of Art of Computer Science,他虽然享尽了计算机科学界几乎一切荣誉,但是却很早就退休了。原因是他想专心写好后面几卷的TAOCP。

忘了提了,Knuth得图灵奖的时候36岁,是迄今为止最年轻的图灵奖得主,而且很可能以后这个纪录也没人打破。

高老头的一些有趣约定:

发现TeX软件第一个bug(就是程序中出现的错误),他就给一美元,发现第二个bug,他给两美元,第三个给四美元,依次翻番。实际上后来几乎很难有人再找到bug,他把属于排版方面的专业规范问题也算bug。这个奖金现在翻到了一千多,不过已经很长时间没有人领了。

因为提前退休,他一共只带过二十多个博士生,不能不说是一种遗憾。不过他有一个约定,就是说他会在各种讲座和报告上不时提出一些难题,解决了这些难题的人,他会在他们的博士论文上签字(相当于名誉导师)


传说 Knuth 写书写文章的第一稿都是用铅笔写的。很多人不明白他为什么不用键盘。其实原因是这样,Knuth 曾经参加过一个训练小秘的学习班,练习打字每分钟 80 个词以上。

到了后来,他发现他打字的速度大大高于他思考的速度,所以如果他用键盘,就会出现很多停顿。所以他决定用铅笔,这样可以与读者的思考速度保持一致。


他其实觉得“计算机科学”不是科学。虽然大家很希望计算机编程变成科学,这是某ACM刊物提出的忠旨。但是 Knuth 觉得奇怪为什么大家这么喜欢科学,以致于他们瞬间把程序设计变成了科学,方法就是叫它“计算机科学”。

Just call it “Computer Science”

在他眼里,计算机科学其实仍然是门艺术。

在 Knuth 的眼里,科学与艺术有什么区别呢?艺术是人创造的,而科学不是。艺术永远是可以无止境的提高的,而科学不是。艺术需要天赋才能掌握,而科学不需要,按部就班就行。


Knuth 很推崇随机算法。

他批改作业时,一般都是翻到随机一页,仔细看那一页,
之后就对学生的作业有了一个概貌,其它的部分就看的不那么仔细了。

Knuth 看书的时候首先看第316页,如果书很短就看第100页。仔细看那一页。之后他就可以说那本书好不好。据说这样做出判断的正确率很高。

不知道是否有很多人跟他学,看316和100.以后写书要注意把第316页或者100页写好呀!

第一台计算机之争

关于ENIAC和ABC谁是世界第一台电子数字计算机的争论吧,

这个争论已经持续了数十年。这并不是上述两台计算机的发明者之间的争论,而是上世纪60年代两个公司之间关于ENIAC专利权的诉讼官司而引发的。

1967年初,拥有ENIAC专利权的斯佩里兰德公司(Sperry Rand Corporation)向霍尼韦尔公司(Honeywell Company)收取计算机制造的专利使用费,但是遭到了后者的拒绝,于是斯佩里兰德公司将霍尼韦尔公司告上法庭。霍尼韦尔公司之所以拒绝支付专利使用费,是由于他们认为ENIAC的专利有问题,于是他们在明尼阿波利斯(Minneapolis)地方法院反告斯佩里兰德公司违反了“反托拉斯法”(Antitrust legislation)而执行了一条无效的专利。他们请阿塔那索夫出庭作证,证明ENIAC的设计原理是源自ABC的。在法庭上,阿塔那索夫陈述了1937年冬天他在小酒馆产生灵感,如何依据那些新思路设计电路,以及后来与贝利共同研制ABC的过程。他还用许多当年的相关资料证明,1941年6月莫克利曾经拜访过他,参观了当时已接近完成的ABC,并且参看了设计图纸和许多资料。他向莫克利解释了二进制系统原理、线性联立方程的解决过程、ABC的定时和同步机制、电容存储器和读数据装置、自动处理电路和装置以及逻辑电路原理等等,ENIAC的设计原理是与ABC基本相同的。

当莫克利作为斯佩里兰德公司的证人出庭时,他的证词含糊不清,虽然承认其参观过ABC,但只是在微弱昏暗的灯光下看到了被遮盖着的ABC。同时对于阿塔那索夫所说的参看过设计图纸和资料细节,莫克利则矢口否认。但是当他不小心认出一张拍摄于1941年的ABC的照片时,他不得不推翻之前的说法,承认见过ABC的全貌和细节。不过莫克利仍然坚持称自己在参观完这台机器后没有从中学到丝毫新的电子数字计算方面的东西。而且,他认为ABC不同于ENIAC的地方是:ABC是用途特殊的,只是为解决线性联立方程而设计的;而ENIAC是则通用的,基于多功能的设计思想。

1973年10月19日,法官拉森当庭宣布这场“世纪审判”的终审结果:“埃克特和莫克利不是第一台电子数字计算机的发明人,他们的设计来源于阿塔那索夫的发明。”(Eckert and Mauchly did not themselves first invent the automatic electronic digital computer, but instead derived that subject matter from one Dr. John Vincent Atanasoff.)

至此,这场持续了6年,开庭135次,传讯了77个证人,采集了80份书面证词的美国历史上最旷日持久的案件终于落下帷幕。斯佩里兰德公司败诉,ENIAC的专利权被判无效。阿塔那索夫因此被人们称作“真正的电子计算机之父”。尽管如此,由于判决公布时所有媒体的注意力都被称作“水门事件”(Watergate scandal)的政治风暴所吸引,这个科学界极其重大的消息只刊登于各大报纸杂志的很不起眼的版面和位置,竟被人们忽视。

关于这个历史争论的庭审早已尘埃落定,但新的资料和证据却仍被挖掘和发现(据报道,莫克利的遗孀在1984年发现了莫克利20世纪30年代的一些信件、图纸和电路,进一步证明了莫克利在接触阿塔那索夫以前,就已开始了有关研究,提出了他自己的设想和方案,从而导致ENIAC的问世),争论的声音一直在历史的走廊中回响。

海蒂拉玛

女性贡献

她有两个为人熟知的身份:

演员,出演过世界上最早的裸体电影,拒绝出演过《北非谍影》;

发明家,美国发明家名人堂成员,展布频谱技术的共同发明人

第一人丈夫是奥地利知名军火商,常与希特勒、墨索里尼等打交道。

在丈夫弹钢琴的时候想到可以通过改变无线电信号频率来改变信号。

在美国专利局获得了名为秘密通信系统的专利,并放弃商用,将技术交给政府。这项专利日后在CDMA、Wi-Fi的发展中,发乎了很大作用。

Dijkstra 小传

Dijkstra 的全名叫 Edsger Wybe Dijkstra(艾兹赫尔·韦伯·戴克斯特拉)。大部分中国程序员如果能记住这个名字是因为学过计算最短路径的「Dijkstra 算法」,然而大部分人都难以记住正确的拼写,因为他是荷兰人,名字不符合英语的发音规则。

他是几位影响力最大的计算科学的奠基人之一,也是少数同时从工程和理论的角度塑造这个新学科的人。他的根本性贡献覆盖了很多领域,包括:编译器、操作系统、分布式系统、程序设计、编程语言、程序验证、软件工程、图论等等。他的很多论文为后人开拓了整个新的研究领域。我们现在熟悉的一些标准概念,比如互斥、死锁、信号量等,都是 Dijkstra 发明和定义的。1994 年时有人对约 1000 名计算机科学家进行了问卷调查,选出了 38 篇这个领域最有影响力的论文,其中有五篇是 Dijkstra 写的。

Dijkstra 在鹿特丹长大。在高中毕业前他想在法学界发展,并且希望将来能在联合国做荷兰的代表。然而因为他毕业时数学、物理、化学、生物都是满分,老师和父母都劝他选择科学的道路,后来他选择学习理论物理。在大学期间,世界上最早的电子计算机出现了,他父亲让他到剑桥大学参加一个程序设计的课程。从这里开始,他的程序设计生涯开始了。一段时间以后他决定转向计算机程序设计,因为他认为相对于理论物理,程序设计对智力是更大的挑战。程序设计是最无情的,每一个一和零都容不得差错。

后来他在阿姆斯特丹的数学中心成为了一个兼职的程序员。他的工作是为一些正在被设计制造的计算机编写程序,也就是说他要用纸和笔把程序写出来,验证它们的正确性,和负责硬件的同事确认需要的指令是可以被实现的,并写出计算机的规范说明。他为并不存在的机器写了五年程序,因此他很习惯于不测试自己写的程序,因为无法测试。这意味着他必须通过推理说服自己程序是正确的,这种习惯可能是他后来经常强调通过程序结构保证正确性易于推理的原因。他曾经被后来出现的实时中断困扰了一阵子,因为中断随时可能发生,让证明程序的正确性变得复杂了很多。他的博士论文就是关于一个他写的实时中断处理程序。

在他决定成为一个程序员后,他尽快完成了学业,因为以他的话说,他在大学里不再受欢迎了:物理学家们觉得他是逃兵,而数学家们也看不起他和他做的事,因为在当时的数学文化里,你的课题必须和 ∞ 有关才会受尊重。那个时候程序设计没有成为一个职业,没有人能说出这个行业的基础知识体系是什么,而这些都会被 Dijkstra 改变。1957 年,他结婚的时候在申请的职业一栏写上了「程序员」,结果被政府拒绝,因为当时荷兰没有这个职业。

在一台新的叫 ARMAC 的计算机发布之前,Dijkstra 需要想出一个可以让不懂数学的媒体和公众理解的问题,以便向他们展示。有一天他和未婚妻在阿姆斯特丹购物,他们停下来在一家咖啡店的阳台上喝咖啡休息,他开始思考这个问题。他觉得可以让计算机演示如何计算荷兰两个城市间的最短路径,这样问题和答案都容易被人理解。于是他在 20 分钟内想出了高效计算最短路径的方法。Dijkstra 自己也没有想到这个 20 分钟的发明会成为他最著名的成就之一,并且会被以他的名字命名为 Djikstra 算法。三年以后这个算法才首次发布,但当时的数学家们都不认为这能成为一个数学问题:两点之间的路径数量是有限的,其中必然有一条最短的,这算什么问题呢?在之后的几十年里,直到今天,这个算法被广泛应用在各个行业。Djikstra 的眼科医生一直不知道他是做什么的,有一天突然问他:「是你发明了 GPS 导航的算法吗?」。一问之下,原来他读了 2000 年 11 月的科学美国人杂志,讲 GPS 的文章里说到了 Djikstra。

Dijkstra 后来在采访中说,他的最短路径算法之所以能如此简洁,是因为当时在咖啡店里没有纸和笔,这强迫他在思考时避免复杂度,尽可能追求简单。在他的访谈和文章中,经常能发现一个主题,就是资源的匮乏往往最能激发创造性。

Dijkstra 第一次美国之行给他留下了深刻印象。在 1963 年时他已经小有名气,ACM 邀请他参加了一次在普林斯顿的会议,这也是他第一次和 Donald Knuth 会面。第一个演讲者是一个来自 IBM 的人,Dijkstra 发现他完全听不懂这个人讲的内容,也不理解写满了整个黑板的公式,而很多其他听众都积极提出问题并参与讨论。在茶歇的时候他对其他人表达了担忧,认为自己可能不适合参加这个会议,美国的参会者告诉他「哦,不必担心。其实大家都听不懂他说什么。但是这次会议是 IBM 赞助的,所以得让他们先上台,而且不能冷场。」Dijkstra 后来似乎一直对 IBM 不太感冒。IBM 的 System/360 大型机发布后,他花了一些时间阅读 360 的手册,他把这段时间描述为「我职业生涯中最黑暗的一周」。后来苏联决定建造和 360 完全兼容的计算机,Dijkstra 在一次会议上说「这是美国在冷战中最大的胜利」。

之后 Dijkstra 进入了学术上最活跃的时期,他解决了多个图论算法问题,他发表的关于并发程序控制的论文开创了分布式计算和并发计算的领域,他也首先定义了互斥和死锁并提出了解法。他和 Jaap Zonneveld 一起写了第一个 ALGOL 60 的编译器,这是最早支持递归的编译器。他们约定项目结束前都不许刮胡子,Zonneveld 在结束后很快剃掉了胡子,而 Dijkstra 从此终身留着胡子。

1960 年代后期,由于计算机变得越来越强大,程序设计和维护的方式跟不上软件复杂度的快速上升,世界进入了「软件危机」。Dijkstra 在 ACM 的月刊上发表了一篇名为 GOTO Statement Considered Harmful 的文章为全世界的程序员们指明了方向,这就是结构化程序设计运动的开始。他和 Hoare、Dahl 合著的《结构化程序设计》成为了这次软件史上第一次变革的纲领,影响了此后大部分程序设计语言,包括 70、80 后程序员熟悉的 C 和 Pascal。很多大学的第一门程序设计课就是以这本书的名字作为课程名。

在分布式计算方面,除了定义前面提到的互斥、死锁等并发控制的基础概念和问题,他还开创了自稳定系统这个子领域,并且是最早对容错系统进行研究的人。我自己的 Ph.D. 论文就属于对自稳定系统的研究。分布式计算最权威的会议是 PODC,而 Leslie Lamport 曾经评价到,PODC 之所以存在就是因为 Dijkstra。「PODC 影响力论文奖」是分布式计算领域最高的荣誉,它认可的是经过时间考验的重要成就。我自己的导师 Michael Fischer 和 Nancy Lynch、Michael Paterson 一起在 2001 年获奖。2002 年,Dijkstra 去世,这一年的 PODC 奖颁给了他,获奖论文是他 1974 年关于自稳定系统的论文。为了纪念他,PODC 决定从 2003 年把这个奖项改名为 Dijkstra 奖。所以 Dijkstra 是少数获得过以自己的名字命名的奖项的人之一。

Dijkstra 在学术界有一些很知名的个性。读过硕士或者博士的人大多对论文的应用次数、影响因子之类的东西很敏感,中国学术界尤其如此。而 Dijkstra 在他的书和文章里几乎从来不提供参考文献列表,很多人对此很不满,而他认为这样增强了他工作的独立性。他在德州大学奥斯丁分校的教学风格也很独特。在每个学期开始的时候,他会给每个学生拍一张照片以便记住他们的名字(这是在智能手机还没发明,使用老式相机的时代)。他的课程几乎都没有指定教科书,少数有教科书的时候也是他自己写的书。我上大学的时候,有很多教授也有只用自己写的教科书的习惯,但可能原因不一样吧。他通常用口试的方式进行期末考试,花一周的时间让学生逐个到他办公室或家里考试,每个人要用两三个小时。

尽管计算机软件技术有很大一部分是 Dijkstra 发明的,但他却很少使用计算机,或许这和他作为程序员时很大一部分时间是在为还没造出来的计算机开发程序有关系。后来在德州大学的同事压力下他购买了一台 Macintosh 电脑,但只用来回复电子邮件和浏览网页。和 Donald Knuth、Leslie Lamport 这样关注于论文的数字排版并发明了 TeX 和 LaTeX 来做这件事的计算机科学家不一样,Dijkstra 从不用计算机写论文。他认为应该不需要草稿和编辑就能写出一篇文章,所以他通常在脑中把整篇文章构思好才把文字落到纸上。在早期他用打字机,后来他一直只使用 Montblanc 的 Meisterstück 钢笔。这在计算机学界是很有名的习惯,很多人都收到过 Dijkstra 用 Montblanc 写的信。Montblanc 应该请他做代言。

Dijkstra 通常会用钢笔写好一篇文章,然后复印一些在同事中小范围散发,而这些同事又会复印更多,发布到更广的范围。他一生中写了 1300 多篇文章,他用自己姓名的首字母 EWD 给他们编号:EWD 1, EWD 2, … EWD 1318。在计算机科学中,这些文章被统称为「EWD 报告」。他的算法和文章大都让人感受到简洁、经济、优雅。他对简洁的热爱来自于早年母亲的指导。他曾经问他的母亲数学是不是一个很难的学科,她回答说「如果你需要超过五行文字来证明什么,那你的方向多半错了」。

最后,作为结语,送给大家一句 EWD 1213 里的名言:

如果十年以后,你以快而脏的方式做什么事的时候,能想象我在你的肩后看着,然后对自己说:「Dijkstra 不会希望这样的。」那么对我来说,这就和永生一样了。
— Edsger Wybe Dijkstra

穿插在各章节的计算机相关简史

C 语言的故事

GNU 项目

Unix 与 Posix

Linux 的故事

大小端的由来

商业处理器的发展历史

现代计算机发展编年史

  • 1614年,苏格兰人John Napier (1550-1617)发表了一篇论文,其中提到他发明了一种可以计算四则运算和方根运算的精巧装置。
  • 1623年, Wilhelm Schickard (1592-1635)制作了一个能进行六位以内数加减法,并能通过铃声输出答案的’计算钟’。通过转动齿轮来进行操作。
  • 1625年, William Oughtred (1575-1660) 发明计算尺
  • 1642至1643年,巴斯卡(Blaise Pascal)为了帮助做收税员的父亲,他就发明了一个用齿轮运作的加法器,叫 “Pascalene” ,这是第一部机械加法器。
  • 1666年,在英国Samuel Morland发明了一部可以计算加数及减数的机械计数机。
  • 1673年, Gottfried Leibniz 制造了一部踏式(stepped)圆柱形转轮的计数机,叫“Stepped Reckoner”,这部计算器可以把重复的数字相乘,并自动地加入加数器里。
  • 1694年,德国数学家,Gottfried Leibniz ,把巴斯卡的Pascalene 改良,制造了一部可以计算乘数的机器,它仍然是用齿轮及刻度盘操作。
  • 1773年, Philipp-Matthaus 制造及卖出了少量精确至12位的计算机器。
  • 1775年,The third Earl of Stanhope 发明了一部与Leibniz相似的乘法计算器。
  • 1786年,J.H.Mueller 设计了一部差分机,可惜没有拨款去制造。
  • 1801年, Joseph-Marie Jacquard 的织布机是用连接按序的打孔卡控制编织的样式。
  • 1854年,George Boole 出版 “An Investigation of the Laws of Thought”,是讲述符号及逻辑理由,它后来成为计算机设计的基本概念。
  • 1858年,一条电报线第一次跨越大西洋,并且提供了几日的服务。
  • 1861年,一条跨越大陆的电报线把大西洋和太平洋沿岸连接起来。
  • 1876年,Alexander Graham Bell 发明了电话并取得专利权。
  • 1876至1878年,Baron Kelvin 制造了一部泛音分析机及潮汐预测机。
  • 1882年,William S. Burroughs 辞去在银行文员的工作,并专注于加数器的发明。
  • 1889年,Herman Hollerith 的电动制表机在比赛中有出色的表现,并被用于 1890 中的人口调查。Herman Hollerith 采用了Jacquard 织布机的概念用来计算,他用咭贮存资料,然后注入机器内编译结果。这机器使本来需要十年时间才能得到的人口调查结果,在短短六星期内做到。
  • 1893年,第一部四功能计算器被发明。
  • 1895年,Guglielmo Marconi 传送广播讯号。
  • 1896年,Hollerith 成立制表机器公司(Tabulating Machine Company)。
  • 1901年,打孔键出现,之后的半个世纪只有很少的改变。
  • 1904年,John A.Fleming 取得真空二极管的专利权,为无线电通讯建立基础。
  • 1906年,Lee de Foredt 加了一个第三活门在Felming 的二极管, 创制了三电极真空管。
  • 1907年,唱片音乐在纽约组成第一间正式的电台。
  • 1908年,英国科学家 Campbell Swinton 阐述了电子扫描方法及预示用阴极射线管制造电视。
  • 1911年,Hollerith 的表机公司与其它两间公司合并,组成 Computer Tabulating Recording Company (C-T-R),制表及录制公司。但在1924年,改名为International Business Machine Corporation (IBM)。
  • 1911年,荷兰物理学家 Kamerlingh Onnes 在 Leiden Unversity 发现超导电。
  • 1931年,Vannever Bush 发明了一部可以解决差分程序的计数机,这机器可以解决一些令数学家,科学家头痛的复杂差分程序。
  • 1935年,IBM (International Business Machine Corporation) 引入 “IBM 601”,它是一部有算术部件及可在1秒钟内计算乘数的穿孔咭机器。 它对科学及商业的计算起很大的作用。总共制造了1500 部。
  • 1937年,Alan Turing 想出了一个 “通用机器(Universal Machine)” 的概念,可以执行任何的算法,形成了一个”可计算(computability)”的基本概念。Turing 的概念比其它同类型的发明为好,因为他用了符号处理(symbol processing) 的概念。
  • 1939年11月,John Vincent Atannsoff 与 John Berry 制造了一部16位加数器。它是第一部用真空管计算的机器。
  • 1939年,Zuse 与 Schreyer 开鈶制造了”V2”﹝后来叫Z2﹞,这机器沿用 Z1的机械贮存器,加上一个用断电器逻辑(Relay Logic)的新算术部件。但当 Zuse完成草稿后,这计划被中断一年。
  • 1939-40年,Schreyer 完成了用真空管的10位加数器,以及用氖气灯(霓虹灯)的存贮器。
  • 1940年1月,在 Bell Labs, Samuel Williams 及Stibitz 完成了一部可以计算复杂数字的机器, 叫“复杂数字计数机(Complex Number Calculator)”,后来改称为“断电器计数机型号I (Model I Relay Calculator)” 。它用电话开关部份做逻辑部件:145个断电器,10个横杠开关。数字用“Plus 3BCD”代表。在同年9月,电传打字 etype 安装在一个数学会议里,由New Hampshire 连接去纽约。
  • 1940年, Zuse 终于完成Z2,它比运作得更好,但不是太可靠。
  • 1941年夏季,Atanasoff及Berry完成了一部专为解决联立线性方程系统(system of simultaneous linear equations) 的计算器,后来叫做”ABC (Atanasoff-Berry Computer)”,它有60个50位的存贮器,以电容器(capacitories)的形式安装在2个旋转的鼓上,时钟速度是60Hz。
  • 1941年2月,Zuse 完成”V3”(后来叫Z3),是第一部操作中可编写程序的计数机。它亦是用浮点操作,有7个位的指数,14位的尾数,以及一个正负号。存贮器可以贮存64个字,所以需要1400个断电器。它有多于1200个的算术及控制部件,而程序编写,输入,输出的与 Z1 相同。 1943年1月 Howard H. Aiken完成”ASCC Mark I”(自动按序控制计算器 Mark I ,Automatic Sequence – Controlled Calculator Mark I),亦称“Haward Mark I”。这部机器有51尺长,重5顿,由750,000部份合并而成。它有72个累加器,每一个有自己的算术部件,及23位数的寄存器。
  • 1943年12月, Tommy Flowers与他的队伍,完成第一部“Colossus”,它有2400个真空管用作逻辑部件,5 个纸带圈读取器(reader),每个可以每秒工作5000字符。
  • 1943年,由 John Brainered领导,ENIAC开始研究。而 John Mauchly 及J. Presper Eckert负责这计划的执行。
  • 1946年,第一台电子数字积分计算器(ENIAC)在美国建造完成。
  • 1947年,美国计算器协会(ACM)成立。
  • 1947年,英国完成了第一个存储真空管
  • 1948贝尔电话公司研制成半导体。
  • 1949年,英国建造完成”延迟存储电子自动计算器”(EDSAC)
  • 1950年,”自动化”一词第一次用于汽车工业。
  • 1951年,美国麻省理工学院制成磁心
  • 1952年,第一台”储存程序计算器”诞生。
  • 1952年,第一台大型计算机系统IBM701宣布建造完成。
  • 1952年,第一台符号语言翻译机发明成功。
  • 1954年,第一台半导体计算机由贝尔电话公司研制成功。
  • 1954年,第一台通用数据处理机IBM650诞生。
  • 1955年,第一台利用磁心的大型计算机IBM705建造完成。
  • 1956年,IBM公司推出科学704计算机。
  • 1957年,程序设计语言FORTRAN问世。
  • 1959年,第一台小型科学计算器IBM620研制成功。
  • 1960年,数据处理系统IBM1401研制成功。
  • 1961年,程序设计语言COBOL问世。
  • 1961年,第一台分系统计算机由麻省理工学院设计完成。
  • 1963年,BASIC语言问世。
  • 1964年,第三代计算机IBM360系列制成。
  • 1965年,美国数字设备公司推出第一台小型机PDP-8。
  • 1969年,IBM公司研制成功90列卡片机和系统–3计算机系统。
  • 1970年,IBM系统1370计算机系列制成。
  • 1971年,伊利诺大学设计完成伊利阿克IV巨型计算机。
  • 1971年,第一台微处理机4004由英特尔公司研制成功。
  • 1972年,微处理机基片开始大量生产销售。
  • 1973年,第一片软磁盘由IBM公司研制成功。
  • 1975年,ATARI–8800微电脑问世。
  • 1977年,柯莫道尔公司宣称全组合微电脑PET–2001研制成功。
  • 1977年,TRS–80微电脑诞生。
  • 1977年,苹果–II型微电脑诞生。
  • 1978年,超大规模集成电路开始应用。
  • 1978年,磁泡存储器第二次用于商用计算机。
  • 1979年,夏普公司宣布制成第一台手提式微电脑。
  • 1982年,微电脑开始普及,大量进入学校和家庭。
  • 1984年,日本计算机产业着手研制”第五代计算机”—具有人工智能的计算机。现代计算机的划代原则主要是依据计算机所采用的电子器件不同来划分的,这就是人们通常所说的电子管、晶体管、集成电路、超大规模集成电路等四代。
  • 1984: DNS (Domain Name Server) 域名服务器发布,互连网上有1000多台主机运行。
  • 1984: Hewlett-Packard发布了优异的激光打印机,HP也在喷墨打印机上保持领先技术。
  • 1984年1月: Apple 的Macintosh发布。基于Motorola 68000微处理器。可以寻址16M。
  • 1984 年8月: MS-DOS 3.0、PC-DOS 3.0、IBM AT发布,采用ISA标准,支持大硬盘和1.2M高密软驱。
  • 1984年9月: Apple 发布了有512Kb 内存的Macintosh,但其他方面没有什么提高。
  • 1984 底: Compaq开始开发IDE接口,可以以更快的速度传输数据,并被许多同行采纳,后来更进一步的EIDE推出,可以支持到528MB的驱动器。数据传输也更快。
  • 1985: Philips和Sony合作推出CD-ROM驱动器。
  • 1985: EGA标准推出。
  • 1985年3月: MS-DOS 3.1、PC-DOS 3.1。这是第一个提供部分网络功能支持DOS版本。
  • 1985年10月17日: 80386 DX推出。时钟频率到达33MHz,可寻址1GB内存。比286更多的指令。每秒6百万条指令,集成275000个晶体管。
  • 1985年11月: Microsoft Windows发布。但在其3.0版本之全面没有得到广泛的应用。需要DOS的支持,类似苹果机的操作界面,以致被苹果控告。诉讼到1997年8月才终止。
  • 1985 年12月: MS-DOS 3.2、PC-DOS 3.2。这是第一个支持3.5英寸磁盘的系统。但也只是支持到720KB。到3.3版本时方可支持1.44兆。
  • 1986 年1月: Apple 发布较高性能的Macintosh。有四兆内存,和SCSI适配器。
  • 1986 年9月: Amstrad Announced发布便宜且功能强大的计算机Amstrad PC 1512。具有CGA图形适配器、512KB内存、8086处理器20兆硬盘驱动器。采用了鼠标器和图形用户界面,面向家庭设计。
  • 1987: Connection Machine超级计算机发布。采用并行处理,每秒钟2亿次运算。
  • 1987: Microsoft Windows 2.0发布,比第一版要成功,但并没有多大提高。.
  • 1987: 英国数学家Michael F. Barnsley找到图形压缩的方法。
  • 1987: Macintosh II发布,基于Motorola 68020处理器。时钟16MHz,每秒260万条指令。有一个SCSI适配器和一个彩色适配器。
  • 1987年4月2日: IBM推出PS/2系统。最初基于8086处理器和老的XT总线。后来过渡到80386,开始使用3.5英寸1.44MB软盘驱动器。引进了微通道技术,这一系列机型取得了巨大成功。出货量达到200万台。
  • 1987: IBM发布VGA技术。
  • 1987: IBM发布自己设计的微处理器8514/A。
  • 1987年4月: MS-DOS 3.3、PC-DOS 3.3。随IBM PS/2一起发布,支持1.44MB驱动器和硬盘分区。可为硬盘分出多个逻辑驱动器。
  • 1987年4月: Microsoft和IBM发布S/2Warp操作系统。但并未取得多大成功。
  • 1987年8月: AD-LIB声卡发布。一个加拿大公司的产品。
  • 1987年10月: Compaq DOS (CPQ-DOS) v3.31发布。支持的硬盘分区大于32Mb。
  • 1988: 光计算机投入开发,用光子代替电子,可以提高计算机的处理速度。
  • 1988: XMS标准建立。
  • 1988: EISA标准建立。
  • 1988 6月6日: 80386 SX为了迎合低价电脑的需求而发布。
  • 1988年7月到8月: PC-DOS 4.0、MS-DOS 4.0。支持EMS内存。但因为存在BUG,后来又陆续推出4.01a。
  • 1988年9月: IBM PS/20 286发布,基于80286处理器,没有使用其微通道总线。但其他机器继续使用这一总线。
  • 1988年10月: Macintosh Iix发布。基于Motorola 68030处理器。仍使用16 MHz主频、每秒390万条指令,支持128M RAM。
  • 1988年11月: MS-DOS 4.01、PC-DOS 4.01发布。
  • 1989: Tim Berners-Lee 创立World Wide Web雏形,他工作于欧洲物理粒子研究所。通过超文本链接,新手也可以轻松上网浏览。这大大促进了INTERNET的发展。
  • 1989: Phillips和Sony发布CD-I标准。
  • 1989年1月: Macintosh SE/30 发布。基于新型68030处理器。
  • 1989年3月: E-IDE标准确立,可以支持超过528MB的硬盘容量。可达到 33.3 MB/s 的传输速度。并被许多CD-ROM所采用。
  • 1989年4月10日: 80486 DX发布,集成120万个晶体管。 其后继型号时钟频率达到100MHz。
  • 1989年11月: Sound Blaster Card(声卡)发布。
  • 1990: SVGA标准确立。
  • 1990年3月 : Macintosh Iifx发布,基于68030CPU,主频40MHz,使用了更快的SCSI接口。
  • 1990年5月22日: 微软发布Windows 3.0。兼容MS-DOS模式。
  • 1990年10月: Macintosh Classic发布,有支持到256色的显示适配器。
  • 1990年11月: 第一代MPC (多媒体个人电脑标准)发布。处理器至少80286/12MHz,后来增加到80386SX/16 MHz ,及一个光驱,至少150 KB/sec的传输率。
  • 1991: 发布ISA标准。
  • 1991年5月: Sound Blaster Pro发布。
  • 1991年6月: MS-DOS 5.0、PC-DOS 5.0。为了促进OS/2的发展,Bill Gates说:DOS5.0是DOS终结者,今后将不再花精力于此。该版本突破了640KB的基本内存限制。这个版本也标志着微软与IBM在DOS上的合作的终结。
  • 1992: Windows NT发布,可寻址2G RAM。
  • 1992年4月: Windows 3.1发布。
  • 1992年6月: Sound Blaster 16 ASP发布。
  • 1993: INTERNET开始商业化运行。
  • 1993: 经典游戏Doom发布。
  • 1993: Novell并购Digital Research, DR-DOS成为Novell DOS。
  • 1993年3月22: Pentium发布。集成了300多万个晶体管。初期工作在60-66MHz。每秒钟执行1亿条指令。
  • 1993年5月: MPC标准2发布。CD-ROM传输率要求300KB/sec。在320*240的窗口中每秒播放15帧图像。
  • 1993年12月: MS-DOS6.0发布,包括一个硬盘压缩程DoubleSpace,,但一家小公司声称,微软剽窃了其部分技术。于是在后来的DOS6.2中,微软将其改名为:DriveSpace。后来WIN95中的DOS成为DOS7.0,WIN95OSR2中称为DOS7.10.
  • 1994年3月7日: Intel 发布90-100 MHz Pentium处理器。
  • 1994年9月: PC-DOS 6.3发布。
  • 1994年10月10日: Intel 发布75 MHz Pentium处理器。
  • 1994: Doom II 发布。开辟了PC机游戏广阔市场。
  • 1994: Netscape 1.0 浏览器发布。
  • 1994: Comm&Conquer(命令与征服)发布。
  • 1995年3月27日: Intel发布120 Mhz的Pentium处理器。
  • 19956月1日: Intel发布133 Mhz的Pentium处理器。
  • 1995年8月23日: Windows ‘95 发布。大大不同于其以前的版本。完全脱离MS-DOS,但照顾用户习惯还保留了DOS形式。纯32位的多任务操作系统。该版本取得了巨大的成功。
  • 1995年11月1日: Pentium Pro发布。主频可达200 MHz ,每秒钟完成4.4亿条指令,集成了550万个晶体管。
  • 1995年12月: Netscape发布其.JavaScript。
  • 1996: Quake、Civilization 2、Command& Conquer - Red Alert等一系列的著名游戏发布。
  • 1996年1月: Netscape Navigator 2.0发布,第一个支持JavaScript的浏览器。
  • 1996年1月4日: Intel发布150-166MHz的Pentium处理器,集成了330万个晶体管。
  • 1996: Windows ‘95 OSR2发布,修复了部分BUG,扩充了部分功能。
  • 1997: Gr和 Theft Auto、Quake 2、Blade Runner等著名游戏发布,3D图形加速卡大行其道。
  • 1997年1月8日: Intel发布Pentium MMX。对游戏和多媒体功能进行了增强。
  • 1997年4月: IBM的深蓝(Deep Blue)计算机,战胜人类国际象棋世界冠军卡斯帕罗夫。
  • 1997年5月7日: Intel发布Pentium II,增加了更多的指令和更多CACHE。
  • 1997年6月2日: Intel 发布233 MHz Pentium MMX.
  • 1997年16日: Apple遇到严重的财务危机,微软伸出援助之手,注资1.5亿美元。条件是Apple撤消其控诉:微软模仿其视窗界面的起诉,并指出Apple也是模仿了XEROX的设计。
  • 1998年2月 : Intel发布333 MHz Pentium II处理器。采用0.25微米技术,提高速度,减少发热量。
  • 1998年6月25日: Microsoft发布Windows ‘98,一些人企图肢解微软,微软回击说这会伤害美国的国家利益。
  • 1999年1月25日: Linux Kernel 2.2.0发布。 人们对其寄予厚望。
  • 1999年2月22日: AMD公司发布K6-III 400MHz。有测试说其性能超过Intel P-III 。集成2300万个晶体管、socket 7结构。
  • 1999年:2月26日,Intel公司推出了PentiumⅢ处理器,PentiumⅢ采用了和PentiumⅡ相同的Slot1架构,并增加了拥有70条全新指令的SSE指令集,以增强3D和多媒体的处理能力。最初时钟频率在450MHz 以上,总线速度在100MHz 以上,采 用0.25μm 工艺制造,集成有512KB或 以上的二级缓存。
    • 4月26日,台湾学生陈盈豪编写的CIH病毒在全球范围内爆发,近100万台左右的计算机软硬件遭到不同程度的破坏,直接经济损失达数十亿美元。
    • 5月10日,id Soft推出了《QuakeⅢ》的第一个测试版本,此后的时间中,《QuakeⅢ》逐渐确立了FPS游戏竞技标准,并成为了计算机硬件性能的测试标准之一。
    • 6月23日,AMD公司推出了采用全新架构,名为Athlon的处理器,并且在CPU频率上第一次超越了Intel公司,从此拉开了精彩激烈的世纪末处理器主频速度大战。
    • 9月1日,Nvidia公司推出了GeForce256显示芯片,并提出了GPU的全新概念。
    • 10月25日,代号为Coppermine(铜矿)的PentiumⅢ处理器发布。采用0.18μm工艺,内部集成了256KB 全速L2Cache ,内建2800万个晶体管。
  • 2000年:1月1日,全世界都在等待,呵呵,千年虫并没有爆发。2月17日,美国微软公司正式发布Windows2000。
    • 3月16日,AMD公司正式推出了主频达到1GHz的“Athlon”处理器,从而掀开了GHz 处理器大战。
    • 3月18日,Intel公司推出了自己的1GHz Pentium3处理器。同一天,资产高达50亿美元的铱星公司宣告破产,公司全面终止其铱星电话服务。五角大楼最终获得了铱星的使用权,但用途至今未知。
    • 4月27日,AMD公司发布了“毒龙”(Duron)处理器,开始在低端市场向Intel发起冲击。
    • 5月14日,名为“I LOVE YOU”(爱虫)的病毒在全球范围内发作,仅用三天的时间就造成全世界近4500万台电脑感染,经济损失高达26亿美元。
    • 9月14日,微软正式推出了面向家庭用户的windows千僖年版本Windows Me,同时这也是微软最后一个基于DOS的操作系统。
    • 11月12日,微软宣布推出薄型个人电脑Tablet PC。
    • 11月20日,Intel正式推出了Pentium4处理器。该处理器采用全新的Netburst架构,总线频率达到了400MHz,并且另外增加了144条全新指令,用于提高视频,音频等多媒体及3D图形处理能力。
    • 12月14日,3dfx宣布将全部资产出售给竞争对手Nvidia,从而结束了自己传奇般的历史。
  • 2001年2月1日,世嘉宣布退出游戏硬件市场。
  • 2001年3月26日,苹果公司发布Mac OS X操作系统,这是苹果操作系统自1984年诞生以来首个重大的修正版本
  • 2001年6月19日,Intel推出采用“Tualatin”(图拉丁)内核的P3和赛扬处理器,这也是Intel首次采用0.13微米工艺。
  • 2001年10月8日,AMD宣布推出Athlon XP 系列处理器,新处理器采用了全新的核心,专业3D Now!指令集和OPGA(有机管脚阵列)封装,而且采用了“相对性能标示”(PR标称值)的命名规范,同时该处理器极为优异的性价比使得Intel压力倍增。
  • 2001年10月25日,微软推出Windows XP操作系统,比尔.盖茨宣布:“DOS时代到此结束。” Windows XP的发布,也推动了身处低潮的全球PC硬件市场。
  • 2002年2月5日,Nvidia发布GeForce 4系列图形处理芯片,该系列共分为Ti和Mx两个系列,其中的GeForce4 Ti 4200和GeForce 4 MX 440两款产品更是成为市场中生命力极强的典范。
  • 2002年5月13日,沉寂多时的老牌显示芯片制造厂商Matrox正式发布了Parhelia-512(中文名:幻日)显示芯片,这也是世界上首款512bit GPU。
  • 2002年7月17日,ATI发布了Radeon 9700显卡,该显卡采用了代号为R300的显示核心,并第一次毫无争议的将Nvidia赶下了3D性能霸主的宝座。
  • 2002年11月18日,Nvidia发布了代号为NV30的GeForce FX显卡,并在该产品上首次使用了0.13微米制造工艺,由于采用了多项超前技术,因此该显卡也被称为一款划时代的产品。
  • 2003年1月7日,Intel发布全新移动处理规范“迅驰”。
  • 2003年2月10日,AMD发布了Barton核心的Athlon XP处理器,虽然在推出后相当长的一段时间内得不到媒体的认可,但是凭借超高的性价比和优异的超频能力,最终Barton创造出了一个让所有DIYer无限怀念的Barton时代。
  • 2003年2月12日,FutureMark正式发布3Dmark 03,但是由此却引发了一场测试软件的信任危机。
  • 2004年 Intel 全面转向 PCI-Express。
  • 2005年 Intel 开始推广 双核CPU。
  • 2006年 Intel 开始推广 四核CPU。
  • 2007年 Intel IDF 大会推出震惊世界的2万亿次80核CPU。

广告时间

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。

点击注册 100offer,谈谈你对下一份工作的期待,收获 5-10 个满足你要求的好机会。

捧个钱场?