计算机科学必读经典

标签: CompSci Recommend | 发表时间:2008-04-10 04:33 | 作者:Eric iDesperadO
出处:http://blog.youxu.info

前天看到 pongba 说好书太多 以致于没时间写博客, 深有同感. 架子上目前放着 Dreaming in CodeTAoCP 第四卷第三册, 手不释卷, 以至于三上时间都不放过. 细想自己读过的好书不少(至于烂书, 只能用无数这个词来衡量了), 勉强回忆了一些让自己印象深刻的, 写一两句话的点评, 算是我眼中的必读经典吧.

A类. 基础

Structure and Interpretation of Computer Programs (SICP)


SICP 计算机程序的构造和解释 (SICP) 堪称是MIT计算机系的镇山之宝之一, 书中通过展示 LISP 语言和程序设计两条主线, 向读者展示了程序设计的几乎所有重要概念. 数十年来各种语言层出不穷, MIT 依然故我给入学本科生教 LISP. LISP 这种函数式的语言, 和过程语言相比, 理论更加优美(lambda 演算), 描述更加简洁. 现代的动态语言如 Javascript, Python 和 Ruby 都或多或少被 LISP 影响. 任何想写具有清晰结构, 或者正确思路的程序的人, 都应当阅读这本书. 好消息是, 这本书是可以在线免费看的.

The Art of Computer Programming (TAOCP)


计算机程序设计艺术 (TAOCP) 是计算机领域的一部未完成的里程碑. 如果之前没有听过它的大名, 那就不算学过计算机科学. Knuth (中文名高德纳) 阅读文献无数, 博古通今, 文风幽默. 书中讲解细致深入, 大开大阖. 如果说 SICP 是练童子功的话, 这本书就是属于名门正派的顶极内功. c0031186_46dce4fb1637c.gifTAoCP上往往一个普通的习题, 就是一个很经典的结论; 往往不经意的一句话, 就是一个巧妙的算法. Knuth 常常把貌似不相关的结论深刻的联系在一起, 比如我现在读的第四卷第二册上九连环问题和Gray码是深刻联系的, 易经和生物遗传密码子也是有对应关系的(当然不是民科说的那种).

如此的打通任督二脉的例子和习题俯拾皆是, 真的是穷人进了皇宫的感觉. 即使对于面试工作, 这套书也是值得一翻的: 在Google面试的时候, 面试官问一道题目, 我很快给了一个答案, 其中用到了一个不太显然的结论. 面试官问, 这个结论怎么来的? 我说, TAOCP 第二卷讲了这道题目的一个推广情形. 面试官说, 这道题目就是看面试的有没有看过 TAOCP. 我看很多人面试之前都在网上疯狂做题, 尚不能穷其一隅. 其实读过 TAoCP 的人极少会害怕面试的时候那些技巧性的问题. 万变都极少超出TAOCP划出的框架.

Introduction to Algorithm (CLRS)

0262032937-f30.jpg算法导论 (Introduction to Algorithm), 在圈子里常常按四个作者的首字母写成 CLRS, 算是对不愿意看或者看不懂 TAOCP 的人送上了半个梯子(还有半个当属具体数学 Concrete Mathematics). 这本书在美国大部分大学中被列为算法类教材, 在国内也是 ACM 竞赛集训必看的教材之一. 虽然名字里面带一个导论, 内容却一点不含糊. 在我个人看来, 其内容基本覆盖绝大多数常用的算法, 在 NP 复杂性理论以及近似算法方面也有所涉及. 这本书最好的地方是习题详细且全部没有答案, 非常适合作为大学课本和ACM讨论班阅读材料, 最坏的地方也在于没有答案, 对于自学者来说, 可能会觉得枯燥无味且困难重重.

另: 如果有淘老书的习惯, 不妨选择 The Design and Analysis of Computer Algorithms (计算机算法设计与分析) 这本书在 CLRS 出现之前绝对是算法教材一哥. 可惜这本书一直没有更新, CLRS 才以算法多而全取胜.

Compilers: Principles, Techniques, and Tools

这就是著名的龙书 (Dragon Book) 啦. 和上面的 The Design 一样, 都是 Stanford 教授 Jeffrey D. Ullman 的巨著. 计算机的历史很大程度上是编译器发展的历史. 当年 Knuth 就是因为写了Alogo 60 编译器后, Addison-Wesley 过来找高爷爷约稿, 1962年的时候就让他写本编译器的书. Knuth 写啊写啊, 发现写了很久还没写到主题. 那边编辑急了, 说你都写了3000页手稿了, 你还不交稿. 高爷爷说, 这个, 我还没写到正题呢. 书商说, 算了, 你出多卷本吧. 于是才51xtgj64tzl.jpg有了 TAoCP. 这个小故事也就说明计算机编程的发展史和编译器的发展史是平行的. 龙书基本上框出了一个编译器的架子, 从词法句法分析到类型分析 代码生成. 新版加入了JIT, 垃圾收集等现代特性. 这部巨作的作者阵容也是强大的: Alfred Vaino Aho 是 grep 和 awk 的作者. Ravi Sethi 以前在 Bell 实验室, 现在好像是朗讯的首席技术官. Avaya 实验室的头. 至于 Jeffrey Ullman 这个老头, 好玩的趣事就更加多了, 比如他是 Sergey Brin的导师, 他有两大不回信原则: 陶瓷信不回, 问书后习题信不回.

