# 程序设计
[TOC=2,2]
## 1\. 基础理论
[![编码:隐匿在计算机软硬件背后的语言](https://box.kancloud.cn/2015-09-16_55f9281fcbb9e.jpg)](http://www.amazon.cn/gp/product/B009RSXIB4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B009RSXIB4&linkCode=as2&creative=3132)
[编码:隐匿在计算机软硬件背后的语言](http://www.amazon.cn/gp/product/B009RSXIB4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B009RSXIB4&linkCode=as2&creative=3132)这本书其实不应该叫编码——它更应该叫“Petzold教你造计算机”——作者[Charles Petzold](http://en.wikipedia.org/wiki/Charles_Petzold)创造性的以编码为主题,从电报机和手电筒讲到数字电路,然后利用[数字电路](http://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E7%94%B5%E8%B7%AF)中的逻辑门构造出[加法器](http://zh.wikipedia.org/wiki/%E5%8A%A0%E6%B3%95%E5%99%A8)和[触发器](http://zh.wikipedia.org/wiki/%E8%A7%A6%E5%8F%91%E5%99%A8),最后构造出一个完整的[存储程序计算机](http://zh.wikipedia.org/wiki/%E5%AD%98%E5%82%A8%E7%A8%8B%E5%BA%8F%E8%AE%A1%E7%AE%97%E6%9C%BA)。不要被这些电路概念吓到——[编码](http://www.amazon.cn/gp/product/B009RSXIB4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B009RSXIB4&linkCode=as2&creative=3132)使用大量形象贴切的类比简化了这些概念,使其成为最精彩最通俗易懂的计算机入门读物。
[![深入理解计算机系统(第2版)](https://box.kancloud.cn/2015-09-16_55f92820d3710.jpg)](http://www.amazon.cn/gp/product/B004BJ18KM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004BJ18KM&linkCode=as2&creative=3132)
[深入理解计算机系统(第2版)](http://www.amazon.cn/gp/product/B004BJ18KM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004BJ18KM&linkCode=as2&creative=3132)这本书的全名是:Computer Systems:A Programmer’s Perspective(所以它又被称为CSAPP),我个人习惯把它翻译为程序员所需了解的计算机系统知识,尽管土了些,但更名副其实。
[深入理解计算机系统](http://www.amazon.cn/gp/product/B004BJ18KM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004BJ18KM&linkCode=as2&creative=3132)是我读过的最优秀的计算机系统导论型作品,它创造性的把操作系统,计算机组成结构,数字电路,以及编译原理这些计算机基础学科中的核心概念汇集在一起,从而覆盖了指令集体系架构,汇编语言,代码优化,计算机存储体系架构,链接,装载,进程,以及虚拟内存这些程序员所需了解的关键计算机系统知识。如果想打下扎实的计算机基础又不想把操作系统计算机结构编译原理这些书统统读一遍,阅读[深入理解计算机系统](http://www.amazon.cn/gp/product/B004BJ18KM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004BJ18KM&linkCode=as2&creative=3132)是最有效率的方式。
**延伸阅读:**
* [世界是数字的](http://www.amazon.cn/gp/product/B00DSQZBDE/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00DSQZBDE&linkCode=as2&creative=3132):[K&R](http://www.amazon.cn/gp/product/B0011425T8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011425T8&linkCode=as2&creative=3132)中的K([Brian Kernighan](http://www.cs.princeton.edu/~bwk/))的近作,这本书源自Brian在普林斯顿大学所教授的计算机基础课程,以通俗易懂的方式讲述了现代人所应了解的计算机知识和网络知识;
* [图灵的秘密:他的生平、思想及论文解读](http://www.amazon.cn/gp/product/B00AAQXKXS/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00AAQXKXS&linkCode=as2&creative=3132):[Charles Petzold](http://en.wikipedia.org/wiki/Charles_Petzold)的另一部作品,这本书以图灵的论文**论可计算数及其在判定问题上的应用**([On Computable Numbers, with an Application to the Entscheidungsproblem](http://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf))为主题,阐述了图灵机(现代计算机的始祖)的构造,原理,以及应用。
* [计算机系统概论(第2版)](http://www.amazon.cn/gp/product/B0011F9OQE/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011F9OQE&linkCode=as2&creative=3132):另一部优秀的计算机系统导论型作品,和[深入理解计算机系统](http://www.amazon.cn/gp/product/B004BJ18KM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004BJ18KM&linkCode=as2&creative=3132)不同,这本书采用自下而上的方式,从二进制,和数字逻辑这些底层知识一步步过渡到高级编程语言(C),从而以另一种方式理解计算机系统。
## 2\. 编程语言
编程语言是程序员必不可少的日常工具。工欲善其事,必先利其器。我在这里给出了C,C++,Java,C#,JavaScript,和Python这六种[常用编程语言](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)的书单(我个人不熟悉Objective-C和PHP,因此它们不在其中)。
需要注意的是:我在这里给出的是编程语言(Programming Language)书籍,而非编程平台(Programming Platform)书籍。以Java为例,[Effective Java](http://www.amazon.cn/gp/product/B001PTGR52/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001PTGR52&linkCode=as2&creative=3132)属于编程语言书籍,而[Android编程权威指南](http://www.amazon.cn/gp/product/B00J4DXWDG/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00J4DXWDG&linkCode=as2&creative=3132)就属于编程平台书籍。
### C
[![C和指针](https://box.kancloud.cn/2015-09-16_55f9282231770.jpg)](http://www.amazon.cn/gp/product/B00163LU68/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00163LU68&linkCode=as2&creative=3132)
忘记谭浩强那本糟糕不堪的C程序设计,[C和指针](http://www.amazon.cn/gp/product/B00163LU68/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00163LU68&linkCode=as2&creative=3132)才是C语言的最佳入门书籍。它详细但又不失简练的介绍了C语言以及C标准库的方方面面。
对于C语言初学者,最难的概念不仅仅是指针和数组,还有指向数组的指针和指向指针的指针。[C和指针](http://www.amazon.cn/gp/product/B00163LU68/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00163LU68&linkCode=as2&creative=3132)花了大量的篇幅和图示来把这些难懂但重要的概念讲的清清楚楚,这也是我推荐它作为C语言入门读物的原因。
[![C程序设计语言(第2版)](https://box.kancloud.cn/2015-09-16_55f9282a9747a.jpg)](http://www.amazon.cn/gp/product/B0011425T8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011425T8&linkCode=as2&creative=3132)
尽管[C程序设计语言](http://www.amazon.cn/gp/product/B0011425T8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011425T8&linkCode=as2&creative=3132)是二十多年前的书籍,但它仍然是C语言——以及计算机科学中最重要的书籍之一,它的重要性不仅仅在于它用清晰的语言和简练的代码描述了C语言全貌,而且在于它为之后的计算机书籍——尤其是编程语言书籍树立了新的标杆。以至于在很多计算机书籍的扉页,都会有“感谢Kernighan教会我写作”这样的字样。
**延伸阅读:**
* [C专家编程](http://www.amazon.cn/gp/product/B0012NIW9K/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0012NIW9K&linkCode=as2&creative=3132):不要被标题中的“专家”吓到,这实际是一本很轻松的书籍,它既包含了大量C语言技术细节和编程技巧,也包含了很多有趣的编程轶事;
* [C陷阱与缺陷](http://www.amazon.cn/gp/product/B0012UMPBY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0012UMPBY&linkCode=as2&creative=3132):书如其名,这本书介绍了C语言中常见的坑和一些稀奇古怪的编程“技巧”,不少刁钻的C语言面试题都源自这本小册子;
* [C语言参考手册](http://book.douban.com/subject/6519268/):全面且权威的C语言参考手册,而且覆盖C99,如果你打算成为C语言专家,那么这本书不可错过;
* [C标准库](http://www.amazon.cn/gp/product/B00IZW4DK8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00IZW4DK8&linkCode=as2&creative=3132):给出了15个C标准库的设计思路,实现代码,以及测试代码,配合[C程序设计语言](http://www.amazon.cn/gp/product/B0011425T8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011425T8&linkCode=as2&creative=3132)阅读效果更佳;
* [C语言接口与实现](http://www.amazon.cn/gp/product/B005LAJ9F6/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B005LAJ9F6&linkCode=as2&creative=3132):这本书展示了如何使用C语言实现可复用的数据结构,其中包含大量C语言高级技巧,以至于Amazon上排行第一的评论是“Probably the best advanced C book in existance”,而排行第二的评论则是“By far the most advanced C book I read”。
### C++
[![C++程序设计原理与实践](https://box.kancloud.cn/2015-09-16_55f9282ba2a0f.jpg)](http://www.amazon.cn/gp/product/B003VPX6YS/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B003VPX6YS&linkCode=as2&creative=3132)
作为C++的发明者,没有人能比[Bjarne Stroustrup](http://en.wikipedia.org/wiki/Bjarne_Stroustrup)更理解C++。Bjarne在Texas A&M大学任教时使用C++为大学新生讲授编程,从而就有了[C++程序设计原理与实践](http://www.amazon.cn/gp/product/B003VPX6YS/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B003VPX6YS&linkCode=as2&creative=3132)这本书——它面向编程初学者,既包含C++教程,也包含大量程序设计原则。它不但是我读过最好的C++入门书,也是我读过最好的编程入门书。
比较有趣的是,[C++程序设计原理与实践](http://www.amazon.cn/gp/product/B003VPX6YS/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B003VPX6YS&linkCode=as2&creative=3132)直到全书过半都没有出现指针,我想这可能是Bjarne为了证明不学C也可以学好C++吧。
[![C++程序设计语言(第4版)](https://box.kancloud.cn/2015-09-16_55f9282cbfb8e.jpg)](http://www.amazon.cn/gp/product/0321958322/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0321958322&linkCode=as2&creative=3132)
同样是[Bjarne Stroustrup](http://en.wikipedia.org/wiki/Bjarne_Stroustrup)的作品,[C++程序设计语言](http://www.amazon.cn/gp/product/0321958322/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0321958322&linkCode=as2&creative=3132)是C++**最权威且最全面**的书籍。第4版相对于之前的版本进行了全面的更新,覆盖了第二新的C++ 11标准,并砍掉了部分过时的内容。
**延伸阅读:**
* [A Tour of C++](http://www.amazon.com/Tour-C--Depth/dp/0321958314/):如果你觉得[C++程序设计语言](http://www.amazon.cn/gp/product/0321958322/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0321958322&linkCode=as2&creative=3132)过于庞大,但你又想快速的浏览一遍新版C++的语言特色,那么可以试试这本小红书;
* [C++语言的设计与演化](http://book.douban.com/subject/1096216/):C++的“历史书”,讲述了C++是如何一步一步从C with Classes走到如今这一步,以及C++语言特性背后的故事;
* [C++标准库(第2版)](http://www.amazon.cn/gp/product/B00APCO6DA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00APCO6DA&linkCode=as2&creative=3132):相对于其它语言的标准库,C++标准库虽然强大,但学习曲线十分陡峭,这本书是学习C++标准库有力的补充;
* [深度探索C++对象模型](http://www.amazon.cn/gp/product/B006QXQXTM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B006QXQXTM&linkCode=as2&creative=3132):这本书系统的讲解了C++是如何以最小的性能代价实现对象模型,很多C++面试题(包括被问烂的虚函数指针)都可以在这本书里找到答案;
* [Effective C++](http://www.amazon.cn/gp/product/B004G72P24/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004G72P24&linkCode=as2&creative=3132)和[More Effective C++](http://www.amazon.cn/gp/product/B004IP8BD6/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004IP8BD6&linkCode=as2&creative=3132):由于C++的特性实在繁杂,因此很容易就掉到坑里。Effective系列既讲述了C++的良好编程实践,也包含C++的使用误区,从而帮你绕过这些坑。
### Java
[![Java核心技术(第9版)](https://box.kancloud.cn/2015-09-16_55f92837f017a.jpg)](http://www.amazon.cn/gp/product/B00G9KF4JC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00G9KF4JC&linkCode=as2&creative=3132)
平心而论[Java核心技术](http://www.amazon.cn/gp/product/B00G9KF4JC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00G9KF4JC&linkCode=as2&creative=3132)(即Core Java)并不算是一本特别出色的书籍:示例代码不够严谨,充斥着很多与C/C++的比较,语言也不够简洁——问题在于Java并没有一本很出色的入门书籍,与同类型的[Java编程思想](http://www.amazon.cn/gp/product/B0011F7WU4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011F7WU4&linkCode=as2&creative=3132)相比,[Java核心技术](http://www.amazon.cn/gp/product/B00G9KF4JC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00G9KF4JC&linkCode=as2&creative=3132)至少做到了废话不多,与时俱进([Java编程思想](http://www.amazon.cn/gp/product/B0011F7WU4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011F7WU4&linkCode=as2&creative=3132)还停留在Java 6之前),矮子里面选将军,[Java核心技术](http://www.amazon.cn/gp/product/B00G9KF4JC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00G9KF4JC&linkCode=as2&creative=3132)算不错了。
[![Effective Java(第2版)](https://box.kancloud.cn/2015-09-16_55f928392ee09.jpg)](http://www.amazon.cn/gp/product/B001PTGR52/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001PTGR52&linkCode=as2&creative=3132)
尽管Java没有什么出色的入门书籍,但这不代表Java没有出色的必读书籍。[Effective Java](http://www.amazon.cn/gp/product/B001PTGR52/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001PTGR52&linkCode=as2&creative=3132)是我读过的最好的编程书籍之一,它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的Java特性给出了充满洞察力的建议,以至于Java之父[James Gosling](http://en.wikipedia.org/wiki/James_Gosling)为这本书作序:*“我很希望10年前就拥有这本书。可能有人认为我不需要任何Java方面的书籍,但是我需要这本书。”*
**延伸阅读:**
* [深入理解Java虚拟机(第2版)](http://www.amazon.cn/gp/product/B00D2ID4PK/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00D2ID4PK&linkCode=as2&creative=3132):非常优秀且难得的国产佳作,系统的介绍了Java虚拟机和相关工具,并给出了一些调优建议;
* [Java程序员修炼之道](http://www.amazon.cn/gp/product/B00E0D2OX4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00E0D2OX4&linkCode=as2&creative=3132):在这本书之前,并没有一本Java书籍系统详细的介绍Java 7的新特性(例如新的垃圾收集器,`try using`结构和`invokedynamic`指令),这本书填补了这个空白;
* [Java并发编程实践](http://www.amazon.cn/gp/product/B0077K9XHW/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0077K9XHW&linkCode=as2&creative=3132):系统全面的介绍了Java的并发,如何设计支持并发的数据结构,以及如何编写正确的并发程序;
* [Java Puzzlers](http://book.douban.com/subject/1328664/):包含了大量的Java陷阱——以至于读这本书时我说的最多的一个词就是WTF,这本书的意义在于它是一个[反模式](http://zh.wikipedia.org/wiki/%E5%8F%8D%E9%9D%A2%E6%A8%A1%E5%BC%8F)大全,[Effective Java](http://www.amazon.cn/gp/product/B001PTGR52/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001PTGR52&linkCode=as2&creative=3132)告诉你如何写好的Java程序,而[Java Puzzlers](http://book.douban.com/subject/1328664/)则告诉你糟糕的Java程序是什么样子。更有意思的是,这两本书的作者都是[Joshua Bloch](http://en.wikipedia.org/wiki/Joshua_Bloch)。
**视频教程:**
* [Java语言学习极速之旅](http://www.jikexueyuan.com/event/java.html?hmsr=lucida_tuijian_java_04.14):系统全面的Java语言教程,6个阶段Java基础入门,循序渐进掌握Java面向对象精髓。3个Java进阶方向,Java SE、Java EE、Android开发,每一个都包含相应的知识点精讲和项目开发实例,快速上手。
* [Android 0基础极速养成计划](http://www.jikexueyuan.com/event/android.html?hmsr=lucida_tuijian_android_04.14):Android开发快速入门视频教程,通过对Android基础知识讲解,详细介绍Android开发环境搭建,同时包含Android实战案例解析,通过全新实战的Android课程,系统学习Android开发。
### C#
[![精通C#(第6版)](https://box.kancloud.cn/2015-09-16_55f9283a5192e.jpg)](http://www.amazon.cn/gp/product/B00DVDDP0K/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00DVDDP0K&linkCode=as2&creative=3132)
可能你会疑问我为什么会推荐这本接近1200页的“巨著”用作C#入门,这是我的答案:
1. C#的语言特性非常丰富,很难用简短的篇幅概括这些特性;
2. [精通C#](http://www.amazon.cn/gp/product/B00DVDDP0K/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00DVDDP0K&linkCode=as2&creative=3132)之所以有近1200页的篇幅,是因为它不但全面介绍了C#语言,而且还覆盖了ADO.NET,WCF,WF,WPF,以及ASP.NET这些.Net框架。你可以把这本书视为两本书——一本500多页的C#语言教程和一本600多页的.Net平台框架快速上手手册。
3. 尽管标题带有“精通”两字,[精通C#](http://www.amazon.cn/gp/product/B00DVDDP0K/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00DVDDP0K&linkCode=as2&creative=3132)实际上是一本面向初学者的C#书籍,你甚至不需要太多编程知识,就可以读懂它。
[![CLR via C#(第4版)](https://box.kancloud.cn/2015-09-16_55f9283bc73ac.jpg)](http://www.amazon.cn/gp/product/B00P8VZ8T4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00P8VZ8T4&linkCode=as2&creative=3132)
[CLR via C#](http://www.amazon.cn/gp/product/B00P8VZ8T4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00P8VZ8T4&linkCode=as2&creative=3132)是C#/.Net最重要的书籍,没有之一。它全面介绍了.Net的基石——[CLR](http://en.wikipedia.org/wiki/Common_Language_Runtime)的运行原理,以及构建于CLR之上的C#类型系统,运行时关系,泛型,以及线程/并行等高级内容。任何一个以C#为工作内容的程序员都应该阅读此书。
**延伸阅读:**
* [深入理解C#(第3版)](http://www.amazon.cn/gp/product/B00J94AG2A/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00J94AG2A&linkCode=as2&creative=3132):C#进阶必读,这本书偏重于C#的语言特性,它系统的介绍了C#从1.0到C# 4.0的语言特性演化,并展示了如何利用C#的语言特性编写优雅的程序;
* [.NET设计规范(第2版)](http://book.douban.com/subject/4231292/):C#**专业**程序员必读,从变量命名规范讲到类型系统设计原则,这本书提供了一套完整的.Net编程规范,使得程序员可以编写出一致,严谨的代码,
* [C# 5.0权威指南](http://www.amazon.cn/gp/product/B00G51PUDA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00G51PUDA&linkCode=as2&creative=3132):来自O’Reilly的C#参考手册,严谨的介绍了C#语法,使用,以及核心类库,C#程序员案头必备;
* [LINQ to Objects Using C# 4.0](http://www.amazon.cn/gp/product/0321637003/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0321637003&linkCode=as2&creative=3132)和[Async in C# 5.0](http://www.amazon.cn/gp/product/1449337163/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=1449337163&linkCode=as2&creative=3132):LINQ和`async`分别是.Net 3.5和.Net 4.5中所引入的最重要的语言特性,所以我认为有必要在它们上面花点功夫——这两本书是介绍LINQ和`async`编程的最佳读物。
### JavaScript
[![JavaScript DOM编程艺术(第2版)](https://box.kancloud.cn/2015-09-16_55f9283d21df5.jpg)](http://www.amazon.cn/gp/product/B004VJM5KE/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004VJM5KE&linkCode=as2&creative=3132)
尽管JavaScript现在可以做到客户端服务器端通吃,尽管[JQuery](http://jquery.com/)之类的前端框架使得一些人可以不懂JavaScript也可以编程,但我还是认为学习JavaScript从HTML DOM开始最为适合,因为这是JavaScript设计的初衷。[JavaScript DOM编程艺术](http://www.amazon.cn/gp/product/B004VJM5KE/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004VJM5KE&linkCode=as2&creative=3132)系统的介绍了如何使用JavaScript,HTML,以及CSS创建可用的Web页面,是一本前端入门佳作。
[![JavaScript语言精粹](https://box.kancloud.cn/2015-09-16_55f9283e7a224.jpg)](http://www.amazon.cn/gp/product/B0097CON2S/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0097CON2S&linkCode=as2&creative=3132)
JavaScript语言包含大量的陷阱和误区,但它却又有一些相当不错的特性,这也是为什么[Douglas Crockford](http://javascript.crockford.com/)称JavaScript为[世界上最被误解的语言](http://javascript.crockford.com/javascript.html),并编写了[JavaScript语言精粹](http://www.amazon.cn/gp/product/B0097CON2S/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0097CON2S&linkCode=as2&creative=3132)一书来帮助前端开发者绕开JavaScript中的陷阱。和同类书籍不同,[JavaScript语言精粹](http://www.amazon.cn/gp/product/B0097CON2S/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0097CON2S&linkCode=as2&creative=3132)用精炼的语言讲解了JavaScript语言中好的那部分(例如闭包,函数是头等对象,以及对象字面量),并建议读者**不要**使用其它不好的部分(例如混乱的类型转换,默认全局命名空间,以及[奇葩的相等判断符](https://dorey.github.io/JavaScript-Equality-Table/)),毕竟,用糟糕的特性编写出来的程序往往也是糟糕的。
**延伸阅读:**
* [JavaScript高级程序设计(第3版)](http://www.amazon.cn/gp/product/B007OQQVMY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007OQQVMY&linkCode=as2&creative=3132):详尽且深入的介绍了Javascript语言,DOM,以及Ajax,并针对HTML5做了对应更新;
* [JavaScript权威指南(第6版)](http://www.amazon.cn/gp/product/B007VISQ1Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007VISQ1Y&linkCode=as2&creative=3132):这本书的第5版曾被前端专家[Douglas Crockford](http://javascript.crockford.com/)称之为*“唯一靠谱的JavaScript书”*。相对于[JavaScript高级程序设计](http://www.amazon.cn/gp/product/B007OQQVMY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007OQQVMY&linkCode=as2&creative=3132),[JavaScript权威指南](http://www.amazon.cn/gp/product/B007VISQ1Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007VISQ1Y&linkCode=as2&creative=3132)更像是一本案头参考书,当然如果你感兴趣也可以从头读到尾;
* [编写可维护的JavaScript](http://www.amazon.cn/gp/product/B00BQ7RMW0/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00BQ7RMW0&linkCode=as2&creative=3132):书如其名,这本书给出了大量的优秀JavaScript编程实践,使得程序员编写出健壮且易于维护的JavaScript代码;
* [JavaScript异步编程](http://www.amazon.cn/gp/product/B00CYM0Z8Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00CYM0Z8Y&linkCode=as2&creative=3132):和常见的支持并发的编程语言(例如Java和C#)不同,JavaScript本身是**单线程**的,因此不能把其它语言处理并发的方式照搬到JavaScript。[JavaScript异步编程](http://www.amazon.cn/gp/product/B00CYM0Z8Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00CYM0Z8Y&linkCode=as2&creative=3132)系统的介绍了JavaScript中的并发原理,并阐述了如何使用`Promise`、`Deferred`以及`Async.js`编写出简洁高效的异步程序。
### Python
[![Python基础教程(第二版)](https://box.kancloud.cn/2015-09-16_55f9283fc012d.jpg)](http://www.amazon.cn/gp/product/B00KAFX65Q/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KAFX65Q&linkCode=as2&creative=3132)
Python的入门书籍很多,而且据说质量大多不错,我推荐[Python基础教程](http://www.amazon.cn/gp/product/B00KAFX65Q/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KAFX65Q&linkCode=as2&creative=3132)的原因是因为它是我的Python入门读物——简洁,全面,代码质量很不错,而且有几个很有趣的课后作业,使得我可以快速上手。
这里顺便多说一句,不要用[Python学习手册](http://www.amazon.cn/gp/product/B004TUJ7A6/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004TUJ7A6&linkCode=as2&creative=3132)作为Python入门——它的废话实在太多,你能想象它用了15页的篇幅去讲解`if`语句吗?尽管O’Reilly出了很多经典编程书,但这本[Python学习手册](http://www.amazon.cn/gp/product/B004TUJ7A6/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004TUJ7A6&linkCode=as2&creative=3132)绝对不在其中。
[![Python参考手册(第4版)](https://box.kancloud.cn/2015-09-16_55f928421d668.jpg)](http://www.amazon.cn/gp/product/B004H0784U/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004H0784U&linkCode=as2&creative=3132)
权威且实用的Python书籍,覆盖Python 2和Python 3。尽管它名为参考手册,但[Python参考手册](http://www.amazon.cn/gp/product/B004H0784U/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004H0784U&linkCode=as2&creative=3132)在Python语法和标准库基础之上对其实现机制也给出了深入的讲解,不容错过。
**延伸阅读:**
* [Python袖珍指南(第5版)](http://www.amazon.cn/gp/product/B00QT9IA2G/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00QT9IA2G&linkCode=as2&creative=3132):实用且便携的Python参考手册,我会说我在飞机上写程序时用的就是它么 –_–#;
* [Python Cookbook(第3版)](http://www.amazon.cn/gp/product/B00IZRMQAM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00IZRMQAM&linkCode=as2&creative=3132):非常好的Python进阶读物,包含各种常用场景下的Python代码,使得读者可以写出更加Pythonic的代码;
* [Python编程实战:运用设计模式、并发和程序库创建高质量程序](http://www.amazon.cn/gp/product/B00MHDPIJ6/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MHDPIJ6&linkCode=as2&creative=3132):Python高级读物,针对Python 3,2014年的[Jolt大奖图书](http://www.drdobbs.com/joltawards/jolt-awards-the-best-books/240169070?pgno=7),不可错过;
* [Python源码剖析](http://book.douban.com/subject/3117898/):少见的国产精品,这本书以Python 2.5为例,从源代码出发,一步步分析了CPython是如何实现类型,控制流,函数/方法的声明与调用,类型以及装饰器等Python核心概念,读过之后会大大加深对Python的理解。尽管这本书有些过时,但我们仍然可以按照它分析源代码的方式来分析新版Python。
## 3\. 编程语言理论
[![编程语言实现模式](https://box.kancloud.cn/2015-09-16_55f9284d22ed1.jpg)](http://www.amazon.cn/gp/product/B007HYMPBY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007HYMPBY&linkCode=as2&creative=3132)
大多数程序员并不需要从头编写一个编译器或解释器,因此[龙书(编译原理)](http://www.amazon.cn/gp/product/B001NGO85I/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001NGO85I&linkCode=as2&creative=3132)就显得过于重量级;然而多数程序员还是需要解析文本,处理配置文件,或者写一个小语言,[编程语言实现模式](http://www.amazon.cn/gp/product/B007HYMPBY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007HYMPBY&linkCode=as2&creative=3132)很好的满足了这个需求。它把常用的文本解析/代码生成方法组织成一个个模式,并为每个模式给出了实例和应用场景。这本书既会提高你的动手能力,也会加深你对编程语言的理解。Python发明者Guido van Rossum甚至为这本书给出了*“Throw away your compiler theory book!”*这样的超高评价。
[![程序设计语言——实践之路(第3版)](https://box.kancloud.cn/2015-09-16_55f9284e69b96.jpg)](http://www.amazon.cn/gp/product/B008FQHHW0/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008FQHHW0&linkCode=as2&creative=3132)
程序员每天都要和编程语言打交道,但是思考编程语言为什么会被设计成这个样子的程序员并不多,[程序设计语言——实践之路](http://www.amazon.cn/gp/product/B008FQHHW0/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008FQHHW0&linkCode=as2&creative=3132)完美的回答了这个问题。这本书从编程语言的解析和运行开始讲起,系统了介绍了命名空间,作用域,控制流,数据类型以及方法(控制抽象)这些程序设计语言的核心概念,然后展示了这些概念是如何被应用到过程式语言,面向对象语言,函数式语言,脚本式,逻辑编程语言以及并发编程语言这些具有不同编程范式的编程语言之上。这本书或极大的拓宽你的视野——无论你使用什么编程语言,都会从这本书中获益良多。理解这一本书,胜过学习十门新的编程语言。
**延伸阅读:**
* [七周七语言:理解多种编程范型](http://www.amazon.cn/gp/product/B008041DUY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008041DUY&linkCode=as2&creative=3132):尽管我们在日常工作中可能只使用两三门编程语言,但是了解其它编程语言范式是很重要的。[七周七语言](http://www.amazon.cn/gp/product/B008041DUY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008041DUY&linkCode=as2&creative=3132)一书用精简的篇幅介绍了Ruby,Io,Prolog,Scala,Erlang,Clojure,和Haskell这七种具有不同编程范式的语言——是的,你没法通过这本书变成这七种语言的专家,但你的视野会得到极大的拓宽;
* [自制编程语言](http://www.amazon.cn/gp/product/B00GAUNDYY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00GAUNDYY&linkCode=as2&creative=3132):另一本优秀的编译原理作品,[自制编程语言](http://www.amazon.cn/gp/product/B00GAUNDYY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00GAUNDYY&linkCode=as2&creative=3132)通过从零开始制作一门无类型语言`Crowbar`和一门静态类型语言`Diksam`,把类型系统,垃圾回收,和代码生成等编程语言的关键概念讲的清清楚楚;
* [计算的本质:深入剖析程序和计算机](http://www.amazon.cn/gp/product/B00PG0MM3C/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00PG0MM3C&linkCode=as2&creative=3132):披着Ruby外衣的[计算理论](http://en.wikipedia.org/wiki/Theory_of_computation)入门书籍,使你对编程语言的理解更上一层楼。
## 4\. 程序设计
[![程序设计方法](https://box.kancloud.cn/2015-09-16_55f9284f89998.jpg)](http://book.douban.com/subject/1140942/)
现代编程语言的语法大多很繁杂,初学者使用这些语言学习编程会导致花大量的时间在编程语言语法(诸如指针,引用和类型定义)而不是程序设计方法(诸如数据抽象和过程抽象)之上。[程序设计方法](http://book.douban.com/subject/1140942/)解决了这个问题——它专注于程序设计方法,使得读者无需把大量时间花在编程语言上。这本书还有一个与之配套的教学开发环境[DrScheme](http://plt-scheme.org/software/drscheme/),这个环境会根据读者的程度变换编程语言的深度,使得读者可以始终把注意力集中在程序设计方法上。
我个人很奇怪[程序设计方法](http://book.douban.com/subject/1140942/)这样的佳作为什么会绝版,而谭浩强C语言这样的垃圾却大行其道——好在是程序设计方法[第二版](http://www.ccs.neu.edu/home/matthias/HtDP2e/)已经被免费发布在网上。
[![计算机程序的构造与解释(第2版)](https://box.kancloud.cn/2015-09-16_55f9285ad9baa.jpg)](http://www.amazon.cn/gp/product/B0011AP7RY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011AP7RY&linkCode=as2&creative=3132)
[计算机程序的构造与解释](http://www.amazon.cn/gp/product/B0011AP7RY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011AP7RY&linkCode=as2&creative=3132)是另一本被国内大学忽视(至少在我本科时很少有人知道这本书)的教材,这本书和[程序设计方法](http://book.douban.com/subject/1140942/)有很多共同点——都使用[Scheme](http://en.wikipedia.org/wiki/Scheme_(programming_language))作为教学语言;都专注于程序设计方法而非编程语言本身;都拥有相当出色的课后题。相对于[程序设计方法](http://book.douban.com/subject/1140942/),[计算机程序的构造与解释](http://www.amazon.cn/gp/product/B0011AP7RY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011AP7RY&linkCode=as2&creative=3132)要更加深入程序设计的本质(过程抽象,数据抽象,以及元语言抽象),以至于Google技术总监[Peter Norvig](http://norvig.com/)给了这本书[超高的评价](http://www.amazon.com/gp/review/R403HR4VL71K8/ref=cm_cr_pr_rvw_ttl?ie=UTF8&ASIN=0262510871)。
**延伸阅读:**
* [编程原本](http://www.amazon.cn/gp/product/B006P7V73G/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B006P7V73G&linkCode=as2&creative=3132):[STL](https://www.sgi.com/tech/stl/)作者的关于程序设计方法佳作——他把关系代数和群论引入编程之中,试图为程序设计提供一个坚实的理论基础,从而构建出更加稳固的软件。这本书是[程序设计方法](http://book.douban.com/subject/1140942/)和[计算机程序的构造与解释](http://www.amazon.cn/gp/product/B0011AP7RY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011AP7RY&linkCode=as2&creative=3132)的绝好补充——前者使用函数式语言(Scheme)讲授程序设计,而[编程原本](http://www.amazon.cn/gp/product/B006P7V73G/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B006P7V73G&linkCode=as2&creative=3132)则使用命令式语言(C++);
* [元素模式](http://www.amazon.cn/gp/product/B00LPQ6KAW/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00LPQ6KAW&linkCode=as2&creative=3132):[设计模式](http://www.amazon.cn/gp/product/B001130JN8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001130JN8&linkCode=as2&creative=3132)总结了**面向对象程序设计**中的模式,而[元素模式](http://www.amazon.cn/gp/product/B00LPQ6KAW/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00LPQ6KAW&linkCode=as2&creative=3132)这本书分析了**程序设计**中的常见模式的本质,阅读这本书会让你对程序设计有更深的理解;
* [The Science of Programming](http://www.amazon.cn/gp/product/0387964800/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0387964800&linkCode=as2&creative=3132):会编程的人很多,但能够编写正确程序的人就少多了。[The Science of Programming](http://www.amazon.cn/gp/product/0387964800/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0387964800&linkCode=as2&creative=3132)通过**前条件——不变式——后条件**以及逻辑谓词演算,为编写正确程序提供了强有力的理论基础,然后这本书通过实例阐述了如何应用这些理论到具体程序上。任何一个想大幅提高开发效率的程序员都应阅读此书。
## 5\. 算法与数据结构
[![算法(第4版)](https://box.kancloud.cn/2015-09-16_55f9285c72ff7.jpg)](http://www.amazon.cn/gp/product/B009OCFQ0O/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B009OCFQ0O&linkCode=as2&creative=3132)
我在[算法学习之路](http://lucida.me/blog/on-learning-algorithms/)一文中提到我的算法入门教材是[数据结构与算法分析:C语言描述](http://www.amazon.cn/gp/product/B002WC7NGS/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B002WC7NGS&linkCode=as2&creative=3132),我曾经认为它是最好的算法入门教材,但自从我读到[Sedgewick](http://www.cs.princeton.edu/~rs/)的[算法](http://www.amazon.cn/gp/product/B009OCFQ0O/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B009OCFQ0O&linkCode=as2&creative=3132)之后我就改变了观点——这本[算法](http://www.amazon.cn/gp/product/B009OCFQ0O/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B009OCFQ0O&linkCode=as2&creative=3132)才是最好的算法入门教材:
* 使用更为容易的Java语言作为教学语言;
* 覆盖所有常用的数据结构和算法,并均给出其完整实现;
* 包含大量的图示用于可视化算法——事实上这是我读过的图示最为丰富形象的书籍,这也是我称其为最好的算法入门书籍的原因。
[![编程珠玑(第2版)](https://box.kancloud.cn/2015-09-16_55f9285e8416e.jpg)](http://www.amazon.cn/gp/product/B00SFZH0DC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00SFZH0DC&linkCode=as2&creative=3132)
[编程珠玑(第2版)](http://www.amazon.cn/gp/product/B00SFZH0DC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00SFZH0DC&linkCode=as2&creative=3132)是一本少见的实践型算法书籍——它并非一一介绍数据结构/算法的教材,而是实践性极强的算法应用手册。作者([Jon Bentley](http://en.wikipedia.org/wiki/Jon_Bentley))从他多年的实际经验精选出一些有趣而又实用的问题,然后展示了他解决这些问题的过程(分析问题,选择合适的算法,解决问题,以及验证答案)。任何程序员都可以从中获益。
**延伸阅读:**
* [编程珠玑(续)](http://www.amazon.cn/gp/product/B004ZWBW5G/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004ZWBW5G&linkCode=as2&creative=3132):严格来说这本书并非[编程珠玑](http://www.amazon.cn/gp/product/B00SFZH0DC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00SFZH0DC&linkCode=as2&creative=3132)的续作,而是一本类似于番外篇的编程技巧/实践手册;它不像[编程珠玑](http://www.amazon.cn/gp/product/B00SFZH0DC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00SFZH0DC&linkCode=as2&creative=3132)那般重视算法的应用,而是全面覆盖了程序员所需的能力;
* [算法导论(第3版)](http://www.amazon.cn/gp/product/B00AK7BYJY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00AK7BYJY&linkCode=as2&creative=3132):尽管我在这边文章开头提到会尽量避免理论性的书籍,但没有[算法导论](http://www.amazon.cn/gp/product/B00AK7BYJY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00AK7BYJY&linkCode=as2&creative=3132)的算法阅读列表是不完整的,我想这本书就不需要我多介绍了; :–)
* [算法设计与分析基础(第3版)](http://www.amazon.cn/gp/product/B00S4HCQUI/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00S4HCQUI&linkCode=as2&creative=3132):侧重于算法设计,这本书创新的把常见算法分为分治,减治,变治三大类,并覆盖了动态规划,回溯,以及分支定界等高级算法设计方法,属于算法设计的入门佳作;
## 6\. 程序调试
[![调试九法——软硬件错误的排查之道](https://box.kancloud.cn/2015-09-16_55f9285fc11d2.jpg)](http://www.amazon.cn/gp/product/B00CBBLUFK/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00CBBLUFK&linkCode=as2&creative=3132)
一个让非编程从业人员惊讶的事实是程序员的绝大多时间都花在调试上,而不是写程序上,以至于[Bob大叔](http://en.wikipedia.org/wiki/Robert_Cecil_Martin)把**调试时间占工作时间的比例**作为衡量程序员开发能力的标准。[调试九法——软硬件错误的排查之道](http://www.amazon.cn/gp/product/B00CBBLUFK/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00CBBLUFK&linkCode=as2&creative=3132)既是调试领域的入门作品,也是必读经典之作。[调试九法](http://www.amazon.cn/gp/product/B00CBBLUFK/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00CBBLUFK&linkCode=as2&creative=3132)的作者是一个具有丰富实战经验的硬件工程师,他把他多年的调试经验总结成九条调试法则,并对每一条法则都给对应的实际案例。任何程序员都应通过阅读这本书改善调试效率,即便是非程序员,也可以从这本书中学到系统解决问题的方法。
**延伸阅读:**
* [Writing Solid Code](http://www.amazon.com/Writing-Solid-Code-20th-Anniversary/dp/1570740550/):**最好的调试是不调试**——[Writing Solid Code](http://www.amazon.com/Writing-Solid-Code-20th-Anniversary/dp/1570740550/)介绍了断言,设计清晰的API,以及单步代码等技巧,用于编写健壮的代码,减少调试的时间;
* [软件调试的艺术](http://www.amazon.cn/gp/product/B00IOAM6VE/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00IOAM6VE&linkCode=as2&creative=3132):调试工具书——这本书详细的介绍了常见的调试器工具,并通过具体案例展示了它们的使用技巧;