25本最受推崇的编程书
1. 《程序员修炼之道》(推荐67%)
The Pragmatic Programmer:From Journeyman to Master
作者:[美]Andrew Hunt,David Thomas
内容简介:
《程序员修炼之道》之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,是因为它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特定语言、框架和方法。
“要把低级的知识放在代码中,它属于那里;把注释保留给其他的高级说明。”
—— 引自 第2章 务实的方法
2.《代码整洁之道》(推荐66%)
Clean Code:A Handbook of Agile Software Craftsmanship
作者:[美]Robert C. Martin
内容简介:
干净的代码,既在质量上较为可靠,也为后期维护和升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践,并辅以来自实际项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。
“我们都曾经瞟一眼自己亲手造成的混乱,决定弃之不顾,走向新一天。 我们都曾经看到自己的烂代码居然能运行,然后断言能运行的烂程序总比没有强。 我们都曾经说过有朝一日再回头清理。当然,那些日子里,我们都没听过勒布朗( LeBlanc )法则:稍后等于永不( Later equals never.) 。”
——引自 第1章 1.2 糟糕的代码
3.《代码大全》(推荐42%)
Code Complete
作者:[美]Steve McConnell
内容简介:
本书被广泛认为是编程的最佳实用指南,其十多年来一直帮助开发人员编写更好的软件。
这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。
“有效地管理(需求)变更是实现高质量的一个关键。”
——引自 第20章 软件质量概述
4. 《重构》(推荐35%)
Refactoring: Improving the Design of Existing Code
作者:[美]Martin Fowler
内容简介:
书中清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了60多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。
本书提出的重构准则将帮助开发人员一次一小步地修改代码,从而减少开发过程中的风险。
“过去20年,《重构》一直是我案头必备的图书。每次重读,仍有感悟。对我而言,《重构》的意义不只在于指导代码重构,更在于让人从一开始就知道什么是好的代码,并且尽量写出没有'坏味道'的代码。Martin Fowler这次对本书进行的重构,体现了近年来编程领域的一些思潮变化。看来,既有设计,永远有改进空间。”
——韩磊,《代码整洁之道》译者
5.《深入浅出设计模式》(推荐29.4%)
Head First Design Patterns
作者:[美]Eric Freeman,Bert Bates,Kathy Sierra,Elisabeth Freeman
内容简介:
本书向您展示了功能强大、优雅、可重用、灵活的设计模式,并利用认知科学和学习理论的最新研究来创造多感官的学习体验,采用视觉丰富的形式,专门为大脑的工作方式而设计,而不是使您沉入睡眠的繁琐的文本输入法形式。
“针对接口编程,而不是针对实现编程。”
——引自 影印版 第11页
6.《人月神话》(推荐27.9%)
The Mythical Man-Month:Essays on Software Engineering
作者:[美]Frederick P. Brooks Jr
内容简介:
本书内容源于作者Brooks在IBM公司任System/360计算机系列以及其庞大的软件系统OS/360项目经理时的实践经验。在本书中,Brooks为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践,为每个复杂项目的管理者给出了自己的真知灼见。
“简洁和直白来自概念的完整性。每个部分必须反映相同的原理、原则和一致的折衷机制。在语法上,每个部分应使用相同的技巧;在语义上,应具有同样的相似性。因此,易用性实际上需要设计的一致性和概念的完整性。”
——引自 章节 团队的性质
7. 《代码整洁之道:程序员的职业素养》(推荐27.9%)
The Clean Coder:A Code of Conduct for Professional Programmers
作者:[美]Robert C. Martin
内容简介:
本书是编程大师 Bob 大叔 40 余年编程生涯的心得体会, 讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。
“软件行业的飞速改变,意味着软件开发人员必须坚持广泛学习才不至于落伍。”
——引自 第1章 专业主义
8.《修改代码的艺术》(推荐26.4%)
Working Effectively with Legacy Code
作者:[美]Michael Feathers
内容简介:
世界级计算机专家Michael C. Feathers的经典之作,软件开发大师Robert C. Martin作序倾情推荐,修改遗留代码的权威指南。深入剖析修改遗留代码的各种方法和策略,从理解遗留代码、为其编码测试、重构及增加特性等方面给出大量实用建议,是所有程序开发人员必读之作。
“封装是好事情,但可别对测试人员这么说,他们可不这样想。过分庞大的类往往隐藏了过多的东西。”
——引自 第20章 处理大类
9. 《设计模式》(推荐25%)
Design Patterns
作者:[美]Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
内容简介:
四位顶尖的设计师在面向对象软件的设计方面积累了丰富的经验,针对常见的设计问题提出了一系列简洁、明了的解决方案。这23种设计模式可让设计人员创建更加灵活,美观,可重用的设计,而无需自己再寻找解决方案。
“将系统分解成对象集合要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等等,它们都影响着系统的分解,并且这些因素通常还是互相冲突的。”
——引自 第1章 1.5 组织编目
10. 《程序员面试金典(第6版)》(推荐22%)
Cracking the Coding Interview
作者:[美]Gayle Laakmann McDowell
内容简介:
本书层层紧扣程序员面试的每一个环节,全面而详尽地介绍了程序员应当如何应对面试,才能在面试中脱颖而出。
内容主要涉及面试流程解析,面试官的幕后决策及可能提出的问题,面试前的准备工作,对面试结果的处理,以及出自微软、苹果、谷歌等多家知名公司的189道编程面试题及详细解决方案。
第6版修订了上一版中一些题目的解法,为各章新增了介绍性内容,加入了更多的算法策略,并增添了对所有题目的提示信息。
“我不是招聘人员,我是软件工程师。因此,我知道要当场提出出色的算法,然后在白板上编写无瑕的代码是什么感觉。 作为候选人和面试官,我都经历过这个过程。”
——引自 序
11. 《软技能》(推荐22%)
Soft Skills:The Sofeware Developer's Life Manual
作者:[美]John Sonmez
内容简介:
这是一本真正从“人”(既非技术也非管理)的角度关注软件开发人员自身发展的书。
开发人员兼生活教练John Sonmez就重要的“软”主题向开发人员提供了建议,例如职业和生产力,个人理财和投资,甚至健身和人际关系。
这本有趣的书以71个简短章节的集合为基础,邀请您随时随地欣赏。每章末尾的“采取行动”部分向您展示了如何快速获得结果。
“只有你开始把自己当作一个企业去思考时,你才能开始做出良好的商业决策。”
——引自 第2章 从非同凡响开始
12. 《点石成金》(推荐19.1%)
Don't Make Me Think
作者:[美]Steve Krug
内容简介:
本书是一本关于Web设计原则的书,为你揭示Web设计中重要但却容易被忽视的问题,只需几个小时,你便能对照书中讲授的设计原则找到网站设计的症结所在,令你的网站焕然一新。
“我们使用web的三个事实:1.我们不是阅读,而是扫描;2.我们不做最优选择,而是满意即可;3.我们不是追根究底,而是勉强应付。”
——引自 第2章 我们实际上是如何使用Web的
13. 《编码:隐匿在计算机软硬件背后的语言》(推荐19.1%)
Code:The Hidden Language of Computer Hardware and Software
作者:[美]Charles Petzold
内容简介:
一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。
更重要的是,你会因此而获得对计算机工作原理较深刻的理解。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。
不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的菜鸟,都不妨翻阅一下本书,读一读大师的经典作品,必定会有收获。
“正如通过研究莫尔斯码我们可以很方便地了解编码的本质一样,通过发报机来了解计算机硬件也是个不错的途径。”
——引自 第2章 编码与组合
14.《算法导论》(推荐17.6%)
Introduction to Algorithms
作者:[美]Thomas H. Cormen,Charles E. Leiserson,Ronald Livest,Clifford Stein
内容简介:
本书将严谨性和全面性融为一体,深入讨论各类算法;各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,同时又不失深度和数学严谨性。
本书对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。
“动态规划算法的设计可以分为如下四个步骤:1.描述最优解的结构。2.递归定义最优解的值。3.按自底向上的方式计算最优解的值。4.由计算出的结果构造一个最优解。”
——引自 第15章 动态规划
15. 《人件》(推荐17.6%)
Peopleware:Productive Projects and Teams
作者:[美]Tom DeMarco,Tim Lister
内容简介:
本书是软件管理领域的传奇经典,被誉为“对美国软件业影响最大的一本书”。
全书从管理人力资源、创建健康的办公环境、雇用并留用正确的人、高效团队形成、改造企业文化和快乐工作等多个角度阐释了如何思考和管理软件开发的最大问题——人(而不是技术),以得到高效的项目和团队。
“加班就像冲刺:跑马拉松跑到最后100码,体力还有剩余才算有意义。若一开始就冲刺,那你纯粹就是浪费时间。让人们过度冲刺,只能让大家失去对管理者的尊重。”
——引自 章节 西班牙理论
16.《编程珠玑》(推荐16.1%)
Programming Pearls
作者:[美]Jon Bentley
内容简介:
本书是计算机科学方面的经典名著,书的内容围绕程序设计人员面对的一系列实际问题展开。
作者Jon Bentley 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。
本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行透彻而睿智的描述,为复杂的编程问题提供清晰而完备的解决思路。
本书对各个层次的程序员都具有很高的阅读价值。
“将重复性代码改写到数组中,封装复杂的结构,尽可能地使用高级工具,让数据去构造程序。”
——引自 第3章 数据决定程序结构
17. 《企业应用架构模式》(推荐14.7%)
Patterns of Enterprise Application Architecture
作者:[美]Martin Fowler
内容简介:
作者是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台,关于解决方案的不可或缺的手册。
“关系数据库的映射开销大概是程序开发总开销的 1/3。现代的系统允许把引用完整性检查延迟到交互结束的时候进行。如果有这个能力,没有道理不使用它。”
——引自 第2章 组织领域逻辑
18. 《计算机程序的构造和解释》(推荐13.2%)
Structure and Interpretation of Computer Programs
作者:[美]Harold Abelson、Gerald Jay Sussman、Julie Sussman
内容简介:
在过去的二十多年里,《计算机程序的构造和解释》对计算机科学的教育计划产生了深刻的影响。这一期待已久的修订版对全文进行了更改。本书中大多数的主要编程系统都有新的实现方式,包括解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。
“ 计算机革命是关于我们如何去思考,以及如何去表达自己的思考的。在这个变化里,最基本的东西就是出现了一种或许最好称为过程性认识论的现象——如何从命令式的观点去研究知识的结构,这一观点与经典数学领域中所采用的更具说明性的观点是完全不同的。数学为精确处理 ' 是什么 ' 提供了一种框架,而计算则为精确处理 ' 怎样做 ' 提供了一种框架。”
——引自 前言
19. 《计算机程序设计艺术》(推荐10.2%)
The Art of Computer Programming
作者:[美]Donald E. Knuth
《计算机程序设计艺术》系列是公认的计算机科学领域经典之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。
“计算机科学既壮观又幽美,我尝试尽自己所能,以恰当的方式来解释我所了解的某些片断。很显然,我自己并没有任何超自然能力,但的确很喜欢讲述那些似乎静静地等待着人们去讲出来的故事。写书跟讲故事十分类似。”
——图灵访谈之专访Donald E. Knuth
20.《领域驱动设计》(推荐10.2%)
Domain-Driven Design:Tackling Complexity in the Heart of Software
作者:[美]Eric Evans
内容简介:
本书是领域驱动设计方面的经典之作,全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一起,并融入了作者的见解和经验,展现了一些可扩展的设计新实践、已验证过的技术以及便于应对复杂领域的软件项目开发的基本原则。
“至少20年前,一些顶尖的软件设计人员就已经认识到领域建模和设计的重要性,但是令人惊讶的是,这么长时间以来很少有人写出点什么,告诉大家应该做哪些工作以及如何去做。尽管这些工作还没有被清楚地表述出来,但是一种新的思潮已经形成,它像一股暗流一样在对象社区中涌动,我把这种思潮称为 ' 领域驱动设计 ' 。”
——引自 前言
21. 《编程人生》(推荐10.2%)
Coders At Works
作者:[美] Peter Seibel
内容简介:
这是一本访谈笔录,记录了当今世界最具个人魅力的15位软件先驱的编程生涯,包括DonaldKnuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在内的业界传奇人物。
本书为我们讲述他们是怎么学习编程的,在编程过程中发现了什么以及他们对未来的看法,并对诸如应该如何设计软件等长久以来一直困扰很多程序员的问题谈了自己的观点。
“真想做到跨平台的话,就必须同时开发。所谓的移植只会令产品在第二平台上蹩脚不堪。”
——引自 第1篇 Jamie Zawinski
22. 《快速软件开发》(推荐8.8%)
Rapid Development:Taming Wild Software Schedules
作者:[美]Steve McConnell
内容简介:
公司和商业软件开发团队都希望找到一个重要问题的解决方案,那就是如何掌控他们的高压开发进度。在《快速软件开发》中,作者Steve McConnell谈到了通过整体策略,特定的最佳实践和重要的技巧来解决这个问题,这些技巧有助于缩小和控制开发进度并保持项目的进展。
《快速软件开发》是有效的应用程序开发指南。
“毫无疑问,激励是决定工作表现最重要的影响因素。大多数关于生产率的研究表明,激励对生产率的影响比任何其他因素都大。”
—— 引自 第11章 激励机制
23. 《Python编程无师自通 专业程序员的养成》(推荐8.8%)
The Self-Taught Programmer:The Definitive Guide to Programming Professionally
作者:[美]Cory Althoff
内容简介:
本书作者是一名自学成才的程序员,经过一年的自学,掌握了编程技能并在eBay找到了一份软件工程师的工作。本书是作者结合自己学习编程的过程以及工作经验写作而成,旨在帮助读者从外行成长为一名专业的Python程序员。
本书不仅教读者如何使用Python语言编程,还会介绍其他书中所忽略的、编程初学者应该了解并掌握的其他所有知识点。
“不管你从事什么工作,编程都有助于你的职业发展。学习编程将给你自己赋能。我喜欢尝试新想法,时刻都有希望启动的新项目。学会编程后,我就可以坐下来自己实现,而不需要依赖他人。”
——引自 第1章 1.6 为什么应该编程
24. 《算法》(推荐8.8%)
Algorithms
作者:[美]Robert Sedgewick,Kevin Wayne
内容简介:
本书作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。第4版具体给出了每位程序员应知应会的50个算法,提供了实际代码,而且这些Java代码实现采用了模块化的编程风格,读者可以方便地加以改造。
“深入浅出,非常经典。印象最深的是在红黑树一章里面,用了一个 2-3 搜索树的例子来加强理解,书中所附的代码都非常简短精致。有意在 IT 行业向技术方向发展的同学们都应该读一下,强烈推荐。”
——读者·Ted
25. 《持续交付》(推荐8.8%)
作者:[英]Jez Humble,David Farley
内容简介:
本书讲述了如何实现更快、更可靠、低成本的自动化软件交付。
本书由三部分组成。第一部分阐述了持续交付背后的一些原则,以及支持这些原则的实践。第二部分是本书的核心,全面讲述了部署流水线。第三部分围绕部署流水线的投入产出讨论了更多细节,包括增量开发技术、高级版本控制模式,以及基础设施、环境和数据的管理和组织治理。
“这是一本清晰、准确、精心编写的书,力求让读者明白发布过程究竟应该是什么样子。作者以渐进的方式一步步地阐述了软件部署中的理想状态与障碍。本书是每位软件工程师的必备读物。”
——Leyna Cotran,加利福尼亚大学欧文分校软件研究所
GitHub传送门
daolf/Most-recommended-programming-books