现在的位置: 首页 > 综合 > 正文

经典书籍

2018年04月08日 ⁄ 综合 ⁄ 共 11434字 ⁄ 字号 评论关闭

如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”

很多程序员响应,他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语。下面就按照各本书的推荐数排列。

 

1. 《代码大全》 史蒂夫·迈克康奈尔

推荐数:1684

code complete 代码大全

“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。”
—— Joel Spolsky

对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac

 

2. 《程序员修炼之道

推荐数:1504

Pragmatic Programmer 程序员修炼之道

对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel

3. 《计算机程序的构造和解释

推荐数:916

Structure and Interpretation of Computer Programs 计算机程序的构造和解释

就个人而言,这本书目前为止对我影响醉倒的一本编程书。

代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。

然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。

一些人认为此书不适合新手。个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。

你还不确信么?那就读读第一版的前言或序言。网上有免费的电子版。 - Antti Sykäri

 

4. 《C程序设计语言

推荐数:774

The C Programming Language C程序设计语言

这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。(这对理解“底层”非常重要)—— Nathan

 

5. 《算法导论

推荐数:671

Introduction to algorithms 算法导论

代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……

在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron

 

6. 《重构:改善既有代码的设计

推荐数:617

Refactor 重构:改善既有代码的设计

我想我不得不推荐《重构》:改进现有代码的设计。——
Martin

我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler

 

7. 《设计模式

推荐数:617

Design Patterns 设计模式

就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术,因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。——
Chris Jester-Young

 

8. 《人月神话

推荐数:588

The Mythical Man-Month 人月神话

 

9. 《计算机程序设计艺术

推荐数:542

The Art of Computer Programming 计算机程序设计艺术

这是高德纳倾注心血写的一本书。—— Peter Coulton

 

10. 《编译原理(中文版) | 英文版(龙书)

推荐数:462

Compilers: Principles, Techniques, and Tools 编译原理:原理、技术与工具

我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB

 

11. 《深入浅出设计模式(中文版) | 英文影印版

推荐数:445

我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。-
Calanus

 

12. 《哥德尔、艾舍尔、巴赫书:集异璧之大成

推荐数:437

如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik

 

13. 《代码整洁之道

推荐数:329

虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。
– Craig P. Motlin

 

14. 《Effective
C++
》和《More
Effective C++

推荐数:297

在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。

去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。
– John Channing

 

15. 《编程珠玑

推荐数:282

尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。
– Matt Warren

 

16. 《修改代码的艺术》by Michael Feathers

我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte

同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

 

17. 《编码:隐匿在计算机软硬件背后的语言

我推荐Charles Petzold的《编码》。在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil

 

18. 《禅与摩托车维修艺术 /
Zen and the Art of Motorcycle Maintenance》

对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是,要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr

(编注:关于这本书,也可以看看阮一峰的读后感。)

 

19. 《Peopleware / 人件集:人性化的软件开发

Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。他们的答案并不简单,只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni

 

20. 《Coders at Work / 编程人生

一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq

 

21. 《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!》

虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

 

22. 《Effective
Java
 中文版》

此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar

 

23. 《Patterns of Enterprise Application Architecture / 企业应用架构模式》

很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》-
levi rosol

 

24. 《The
Little Schemer
》和《The Seasoned Schemer
 nmiranda

这两本是LISP的英文书,尚无中文版。美国东北大学网站上也有电子版。

 

25. 《交互设计之路》英文名:《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 交互设计精髓

 

26. 《Why’s
(Poignant) Guide to Ruby
 》

如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。

 

27. 《Unix编程艺术

It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian

 

28. 《Practices of an Agile Developer / 高效程序员的45个习惯:敏捷开发修炼之道

45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。

 

29. 《Test-Driven Development by Example. / 测试驱动开发

前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro

我不关心你的代码有多好或优雅。如果你没有测试,你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent

 

30. 《Don’t Make Me Think / 点石成金:访客至上的网页设计秘笈

取决于你所追求的目标。我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard

 

【更新】:2012年8月17日19:08:39

最近有其他网站转载此文,但标题被改为《一个合格的程序员应该读的30本书》。这标题改的不好,偏离原文意思了。况且上文中不止提到了30本书。