[under construction, more later…]

Modern OS

(Artificial Intelligence: A Modern Approach(AIMA)

Structured Compter Architecture

Computer Architecture: A Quantitative Approach

Computer Networks

B类, 编程

K&R C

Programming Pearls and More Programming Pearls
The Practice of Programming
Code Complete or The Elements of Programming Style
MMM(Mythical Man Month)
GoF’s Design Pattern
The Art of Unix Programming

C类, Geek

H2G2
GEB
How to Solve It
Elements of Style
The Cathedral and the Bazaar

相关 [计算机 科学 经典] 推荐:

计算机科学经典论文

- zii - 负暄琐话
从Jao的Programming Musing 看到的:Babar Kazar 整理了一堆经典论文. Jao强烈建议每个严肃的程序员读每篇论文,说它们都或多或少有意思. 粗粗扫了一下,很多论文都没读过. Hoare Tony Hoare名下的公理化语义(Axiomatic Semantics). 著名的Hoare Triples, P{C}Q, 就是从这里来的.

计算机科学必读经典

- iDesperadO - 4G spaces
前天看到 pongba 说好书太多 以致于没时间写博客, 深有同感. 架子上目前放着 Dreaming in Code 和 TAoCP 第四卷第三册, 手不释卷, 以至于三上时间都不放过. 细想自己读过的好书不少(至于烂书, 只能用无数这个词来衡量了), 勉强回忆了一些让自己印象深刻的, 写一两句话的点评, 算是我眼中的必读经典吧..

计算机科学经典论文(zz)

- - 银河里的星星
作者: g9yuayon. 从Jao的 Programming Musing 看到的:Babar Kazar 整理了 一堆经典论文. Jao强烈建议每个严肃的程序员读每篇论文,说它们都或多或少有意思. 粗粗扫了一下,很多论文都没读过. Tony Hoare名下的公理化语义(Axiomatic Semantics).

计算机的10大经典错误

- chris - 伯乐在线 -博客
10、DOS的Abort,Retry, Fail. 85年以后出生的人可能不知道DOS是什么了,只有那老家伙还知道这是什么. 我还记得当时的我对于Abort和Fail这两个选择还是比较清楚的, 不过,今天完全忘记了Abort和Fail的差别是什么. 这个出是DOS下的经常出现,也相当的经典,以至于在Wikepedia上都有专门的业面 Abort, Retry, Fail?.

[图]计算机10大经典错误

- wu - cnBeta.COM
感谢404NotFound的投递. 10、DOS的Abort,Retry, Fail.

一些经典的计算机书籍

- XcessLeo - 伯乐在线 -博客
  以下列表中的计算机书籍(中文版)来自微博:@程序员的那些事 粉丝的推荐. 如果大家还有其他计算机相关的经典书籍推荐,请在评论中留言,或者在这条微博的评论中留言,我们将继续扩充这个列表. C++ Primer中文版(第4版). 设计模式:可复用面向对象软件的基础. Java核心技术 卷1:基础知识.

计算机科学专业应该传授的3件事

- 行 - cnBeta.COM
我多么希望在大学期间学会很多件事,但是我 深知没有任何专业会对你进行完整而透彻的教育. 一门专业是为了传授你基本知识并且教会你学习其他知识的技巧. 然而作为一名软件开发员,随着经验的积累,我 发现越来越后悔在工作之前没有学习深入理解过本文中列出的3件事.

英国不缺工程师和计算机科学家

- satan - Solidot
BBC报导(中文),一项调查发现,英国有近四分之一的工程系大学生毕业后从事餐厅服务生或商店职员等低技术工作. 》的报告分析1986年至2009年之间高等教育统计局(HESA)的资料,关于工程科系大学毕业生从事相关工作和其他工作或不需要大学学历的工作的比例. 结果发现,2009年只有不到一半(46%)的大学工程系学生,毕业六个月之后从事与工程直接相关的工作.

中国计算机科学的希望在哪里?

- - Solidot
《南方周末》翻译了华盛顿大学计算机科学与工程学教授James A.Landay的一篇评论中国计算机科学现状的文章(第一部分,第二部分). Landay在文章中指出: 中国学生学者的创新能力与美国学生学者有很大差距. 实际上,中国那些“最有创造力”的人,基本都是在美国或欧洲留学拿到博士或者工作过的人...最近的趋势显示中国中产阶级和有钱人倾向于把子女送到美国就读本科甚至是高中...在中国的大学里,集中在老一辈教授手里的权力和经费都远远更多.

软件工程师需要计算机科学学位么?

- - 博客 - 伯乐在线
软件工程师这个角色并不一定需要计算机科学学位. 然而,近日 Yahoo CEO Scott Thompson因计算机科学学位造假而被迫辞职一事引起了人们的热议,我们是否需要一个大学文凭呢. 比如说,在Andrew Binstock为Dr. Dobb所撰写的一篇名为“ Software Engineers All!”的文章中提及了软件工程师是否真的需要一个计算机科学学位才能完成好工作.