计算机专业人士必读书单
《深入理解计算机系统》
《Computer Systems: A Programmer’s Perspective》
作者:Randal E.Bryant(毕业于麻省理工学院,现任美国卡内基·梅隆大学计算机学院院长)
这本书简称CSAPP ,是所有入行计算机的人必看的一本「内功心法」,也是名校卡耐基·梅隆大学、北京大学、清华大学等国内外众多知名高校选用指定教材。被誉为“价值超过等重量黄金的无价资源宝库”。
深入理解计算机系统 是我读过的最优秀的计算机系统导论型作品,它创造性的把操作系统,计算机组成结构,数字电路,以及编译原理这些计算机基础学科中的核心概念汇集在一起。
从而覆盖了指令集体系架构,汇编语言,代码优化,计算机存储体系架构,链接,装载,进程,以及虚拟内存这些程序员所需了解的关键计算机系统知识。
如果想打下扎实的计算机基础又不想把操作系统计算机结构编译原理这些书统统读一遍,阅读 深入理解计算机系统 是最有效率的方式。
本书从程序员视角全面剖析的实现细节,使读者深刻理解程序的行为,将所有计算机系统的相关知识融会贯通,比如:计算机是怎么运行的,我们的电脑硬件是如何工作的,操作系统为什么能够帮助我们完成这么多事情,为什么代码能够被运行。
《计算机程序的构造和解释》
《Structure and Interpretation of Computer Programs, 2nd Edition》
就个人而言,这本书目前为止对我影响醉倒的一本编程书。
《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。
然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。
同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。
一些人认为此书不适合新手。个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。
你还不确信么?那就读读第一版的前言或序言。网上有免费的电子版。 - Antti Sykäri
《算法导论》
《Introduction to Algorithms》
作者:Thomas H.Cormen/Charles E.Leiserson/ Ronald L.Rivest/Clifford Stein
MIT四大名师联手铸就。主要作者之一Ronald L.Rivest 由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖。该书目前是算法的标准教材,国内外千余所高校都使用它。
算法是程序员的内功,内功练好了,练其他功夫时就能更容易掌握。《算法导论》是算法学习者必备的一本书,这本书深入浅出,深入讨论和全面地介绍了计算机的各类算法,对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。
《代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……
在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron
《算法设计》
《Algorithm Design》
作者: Jon Kleinberg / Éva Tardos(康奈尔大学计算机科学教授)
《算法设计》强调用实际示例阐明枯燥的算法理论,更注重算法设计思路而非算法复杂度分析。
书中共包含200多个问题,几乎都是在康奈尔大学算法课程的课外作业中被开发,或者课堂测验的考试题目,其中部分题目出自Yahoo!和Oracle等公司。最后还扩展了PSPACE问题、参数复杂性等内容。
《线性代数应该这样学》
Linear Algebra Done Right
作者:Sheldon Axler(阿克斯勒)
在计算机科学领域,很多应用和研究离不开扎实的数学基础。数学基础还不够的,建议先好好学数学。这本线性代数经典佳作被斯坦福大学、加州大学伯克利分校等全球40多个国家、300余所高校采纳为教材。
《组合数学》
Introductory Combinatorics
作者:Richard A. Brualdi
本书是系统阐述组合数学基础、理论、方法和实例的优秀教材,出版30多年来多次改版,被MIT、哥伦比亚大学、UIUC、威斯康星大学等众多国外高校采用,对国内外组合数学教学产生了较大影响,也是相关学科的主要参考文献之一。
《普林斯顿微积分读本》
The Calculus Lifesaver:All the Tools You Need to Excel at Calculus
作者:Adrian Banner(阿德里安·班纳)
本书被誉为“战胜微积分的必备工具”。旨在帮助大家学习单变量微积分的主要概念,同时也致力于教会你求解问题的技巧。
《代码大全》 史蒂夫·迈克康奈尔
“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有 50 页在谈论代码布局。” —— Joel Spolsky
对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中 99% 的观念。– esac
《程序员修炼之道》
对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个 P2P 的音乐交换网络图,那这本书就适合你了。—— Joel
《”计算机 网络 (第4版)”(Computer Networks)》
《” 数据库系统导论(第7版)”(An Introduction to Database Systems(Seventh Edition))》
《TCP/IP详解》
《C程序设计语言》
这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。(这对理解“底层”非常重要)—— Nathan
《重构:改善既有代码的设计》
我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler
《设计模式》
《Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma》
就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术,因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young
《人月神话》
《计算机程序设计艺术》
这是高德纳倾注心血写的一本书。—— Peter Coulton
《编译原理》(龙书)
我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB
《深入浅出设计模式》
我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus
《哥德尔、艾舍尔、巴赫书:集异璧之大成》
如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik
《代码整洁之道》
《Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin》
虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin
《Effective C++》和《More Effective C++》
在我职业生涯早期,Scott Meyer 的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。
去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的 Bug。 – John Channing
《编程珠玑》
尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren
《修改代码的艺术》by Michael Feathers
我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte
同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy
《编码:隐匿在计算机软硬件背后的语言》
《Code: The Hidden Language of Computer Hardware and Software by Charles Petzold》
我推荐 Charles Petzold 的《编码》。在这个充满工具和 IDE 的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil
《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》
对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是,要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr
《Peopleware / 人件集:人性化的软件开发》
Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。他们的答案并不简单,只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni
《Coders at Work / 编程人生》
一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq
《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!》
虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511
《Effective Java 中文版》
此书第二版教你如何编写漂亮并高效的代码,虽然这是一本 Java 书,但其中有很多跨语言的理念。 – Marcio Aguiar
《Patterns of Enterprise Application Architecture / 企业应用架构模式》
很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol
《The Little Schemer》和《The Seasoned Schemer》 nmiranda
这两本是 LISP 的英文书,尚无中文版。美国东北大学网站上也有电子版。
《交互设计之路》
英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称 Visual Basic 之父,交互设计之父。
本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的,而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。“难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性,证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。
本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士,以及关心软件行业和高科技行业现状与发展的人士阅读。
他还有另一本中文版著作:《About Face 3 交互设计精髓》
《Why’s (Poignant) Guide to Ruby 》
如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。
《Unix 编程艺术》
It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian
《Practices of an Agile Developer / 高效程序员的 45 个习惯:敏捷开发修炼之道》
45个习惯,分为 7 个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。
每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。
《Test-Driven Development by Example. / 测试驱动开发》
前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展示了单元测试和 TDD 的重要性,并让我很快上手。 – Curro
我不关心你的代码有多好或优雅。如果你没有测试,你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆 bug,谈论那些东西毫无意义。– Adam Gent
《Don’t Make Me Think / 点石成金:访客至上的网页设计秘笈》
取决于你所追求的目标。我喜欢《代码大全》是因纯编程,《点石成金》是一本有关 UI 设计的卓越书籍。 – Justin Standard
《操作系统导论》
[美] 雷姆兹·H.阿帕希杜塞尔( Remzi H. Arpaci-Dusseau), [美]安德莉亚·C.阿帕希杜塞尔(Andrea C. Arpaci-Dusseau)
本书围绕虚拟化、并发和持久性这三个主要概念展开,介绍了所有现代系统的主要组件(包括调度、虚拟内存管理、磁盘和I/O子系统、文件系统)。全书共50章,分为3个部分,分别讲述虚拟化、并发和持久性的相关内容。作者以对话形式引入所介绍的主题概念,行文诙谐幽默却又鞭辟入里,力求帮助读者理解操作系统中虚拟化、并发和持久性的原理。