如果你是计算机相关专业的学生(包括计算机科学与技术、软件工程等等),那么下面十本书应该成为你的案头书。网络上各种大牛都给出了自己的推荐书单(我会在本文最后列出几个广为流传的书单),而下面这些书之所以入选我的书单(至少满足下面几个条件中的一个):1)几乎被所有(或大部分)这些大牛推荐过;2)曾经拿过各种大奖并经久不衰的热销;3)我个人曾很认真的研读过并且在对比筛选之后仍然觉得是最值得推荐的。
特别说明:这些书基本上属于“专业通识”的范畴,我们并不就某一专业方向而讨论,所以如果你是搞图像处理的那么下面并没有这方面的书;这些书的读者对象并不限定阶段,也就是说无论你本科还是研究生,甚至博士还是已经工作的人都可以看也应该去看;此外,它们可以成为你某些课程的教材或参考读物(例如编程方面的),但更多的是作为课外读物的一种不可错过的选择。
1、编码:隐匿在计算机软硬件背后的语言
英文名:Code:The Hidden Language of Computer Hardware and Software
[美] Charles Petzold 著
永不褪色的计算机科学经典著作。本书是一本解释计算机运行原理的神作。全书不见任何晦涩生硬的概念,相反却是平常生活中用到的灯泡、电池、手电筒等穿梭其中。而流行歌手、历史人物、影评剧作等内容更是信手捏来且运用地毫无违和感。不经意间,让你将计算机组成原理、数字电子技术、计算机基础等内容彻彻底底合成一气,豁然顿悟。
本书作者Charles Petzold是Windows编程界的一位大师,当今世界项级技术作家。1994年5月,Petzold被《视窗杂志》和Microsoft公司联合授予Windows Pioneer奖(全世界只有7人获此殊荣,包括VB之父、Word之父等,但Charles Petzold是七人之中唯一的作家),以表彰他对Microsoft Windows所做出的贡献。
本书曾多次再版,豆瓣上有超过1600个点评,总评分为9.2,此外曾经推荐过这本书的名人包括(但不限于):刘未鹏(暗时间作者)、啊哈磊(《啊哈!算法》作者,http://www.ahalei.com/book-book.html)、洪强宁(豆瓣技术总监)、Joel Spolsky(Stackoverflow联合创始人)以及知乎大V 轮子哥(vczh)。
2、计算机科学丛书:深入理解计算机系统(原书第2版)
英文名:Computer Systems: A Programmer's Perspective
[美] Randal E. Bryant,David R.O Hallaren 著
卡耐基梅隆大学计算机学院院长、IEEE、ACM和美国工程院院士倾力之作。超过120所美国和世界一流大学计算机专业选用本书为教材。让你对计算机系统的认识深入无人之境,计算机专业不可不读的金玉之作。
3、C++编程思想 (包含1、2两卷,现在也有两卷合订本)
英文名:Thinking in C++
[美] Bruce Eckel 著
本书第一版曾获得1996年度,美国图书震撼大奖(Jolt Award),该奖是对技术书籍内容的顶级认可。我个人认为这本书的最大好处就在于充分体现了“循序渐进”的思想,作者引导读者学习完全是经过系统的设计与思考的,是逐步引导读者的一个有效过程,这本书最初主要是从C中的一些内容讲起的,对于那些学过C的人来说,进而学习C++,这部作品可谓不二首选。作者Bruce Eckel 同样是《Thinking In Java》的作者,他的这两部作品在全世界范围内都非常畅销。
4、C++ Primer(中文版 第5版)
[美] Stanley B. Lippman,Josée Lajoie,Barbara E. Moo 著
这是C++领域另外一本重磅的超级畅销书。风靡全球,经久不衰。众多资深专家力荐。这本书讨论的内容非常广泛,修订版还增加了C++中的许多新特性相关内容。我的意见是C++ Primer和Thinking in C++二者可以选择一本来读,编程语言的书,同一种语言不必读多本,毕竟会有很多内容相互重叠。
5、算法导论(原书第3版)
英文名:Introduction to Algorithms, third edition
[美] Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein 著
号称是超过50万人阅读的算法圣经(其实内容亦包含数据结构),被国内外1000余所高校采用的经典教材。四位出自MIT的教授合力编写。内容涉及相当广泛。但相对其他算法或数据结构的书来说,本书更加challenging。需要相当的勇气与恒心才能啃下。
6、人月神话(40周年中文纪念版)
英文名:The Mythical Man-Month: Essays on Software Enginee
[美] Frederick P. Brooks Jr. 著
不要被名字唬住了,这不是一本科幻著作,而是一部软件工程经典,由图灵奖得主Brooks亲自操刀的传奇著作!该书内容源于作者在IBM公司任System计算机系列以及其庞大的软件系统OS项目经理时的实践经验。探索了达成一致性的困难和解决的方法,并探讨了软件工程管理的其他方面。其中,既有很多发人深省的观点,又有大量软件工程的实践,为每个复杂项目的管理者给出了自己的真知灼见。
7、代码大全(第2版)
英文名:Code Complete
[美] Steve McConnell 著
不可逾越的软件开发宝典,软件开发世界的地图,经典中的经典。本书作者Steve McConnell是两届 Jolt Award震撼大奖得主。除代码大全之外,他的另外一部获得 Jolt Award震撼大奖的作品是《Rapid Development: Taming Wild Software Schedules》。
8、重构——改善既有代码的设计
英文名:Refactoring: Improving the Design of Existing Code
[美] Martin Fowler 著
世界知名软件开发大师Martin Fowler的不朽经典,普通程序员进阶到编程高手必须修炼的秘笈。该书清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了 70 多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。其中提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。
9、程序员修炼之道:从小工到专家
The Pragmatic Programmer: From Journeyman to Master
[美] Andrew Hunt,David Thomas 著
该书由一系列独立的部分组成,涵盖的主题从个人责任、职业发展,直到用于使代码保持灵活、并且易于改编和复用的各种架构技术,利用许多富有娱乐性的奇闻轶事、有思想性的例子及有趣的类比,全面阐释了软件开发的许多不同方面的较佳实践和重大陷阱。无论你是初学者,是有经验的程序员,还是软件项目经理,本书都适合你阅读。
10、编译原理(第2版)
英文名:Compilers:Principle,Techniques and Tools
[美] Alfred V.Aho,Monica S.Lam,Ravi Sethi 著
号称龙书,编译原理领域的扛鼎力作。美国国家工程院院士亲自执笔。理解程序的编译过程相当于是走完你对计算机程序认识的最后一里路。但是,普遍认为编译原理是计算机本科阶段最难的课程!这本龙书自然又号称天书。我把它放在书单的最后一位,供学有余力的同学阅读,如果感觉自己修为还不够还是建议深入此书,以免走火入魔。
最后附上网上广为流传的其他版本的书单(着色的为我上面亦推荐过的),注意某些书单我做过二次筛选,主要出于下面几个原因的考虑:1)有的人推荐的书单过长,有二三十个,我希望能尽量控制在十本以内;2)因为有些书单比较旧,有些技术已经过时了,或者某些书的方向比较偏,例如《Lua程序设计》。
刘未鹏(暗时间作者)
以下同一条目下用“/”隔开的表示任选,当然也可以都读。
云风(中国游戏编程先行者,前网易游戏部门资深程序员,简悦创始人)
洪强宁(豆瓣技术总监)
张峥(微软亚洲研究院副院长)
Jeff Atwood(Stackoverflow联合创始人)
Joel Spolsky(Stackoverflow联合创始人)
(本文完)