今日重看 SO 那个原帖,发现于今年年初被关闭了。不过有人做了汇总,把其他回复中提到的书籍,放在投票数最高的回复中。

《Modern C++ Design》 by Andrei Alexandrescu

Best
Software Writing I
》 by Joel Spolsky

《The Practice of Programming | 程序设计实践》by Kernighan and Pike

《Pragmatic Thinking and Learning: Refactor Your Wetware》 by Andy Hunt

《Software Estimation: Demystifying the Black Art》 by Steve McConnel

《The Passionate Programmer| 我编程,我快乐:程序员职业规划之道》by Chad Fowler

《Hackers: Heroes of the Computer Revolution | 黑客:计算机革命的英雄》

《Algorithms + Data Structures = Programs》

《Writing Solid Code》

JaveScript:The Good Parts | JavaScript语言精粹》

《Getting Real 》by 37 Signals

Foundations of Programming 》by Karl Seguin

《Computer Graphics: Principles and Practice in C (2nd Edition) | 计算机图形学原理及实践:C语言描述》

《Thinking in Java | Java编程思想》by
Bruce Eckel

《The Elements of Computing Systems》

《Refactoring to Patterns | 重构与模式 》
by Joshua Kerievsky

Modern
Operating Systems
 | 现代操作系统》by Andrew S. Tanenbaum

《The Annotated Turing》

《Things That Make Us Smart》 by Donald Norman

《The Timeless Way of Building | 建筑的永恒之道 》by
Christopher Alexander

《The Deadline: A Novel About Project Management》 by Tom DeMarco

《The C++ Programming Language | C++程序设计语言》by Stroustrup

Patterns
of Enterprise Application Architecture
 | 企业应用架构模式

《Computer Systems – A Programmer’s Perspective | 深入理解计算机系统》

《Agile Principles, Patterns, and Practices in C#》 by Robert C. Martin

Growing
Object-Oriented Software, Guided by Tests

《Framework Design Guidelines | .NET设计规范:约定、惯用法与模式》 by Brad Abrams

《Object Thinking》 by Dr. David West

《Advanced Programming in the UNIX Environment | UNIX环境高级编程》 by W. Richard Stevens

《Hackers and Painters: Big Ideas from the Computer Age  | 黑客与画家》

《The Soul of a New Machine | 新机器的灵魂》 by Tracy Kidder

CLR
via C#
 | 框架设计》 by Jeffrey Richter

Design
Patterns in C#
》 by Steve Metsker

《Alice in Wonderland | 爱丽丝梦游仙境》 by Lewis Carol

Zen
and the Art of Motorcycle Maintenance
 | 禅与摩托车维修艺术》by
Robert M. Pirsig

《About Face – The Essentials of Interaction Design | About Face3交互设计精髓

《Here Comes Everybody: The Power of Organizing Without Organizations | 未来是湿的:无组织的组织力量》 by Clay Shirky

《The Tao of Programming》

《Computational Beauty of Nature》

Philip and Alex’s Guide to Web Publishing

《Object-Oriented Analysis and Design with Applications | 面向对象分析与设计》 by Grady Booch

Effective
Java
 | Effective Java中文版》 by Joshua Bloch

《Computability: An Introduction to Recursive Function Theory》 by N. J. Cutland

《Masterminds of Programming | 编程大师智慧/编程之魂》

《Tao Te Ching | 道德经》

《The Productive Programmer | 卓有成效的程序员

《The Art of Deception》 by Kevin Mitnick

《The Career Programmer: Guerilla Tactics for an Imperfect World》 by Christopher Duncan

《Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp》

《Masters of Doom | Doom启示录》

Pragmatic
Unit Testing in C# with NUnit
》 by Andy Hunt and Dave Thomas with Matt Hargett

《How To Solve It: A New Aspect of Mathematical Method | 怎样解题:数学思维的新方法》 by George Polya

《The Alchemist | 牧羊少年奇幻之旅》 by Paulo Coelho

《Smalltalk-80: The Language and its Implementation》

《Writing Secure Code (2nd Edition) 》by Michael Howard

《Introduction to Functional Programming》 by Philip Wadler and Richard Bird

《No Bugs!: Delivering Error Free Code in C and C++》 by David Thielen

《Rework | 重来:更为简单有效的商业思维》 by Jason Freid and DHH

《JUnit in Action | JUnit实战》

 

 

后语

除这个书单之外,曾经也有微博网友推荐《一些经典的计算机书籍》,大约在50本。

以下列表中的计算机书籍(中文版)来自微博:@程序员的那些事 粉丝的推荐。按推荐次数,从高到低往下排。如果大家还有其他计算机相关的经典书籍推荐,请在评论中留言,或者在这条微博的评论中留言,我们将继续扩充这个列表。

  1. 算法导论(第2版)
  2. 代码大全(第2版)
  3. C++
    Primer中文版
    (第4版)
  4. 设计模式:可复用面向对象软件的基础
  5. 浪潮之巅
  6. Java编程思想(第4版)
  7. Java核心技术 卷1:基础知识
  8. Java核心技术 卷2:高级特性
  9. 人月神话
  10. Linux内核编程
  11. C程序设计语言(第2版新版)
  12. 黑客与画家:硅谷创业之父Paul Graham文集
  13. 编程之美:微软技术面试心得
  14. 代码之美
  15. 软件随想录:程序员部落酋长Joel谈软件
  16. 架构之美
  17. 国外计算机科学经典教材:Unix
    & Linux大学教程
  18. 深入理解计算机系统(原书第2版)
  19. UNIX网络编程 卷1:套接字联网API
  20. UNIX网络编程 卷2:进程间通信
  21. 自动机理论、语言和计算导论
  22. 软件架构的艺术
  23. Effective
    C++中文版
  24. Effective
    Java中文版
    (第2版)
  25. PHP
    & MySQL Web数据库应用开发指南
    (第2版)
  26. PHP经典实例(第2版)
  27. C++ 编程思想 第1卷
  28. C++ 编程思想 第2卷 
     两卷合订本
  29. Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
  30. 数据库系统导论(原书第8版)
  31. Python参考手册(第4版)
  32. Python灰帽子
  33. 提高C++性能的编程技术
  34. 从网管员到CTO:网络设备配置与管理实战详解
  35. 深入理解计算机系统(修订版)
  36. UNIX编程艺术
  37. 深入理解Java虚拟机:JVM高级特性与最佳实践
  38. Microsoft.NET框架程序设计
  39. 代码整洁之道
  40. 编程珠玑(第2版)、编程珠玑(续)
  41. 大话设计模式
  42. C#开发宝典
  43. 深入理解Linux内核(第3版)
  44. UNIX环境高级编程 (第2版)
  45. WCF服务编程:.NET开发者决战SOA的制胜利剑(第3版)
  46. 现代编译原理:C语言描述 (虎书)
  47. 高级编译器设计与实现 (鲸书)
  48. 编译原理(第2版)(龙书)
  49. Windows核心编程 (第5版)
  50. C++标准程序库:自修教程与参考手册
  51. 设计原本:计算机科学巨匠Frederick
    P.Brooks的思考
  52. 软件框架设计的艺术

====================================================================

在之前的一篇博客中我曾提到:程序员成功的秘诀在于创意和原创性思维。

但是如果你没有创意该怎么办?别担心,并非只有你这样。事实上,你所遇到的大部分程序员都缺乏创意。原因在于,跟编程中客观的逻辑性思维相比,创意需要一种不同的思维方式。

幸运的是,创新思维是可以学习的。我列出了一个可以激发创意的书籍清单。(注:排名不分先后,有两本书没有相应中文名,应该是没有中文版)

Pragmatic
Thinking and Learning: Refactor Your Wetware
》 – Andy Hunt 安迪·亨特

这是一本为程序员量身定制的激发创意的书,作者安迪自己也是一名程序员。(他也是《程序员修炼之道:从小工到专家》的作者之一)。

Thinkertoys:
A Handbook of Creative-Thinking Techniques
 – Michael Michalko
米哈尔科商业创意全攻略
– 迈克尔·米哈尔科

迈克尔·米哈尔科通过带领你解决一些拼图游戏来迫使你改变思维方式。对于那些缺乏创意的人来说这可能往往是一项艰巨的任务。

Thinkpak:
A Brainstorming Card Deck
 – 
Michael Michalko迈克尔·米哈尔科

这并不是一本真正的书。基于从《米哈尔科商业创意全攻略》中学到的技术,迈克尔·米哈尔科做了一副卡片,你可以用这副卡片来激发自己的创意,并将你的创意运用于实际应用中。

Cracking
Creativity: The Secrets of Creative Genius
 – 
Michael Michalko
《创意的技术:100位天才的9种思考习惯》- 迈克尔·米哈尔科

迈克尔·米哈尔科的三本书(资料)中的最后一本。在这本书中,迈克尔着重讲了如何像历史上包括莱昂纳多·达·芬奇和华特·迪士尼在内的创意天才一样进行思考。

How
to Get Ideas
 – Jack Foster, Larry Corby
《更多好主意》- 杰克·福斯特 & 拉里·科比

拥有原创性的想法是有创意的一个表现,但这些想法从何而来呢?这本书会告诉你如何激发产生新的想法,并让你达到更高的水平。

The
Innovator’s Toolkit: 50+ Techniques for Predictable and Sustainable Organic Growth
– David Silverstein, Philip Samuel, Neil DeCarlo
《创新者工具箱: 50+可预见与可持续创新技术》- 大卫·西尔弗斯坦,菲利普·塞缪尔,尼尔·戴卡洛

创新与科技的发展是相辅相成的。以Apple或Google公司为例,这些公司在不断地创新计算机硬件和软件。Silverstein等人写的这本书对创新者来说是一本非常棒的参考书。要想成为一名成功的创新者,你也必须是一名充满创意的思想者。

编程是非常简单的,如果你正在读这篇博客,那么你很可能已经掌握了至少一门编程语言。现在你知道了如何才能达到更高的水平:要有创意

如果还有有其他书籍激励你成为一名有创意的创新者,或者你知道本文中那两本没有中文译名书籍的中文名,请在微博或评论中和大家一起分享。

==================================================================================

Coding Practice | 编程实践

基础篇

Clean Code《代码整洁之道》

Pragmatic Unit Testing《单元测试之道》

The Productive Programmer《卓有成效的程序员》

Test-Driven Development By Example《测试驱动开发》

Clean Coder《程序员的职业修养》

The Art of Readable Code《编写可读代码的艺术》

进阶篇

Refactoring To Patterns《重构与模式》

Implementation Patterns《实现模式》

Code Complete《代码大全》

The Pragmatic Programmer《程序员修炼之道》

高级篇

Structure and Interpretation of Computer Programs《计算机程序的构造和解释》

Working Effectively with Legacy Code《修改代码的艺术》

Architecture & Design | 架构与设计

基础篇

Agile Software Development 《敏捷软件开发:原则、实践与模式》

Head First Design Patterns《深入浅出设计模式

Design Patterns 《设计模式》

进阶篇

The Art of UNIX Programming 《Unix编程艺术》

Practical API Design 《框架设计的艺术》

Domain Specific Languages 《领域特定语言》

Patterns of Enterprise Application Architecture 《企业应用架构模式》

高级篇

Release It Domain-Driven Design 《领域驱动设计》

Enterprise Integration Patterns《企业集成模式》

Beautiful Architecture《架构之美》

Pattern-Oriented Software Architecture《面向模式的软件架构》

Methodology | 方法学

基础篇

User Stories Applied《用户故事与敏捷方法》

The Gold Mine《金矿》

Scrum and XP From the Trenches《硝烟中的Scrum和XP》

Continuous Integration《持续集成》

Extreme Programming Explained《解析极限编程》

进阶篇

Lean Thinking《精益思想》

Continuous Delivery《持续交付》

How Google Tests Software Agile Testing Extreme Programming Refactored《重构极限编程》

高级篇

Specification By Example

Thought & Leadership | 思想与领导力

基础篇

The Effective Executive《卓有成效的管理者》

Are Your Lights On?《你的灯亮着吗》

Becoming A Technical Leader《成为技术领导者》

进阶篇

The Fifth Discipline《第五项修炼》

The Design Of Business Management 3.0《管理3.0:培养和提升敏捷领导力》

Presentation To Win The McKinsey Way《麦肯锡方法》

高级篇

Thinking, Fast and Slow《思考,快与慢》

=======================================================================================

抱歉!评论已关闭.