转载一篇特别棒的文章 , 程序员必读书单 1.0 - Lucida,来自 Google 的工程师
这篇文章真的特别赞,对我的帮助特别大,感觉一定要分享出来.感谢Lucida,来自Google的工程师.
人类文明的基石是传承,学习前人总结出来的知识和经验,真的特别重要,可以加快我们的成长,少走弯路.
转载自:http://lucida.me/blog/developer-reading-li...
以下是原文:
本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。
前言
Reading makes a full man; conference a ready man; and writing an exact man.
Francis Bacon
优秀的程序员应该具备两方面能力:
-
良好的 程序设计 能力:
- 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列);
- 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络);
- 熟悉至少两门以上编程语言(例如 C++,Java,C#,和 Python);
-
专业的 软件开发 素养:
- 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码;
- 把握客户需求,按时交付客户所需要的软件产品;
- 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。
和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的——尤其是经典图书,它们都能够拓宽程序员的视野,提高程序员的成长速度。
在过去几年的学习和工作中,我阅读了大量的程序设计/软件开发书籍。随着阅读量的增长,我意识到:
- 经典书籍需要不断被重读——每一次重读都会有新的体会;
- 书籍并非读的越多越好——大多数书籍只是经典书籍中的概念延伸(有时甚至是照搬);
意识到这两点之后,我开始思考一个很 功利 的问题:如何从尽可能少的书中,获取尽可能多的关键知识?换句话说:
- 优秀的程序员应该掌握哪些关键概念?
- 哪些书籍来可以帮助程序员掌握这些关键概念?
这即是这篇文章的出发点——我试图通过 程序员必读书单 这篇文章来回答上面两个问题。
标准
进入必读书单之前,我先介绍下书单里的书籍选择标准和领域选择标准。当然你也 点击这里 直接跳转到书单开始阅读。
书籍选择标准
-
必读:什么是必读书籍呢?如果学习某项技术有一本书无论如何都不能错过,那么这本书就是必读书籍——例如 Effective Java 于Java, CLR via C# 于C#;
- 注意我没有使用“经典”这个词,因为经典计算机书籍往往和计算机科学联系在一起,而且经典往往需要10年甚至更长的时间进行考验;
-
注重实践,而非理论:所以这个书单不会包含过于原理性的书籍;
-
入门—必读—延伸:必读书籍的问题在于:1. 大多不适合入门;2. 不够全面。考虑到没有入门阅读和延伸阅读的阅读列表是不完整的——所以书单中每个关键概念都会由一本入门书籍,一本必读书籍(有时入门书籍和必读书籍是同一本),和若干延伸阅读书籍所构成。
概念选择标准
- 全面:全面覆盖软件开发中重要的概念;
- 通用:适用于每一个程序员,和领域特定方向无关;
- 注重基础,但不过于深入:优秀的程序员需要良好的计算机科学基础,但程序员并没必要掌握过于深入的计算机科学知识。以算法为例,每个程序员都应该掌握排序、链表、栈以及队列这些基本数据结构和算法,但计算几何、线性规划和网络流这些算法可能就不是每个程序员都需要掌握的了;
通过这几个标准,我把程序员应掌握的关键概念分为程序设计,软件开发,以及个人成长三大类,每一大类均由若干关键概念组成。
快速通道
自从开博以来,经常会有朋友在论坛,微博,和QQ上提问学习X技术读什么书合适(例如:学习Java读什么书合适?如何学习程序设计?)所以我在这里列出了一个“快速通道”——把常见的问题集中在一起,点击问题,即可直接进入答案。(当然,如果你把本文从头读到尾帮助会更大 :-))
- 如何学习计算机基础知识?
- 如何学习 C 语言?
- 如何学习 C++?
- 如何学习 Java?
- 如何学习 C#?
- 如何学习 JavaScript?
- 如何学习 Python?
- 如何加深对编程语言的理解?
- 如何学习程序设计技巧?
- 如何学习算法?
- 如何高效的调试程序?
- 如何掌握良好的编程实践?
- 如何学习面向对象程序设计?
- 如何对代码进行重构?
- 如何更好的进行软件测试?
- 如何管理软件团队/软件项目?
- 如何成为一名更专业的程序员?
- 程序员如何学习设计?
- 程序员如何进行职业规划?
- 如何提高自己的思维能力?
- 如何进行高效求职面试?
- 如何提高自己的英语写作能力?
程序员必读书单
入门书籍
程序设计:
-
编程语言 :
软件开发:
- 编程实践 : 程序设计实践
- 面向对象程序设计 : Head First设计模式
- 重构 : 重构
- 软件测试 : How to Break Software
- 项目管理 : 极客与团队
- 专业开发 : 程序员修炼之道:从小工到专家
- 大师之言 : 奇思妙想:15 位计算机天才及其重大发现
- 界面设计 : 写给大家看的设计书
- 交互设计 : 通用设计法则
个人成长:
- 职业规划 : 软件开发者路线图
- 思维方式 : 程序员的思维修炼:开发认知潜能的九堂课
- 求职面试 : 金领简历:敲开苹果微软谷歌的大门
- 英语写作 : The Only Grammar Book You’ll Ever Need
必读书籍
程序设计:
-
编程语言 :
软件开发:
- 编程实践 : 代码大全(第 2 版)
- 面向对象程序设计 : 设计模式
- 重构 : 修改代码的艺术
- 软件测试 : xUnit Test Patterns
- 项目管理 : 人月神话
- 专业开发 : 程序员职业素养
- 大师之言 : 编程人生:15 位软件先驱访谈录
- 界面设计 : 认知与设计:理解UI设计准则(第 2 版)
- 交互设计 : 交互设计精髓(第 3 版)
个人成长:
这个阅读列表覆盖了软件开发各个关键领域的入门书籍和必读书籍,我相信它可以满足绝大多数程序员的需求,无论你是初学者,还是进阶者,都可以从中获益:
- 基础理论 包括了程序员应该掌握的计算机基础知识;
- 编程语言 对软件开发至关重要,我选择了 C , C++ , Java , C# , Python ,和 JavaScript 这六门 主流编程语言 进行介绍,如果想进一步理解编程语言,可以阅读 编程语言理论 里的书目;
- 在理解编程语言的基础上,优秀的程序员还应该了解各种 程序设计 技巧,熟悉基本的 算法数据结构 ,并且能够高效的进行 程序调试 。
- 良好的程序设计能力是成为优秀程序员的前提,但软件开发知识也是必不可少的:优秀的程序员应具备良好的 编程实践 ,知道如何利用 面向对象 , 重构 ,和 软件测试 编写可复用,可扩展,可维护的代码,并具备软件 项目管理 知识和 专业开发素养;
- 就像我们可以从名人传记里学习名人的成功经验,程序员也可以通过追随优秀程序员的足迹使自己少走弯路。 大师之言 包含一系列对大师程序员/计算机科学家的访谈,任何程序员都可以从中获益良多;
- 为了打造用户满意的软件产品,程序员应当掌握一定的 界面设计 知识和 交互设计 知识(是的,这些工作应该交给UI和UX,但如果你想独自打造一个产品呢?);
- 专业程序员应当对自己进行 职业规划 ,并熟悉程序员 求职面试 的流程,以便在职业道路上越走越远;
- 软件开发是一项需要不断学习的技能,学习 思维方式 可以有效的提升学习能力和学习效率;
- 软件开发是一项国际化的工作,为了让更多的人了解你的代码(工作),良好的 英语写作 能力必不可少。
尽管我尽可能的去完善这个书单,但受限于我的个人经历,这个书单难免会有所偏颇。所以如果你有不同的意见,或者认为这个书单漏掉了某些重要书籍,请在评论中指出,我会及时更新。:-)
程序设计
1. 基础理论
编码:隐匿在计算机软硬件背后的语言 这本书其实不应该叫编码——它更应该叫“Petzold教你造计算机”——作者 Charles Petzold创造性的以编码为主题,从电报机和手电筒讲到数字电路,然后利用 数字电路 中的逻辑门构造出 加法器 和 触发器 ,最后构造出一个完整的 存储程序计算机 。不要被这些电路概念吓到—— 编码 使用大量形象贴切的类比简化了这些概念,使其成为最精彩最通俗易懂的计算机入门读物。
深入理解计算机系统(第2版) 这本书的全名是:Computer Systems:A Programmer’s Perspective(所以它又被称为 CSAPP),我个人习惯把它翻译为程序员所需了解的计算机系统知识,尽管土了些,但更名副其实。
深入理解计算机系统 是我读过的最优秀的计算机系统导论型作品,它创造性的把操作系统,计算机组成结构,数字电路,以及编译原理这些计算机基础学科中的核心概念汇集在一起,从而覆盖了指令集体系架构,汇编语言,代码优化,计算机存储体系架构,链接,装载,进程,以及虚拟内存这些程序员所需了解的关键计算机系统知识。如果想打下扎实的计算机基础又不想把操作系统计算机结构编译原理这些书统统读一遍,阅读 深入理解计算机系统 是最有效率的方式。
延伸阅读:
- 世界是数字的 : K&R 中的 K( Brian Kernighan )的近作,这本书源自 Brian 在普林斯顿大学所教授的计算机基础课程,以通俗易懂的方式讲述了现代人所应了解的计算机知识和网络知识;
- 图灵的秘密:他的生平、思想及论文解读 : Charles Petzold 的另一部作品,这本书以图灵的论文论可计算数及其在判定问题上的应用( On Computable Numbers, with an Application to the Entscheidungsproblem )为主题,阐述了图灵机(现代计算机的始祖)的构造,原理,以及应用。
- 计算机系统概论(第2版) :另一部优秀的计算机系统导论型作品,和 深入理解计算机系统 不同,这本书采用自下而上的方式,从二进制,和数字逻辑这些底层知识一步步过渡到高级编程语言(C),从而以另一种方式理解计算机系统。
2. 编程语言
编程语言是程序员必不可少的日常工具。工欲善其事,必先利其器。我在这里给出了 C,C++,Java,C#,JavaScript,和Python 这六种 常用编程语言 的书单(我个人不熟悉 Objective-C 和 PHP,因此它们不在其中)。
需要注意的是:我在这里给出的是编程语言(Programming Language)书籍,而非编程平台(Programming Platform)书籍。以 Java 为例, Effective Java 属于编程语言书籍,而 Android编程权威指南 就属于编程平台书籍。
C
忘记谭浩强那本糟糕不堪的 C 程序设计, C和指针 才是 C 语言的最佳入门书籍。它详细但又不失简练的介绍了 C 语言以及 C 标准库的方方面面。
对于C语言初学者,最难的概念不仅仅是指针和数组,还有指向数组的指针和指向指针的指针。 C和指针 花了大量的篇幅和图示来把这些难懂但重要的概念讲的清清楚楚,这也是我推荐它作为C语言入门读物的原因。
尽管 C程序设计语言 是二十多年前的书籍,但它仍然是C语言——以及计算机科学中最重要的书籍之一,它的重要性不仅仅在于它用清晰的语言和简练的代码描述了 C 语言全貌,而且在于它为之后的计算机书籍——尤其是编程语言书籍树立了新的标杆。以至于在很多计算机书籍的扉页,都会有“感谢 Kernighan 教会我写作”这样的字样。
延伸阅读:
- C 专家编程 :不要被标题中的“专家”吓到,这实际是一本很轻松的书籍,它既包含了大量 C 语言技术细节和编程技巧,也包含了很多有趣的编程轶事;
- C 陷阱与缺陷 :书如其名,这本书介绍了 C 语言中常见的坑和一些稀奇古怪的编程“技巧”,不少刁钻的C语言面试题都源自这本小册子;
- C 语言参考手册 :全面且权威的 C 语言参考手册,而且覆盖 C99,如果你打算成为 C 语言专家,那么这本书不可错过;
- C 标准库 :给出了15个C标准库的设计思路,实现代码,以及测试代码,配合 C 程序设计语言 阅读效果更佳;
- C 语言接口与实现 :这本书展示了如何使用C语言实现可复用的数据结构,其中包含大量 C 语言高级技巧,以至于 Amazon 上排行第一的评论是 “Probably the best advanced C book in existance”,而排行第二的评论则是 “By far the most advanced C book I read”。
C++
作为C++的发明者,没有人能比 Bjarne Stroustrup 更理解C++。Bjarne在Texas A&M大学任教时使用C++为大学新生讲授编程,从而就有了 C++ 程序设计原理与实践 这本书——它面向编程初学者,既包含 C++ 教程,也包含大量程序设计原则。它不但是我读过最好的C++入门书,也是我读过最好的编程入门书。
比较有趣的是, C++ 程序设计原理与实践 直到全书过半都没有出现指针,我想这可能是Bjarne为了证明不学C也可以学好C++吧。
同样是 Bjarne Stroustrup 的作品, C++ 程序设计语言 是 C++ 最权威且最全面 的书籍。第4版相对于之前的版本进行了全面的更新,覆盖了第二新的C++ 11标准,并砍掉了部分过时的内容。
延伸阅读:
- A Tour of C++ :如果你觉得 C++程序设计语言 过于庞大,但你又想快速的浏览一遍新版 C++ 的语言特色,那么可以试试这本小红书;
- C++ 语言的设计与演化 :C++ 的“历史书”,讲述了 C++ 是如何一步一步从 C with Classes 走到如今这一步,以及 C++ 语言特性背后的故事;
- C++ 标准库(第2版) :相对于其它语言的标准库,C++ 标准库虽然强大,但学习曲线十分陡峭,这本书是学习 C++ 标准库有力的补充;
- 深度探索 C++ 对象模型 :这本书系统的讲解了 C++ 是如何以最小的性能代价实现对象模型,很多C++面试题(包括被问烂的虚函数指针)都可以在这本书里找到答案;
- Effective C++ 和 More Effective C++ :由于 C++ 的特性实在繁杂,因此很容易就掉到坑里。Effective 系列既讲述了 C++ 的良好编程实践,也包含C++的使用误区,从而帮你绕过这些坑。
Java
平心而论 Java 核心技术 (即Core Java)并不算是一本特别出色的书籍:示例代码不够严谨,充斥着很多与C/C++的比较,语言也不够简洁——问题在于Java并没有一本很出色的入门书籍,与同类型的 Java 编程思想 相比, Java 核心技术 至少做到了废话不多,与时俱进( Java 编程思想 还停留在 Java 6之前),矮子里面选将军, Java 核心技术 算不错了。
尽管 Java 没有什么出色的入门书籍,但这不代表 Java 没有出色的必读书籍。 Effective Java 是我读过的最好的编程书籍之一,它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的 Java 特性给出了充满洞察力的建议,以至于 Java 之父 James Gosling 为这本书作序:“我很希望 10 年前就拥有这本书。可能有人认为我不需要任何 Java 方面的书籍,但是我需要这本书。”
延伸阅读:
- 深入理解 Java 虚拟机(第2版) :非常优秀且难得的国产佳作,系统的介绍了 Java 虚拟机和相关工具,并给出了一些调优建议;
- Java 程序员修炼之道 :在这本书之前,并没有一本 Java 书籍系统详细的介绍 Java 7 的新特性(例如新的垃圾收集器,
try using
结构和invokedynamic
指令),这本书填补了这个空白; - Java 并发编程实践 :系统全面的介绍了 Java 的并发,如何设计支持并发的数据结构,以及如何编写正确的并发程序;
- Java Puzzlers :包含了大量的 Java 陷阱——以至于读这本书时我说的最多的一个词就是 WTF,这本书的意义在于它是一个 反模式 大全, Effective Java 告诉你如何写好的 Java 程序,而 Java Puzzlers 则告诉你糟糕的 Java 程序是什么样子。更有意思的是,这两本书的作者都是 Joshua Bloch 。
C
可能你会疑问我为什么会推荐这本接近 1200 页的“巨著”用作 C# 入门,这是我的答案:
- C# 的语言特性非常丰富,很难用简短的篇幅概括这些特性;
- 精通 C# 之所以有近 1200 页的篇幅,是因为它不但全面介绍了 C# 语言,而且还覆盖了 ADO.NET,WCF,WF,WPF,以及 ASP.NET 这些 .Net 框架。你可以把这本书视为两本书——一本 500 多页的 C# 语言教程和一本 600 多页的 .Net 平台框架快速上手手册。
- 尽管标题带有“精通”两字, 精通 C# 实际上是一本面向初学者的C#书籍,你甚至不需要太多编程知识,就可以读懂它。
CLR via C# 是C#/.Net最重要的书籍,没有之一。它全面介绍了 .Net 的基石—— CLR 的运行原理,以及构建于 CLR 之上的 C# 类型系统,运行时关系,泛型,以及线程/并行等高级内容。任何一个以 C# 为工作内容的程序员都应该阅读此书。
延伸阅读:
- 深入理解 C#(第 3 版) :C# 进阶必读,这本书偏重于C#的语言特性,它系统的介绍了C#从1.0到C# 4.0的语言特性演化,并展示了如何利用C#的语言特性编写优雅的程序;
- .NET设计规范(第 2 版) :C# 专业 程序员必读,从变量命名规范讲到类型系统设计原则,这本书提供了一套完整的.Net编程规范,使得程序员可以编写出一致,严谨的代码,
- C# 5.0 权威指南 :来自 O’Reilly 的 C# 参考手册,严谨的介绍了 C# 语法,使用,以及核心类库,C#程序员案头必备;
- LINQ to Objects Using C# 4.0 和 Async in C# 5.0 :LINQ 和
async
分别是 .Net 3.5 和 .Net 4.5 中所引入的最重要的语言特性,所以我认为有必要在它们上面花点功夫——这两本书是介绍 LINQ 和async
编程的最佳读物。
JavaScript
尽管JavaScript现在可以做到客户端服务器端通吃,尽管 JQuery 之类的前端框架使得一些人可以不懂JavaScript也可以编程,但我还是认为学习JavaScript从HTML DOM开始最为适合,因为这是JavaScript设计的初衷。 JavaScript DOM编程艺术 系统的介绍了如何使用JavaScript,HTML,以及 CSS 创建可用的 Web 页面,是一本前端入门佳作。
JavaScript语言包含大量的陷阱和误区,但它却又有一些相当不错的特性,这也是为什么 Douglas Crockford 称JavaScript为 世界上最被误解的语言 ,并编写了 JavaScript 语言精粹 一书来帮助前端开发者绕开JavaScript中的陷阱。和同类书籍不同, JavaScript 语言精粹 用精炼的语言讲解了JavaScript语言中好的那部分(例如闭包,函数是头等对象,以及对象字面量),并建议读者 不要 使用其它不好的部分(例如混乱的类型转换,默认全局命名空间,以及 奇葩的相等判断符 ),毕竟,用糟糕的特性编写出来的程序往往也是糟糕的。
延伸阅读:
- JavaScript 高级程序设计(第 3 版) :详尽且深入的介绍了Javascript语言,DOM,以及Ajax,并针对HTML5做了对应更新;
- JavaScript 权威指南(第 6 版) :这本书的第5版曾被前端专家 Douglas Crockford 称之为“唯一靠谱的 JavaScript 书”。相对于 JavaScript高级程序设计 , JavaScript 权威指南 更像是一本案头参考书,当然如果你感兴趣也可以从头读到尾;
- 编写可维护的 JavaScript :书如其名,这本书给出了大量的优秀 JavaScript 编程实践,使得程序员编写出健壮且易于维护的 JavaScript 代码;
- JavaScript 异步编程 :和常见的支持并发的编程语言(例如 Java 和 C#)不同,JavaScript 本身是 单线程 的,因此不能把其它语言处理并发的方式照搬到 JavaScript。 JavaScript 异步编程 系统的介绍了JavaScript 中的并发原理,并阐述了如何使用
Promise
、Deferred
以及Async.js
编写出简洁高效的异步程序。
Python
Python 的入门书籍很多,而且据说质量大多不错,我推荐 Python 基础教程 的原因是因为它是我的Python入门读物——简洁,全面,代码质量很不错,而且有几个很有趣的课后作业,使得我可以快速上手。
这里顺便多说一句,不要用 Python 学习手册 作为Python入门——它的废话实在太多,你能想象它用了15页的篇幅去讲解if
语句吗?尽管 O’Reilly 出了很多经典编程书,但这本 Python 学习手册 绝对不在其中。
权威且实用 Python 书籍,覆盖 Python 2和 Python 3。尽管它名为参考手册,但 Python 参考手册 在 Python 语法和标准库基础之上对其实现机制也给出了深入的讲解,不容错过。
延伸阅读:
- Python 袖珍指南(第 5 版) :实用且便携的 Python 参考手册,我会说我在飞机上写程序时用的就是它么 -_-#;
- Python Cookbook(第 3 版) :非常好的 Python 进阶读物,包含各种常用场景下的 Python 代码,使得读者可以写出更加 Pythonic 的代码;
- Python 编程实战:运用设计模式、并发和程序库创建高质量程序 :Python 高级读物,针对 Python 3,2014 年的 Jolt 大奖图书 ,不可错过;
- Python 源码剖析 :少见的国产精品,这本书以 Python 2.5 为例,从源代码出发,一步步分析了 CPython 是如何实现类型,控制流,函数/方法的声明与调用,类型以及装饰器等 Python 核心概念,读过之后会大大加深对 Python 的理解。尽管这本书有些过时,但我们仍然可以按照它分析源代码的方式来分析新版Python。
3. 编程语言理论
大多数程序员并不需要从头编写一个编译器或解释器,因此 龙书(编译原理) 就显得过于重量级;然而多数程序员还是需要解析文本,处理配置文件,或者写一个小语言, 编程语言实现模式 很好的满足了这个需求。它把常用的文本解析/代码生成方法组织成一个个模式,并为每个模式给出了实例和应用场景。这本书既会提高你的动手能力,也会加深你对编程语言的理解。Python 发明者 Guido van Rossum 甚至为这本书给出了 “Throw away your compiler theory book!” 这样的超高评价。
程序员每天都要和编程语言打交道,但是思考编程语言为什么会被设计成这个样子的程序员并不多, 程序设计语言——实践之路完美的回答了这个问题。这本书从编程语言的解析和运行开始讲起,系统了介绍了命名空间,作用域,控制流,数据类型以及方法(控制抽象)这些程序设计语言的核心概念,然后展示了这些概念是如何被应用到过程式语言,面向对象语言,函数式语言,脚本式,逻辑编程语言以及并发编程语言这些具有不同编程范式的编程语言之上。这本书或极大的拓宽你的视野——无论你使用什么编程语言,都会从这本书中获益良多。理解这一本书,胜过学习十门新的编程语言。
延伸阅读:
- 七周七语言:理解多种编程范型 :尽管我们在日常工作中可能只使用两三门编程语言,但是了解其它编程语言范式是很重要的。 七周七语言 一书用精简的篇幅介绍了 Ruby,Io,Prolog,Scala,Erlang,Clojure,和 Haskell 这七种具有不同编程范式的语言——是的,你没法通过这本书变成这七种语言的专家,但你的视野会得到极大的拓宽;
- 自制编程语言 :另一本优秀的编译原理作品, 自制编程语言 通过从零开始制作一门无类型语言
Crowbar
和一门静态类型语言Diksam
,把类型系统,垃圾回收,和代码生成等编程语言的关键概念讲的清清楚楚; - 计算的本质:深入剖析程序和计算机 :披着 Ruby 外衣的 计算理论 入门书籍,使你对编程语言的理解更上一层楼。
4. 程序设计
现代编程语言的语法大多很繁杂,初学者使用这些语言学习编程会导致花大量的时间在编程语言语法(诸如指针,引用和类型定义)而不是程序设计方法(诸如数据抽象和过程抽象)之上。 程序设计方法 解决了这个问题——它专注于程序设计方法,使得读者无需把大量时间花在编程语言上。这本书还有一个与之配套的教学开发环境 DrScheme ,这个环境会根据读者的程度变换编程语言的深度,使得读者可以始终把注意力集中在程序设计方法上。
我个人很奇怪 程序设计方法 这样的佳作为什么会绝版,而谭浩强C语言这样的垃圾却大行其道——好在是程序设计方法 第二版 已经被免费发布在网上。
计算机程序的构造与解释 是另一本被国内大学忽视(至少在我本科时很少有人知道这本书)的教材,这本书和 程序设计方法 有很多共同点——都使用 Scheme作为教学语言;都专注于程序设计方法而非编程语言本身;都拥有相当出色的课后题。相对于 程序设计方法 , 计算机程序的构造与解释 要更加深入程序设计的本质(过程抽象,数据抽象,以及元语言抽象),以至于 Google 技术总监 Peter Norvig 给了这本书 超高的评价 。
延伸阅读:
- 编程原本 : STL 作者的关于程序设计方法佳作——他把关系代数和群论引入编程之中,试图为程序设计提供一个坚实的理论基础,从而构建出更加稳固的软件。这本书是 程序设计方法 和 计算机程序的构造与解释 的绝好补充——前者使用函数式语言(Scheme)讲授程序设计,而 编程原本 则使用命令式语言(C++);
- 元素模式 : 设计模式 总结了 面向对象程序设计 中的模式,而 元素模式 这本书分析了 程序设计 中的常见模式的本质,阅读这本书会让你对程序设计有更深的理解;
- The Science of Programming :会编程的人很多,但能够编写正确程序的人就少多了。 The Science of Programming 通过 前条件——不变式——后条件 以及逻辑谓词演算,为编写正确程序提供了强有力的理论基础,然后这本书通过实例阐述了如何应用这些理论到具体程序上。任何一个想大幅提高开发效率的程序员都应阅读此书。
5. 算法与数据结构
文章字数太长了,发不完
继续阅读:
http://lucida.me/blog/developer-reading-li...
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: