💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 软件开发 [TOC=2,2] ## 1\. 编程实践 [![程序设计实践](https://box.kancloud.cn/2015-09-16_55f92b1ae85b3.jpg)](http://book.douban.com/subject/1173548/) [Brian Kernighan](http://en.wikipedia.org/wiki/Brian_Kernighan)是这个星球上最好的计算机书籍作者:从上古时期的[Software Tools](http://www.amazon.cn/gp/product/020103669X/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=020103669X&linkCode=as2&creative=3132),到早期的[Unix编程环境](http://www.amazon.cn/gp/product/B00IYTQBYS/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00IYTQBYS&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),再到这本[程序设计实践](http://book.douban.com/subject/1173548/),每本书都是**必读**之作。 尽管程序设计实践只有短短200余页,但它使用精炼的代码和简要的原则覆盖了程序设计的所有关键概念(包括编程风格,算法与数据结构,API设计,调试,测试,优化,移植,以及领域特定语言等概念)。如果你想快速掌握良好的编程实践,或者你觉着900多页的[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)过于沉重,那么程序设计实践是你的不二之选。我第一次读这本书就被它简洁的语言和优雅的代码所吸引,以至于读研时我买了三本程序设计实践——一本放在学校实验室,一本放在宿舍,一本随身携带阅读。我想我至少把它读了十遍以上——每一次都有新的收获。 [![代码大全(第2版)](https://box.kancloud.cn/2015-09-16_55f92b21dab1f.jpg)](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132) 无论在哪个版本的程序员必读书单,[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)都会高居首位。和其它程序设计书籍不同,[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)用通俗清晰的语言覆盖了软件构建(Software Construction)中各个层次上**所有**的重要概念——从变量命名到类型设计,从控制循环到代码结构,从测试和调试到构建和集成,[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)可谓无所不包,你可以把这本书看作为程序员的一站式(Once and for all)阅读手册。更珍贵的是,[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)在每一章末尾都给出了价值很高的参考书目(参考我之前的[如何阅读书籍](http://lucida.me/blog/on-reading-books/)一文),如果你是一个初出茅庐的程序员,[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)是绝好的阅读起点。 **延伸阅读:** * [编写可读代码的艺术](http://www.amazon.cn/gp/product/B008B4DTG4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008B4DTG4&linkCode=as2&creative=3132):专注于代码可读性(Code Readability),这本书来自Google的两位工程师对[Google Code Readability](http://www.quora.com/What-is-Googles-internal-code-review-policy-process)的总结。它给出了大量命名,注释,代码结构,以及API设计等日常编码的最佳实践,并包含了很多看似细微但却可以显著提升代码可读性的编程技巧。这本书的翻译还不错,但如果你想体会书中的英语幽默(例如Tyrannosaurus——Stegosaurus——Thesaurus),建议阅读它的[英文影印版](http://www.amazon.cn/gp/product/B008IBND20/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008IBND20&linkCode=as2&creative=3132); * [卓有成效的程序员](http://www.amazon.cn/gp/product/B001XCWFOI/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001XCWFOI&linkCode=as2&creative=3132):专注于生产效率(Productivity),它既包含源自作者多年经验的高生产率原则,也包含大量的提高生产率的小工具,每个追求高生产率的程序员都应该阅读这本书; * [UNIX编程艺术](http://www.amazon.cn/gp/product/B008Z1IEQ8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008Z1IEQ8&linkCode=as2&creative=3132):专注于程序设计哲学,这本书首先总结出包括模块化,清晰化,可组合,可分离等17个Unix程序设计哲学,接下来通过Unix历史以及各种Unix编程工具展示了这些原则的应用。尽管个人觉的这本书有些过度拔高Unix且过度贬低Windows和M$,但书中的Unix设计哲学非常值得借鉴。 ## 2\. 面向对象程序设计 [![Head First设计模式](https://box.kancloud.cn/2015-09-16_55f92b22be784.jpg)](http://www.amazon.cn/gp/product/B0011FBU34/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011FBU34&linkCode=as2&creative=3132) 无论是在Amazon还是在Google上搜索设计模式相关书籍,[Head First设计模式](http://www.amazon.cn/gp/product/B0011FBU34/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011FBU34&linkCode=as2&creative=3132)都会排在首位——它使用风趣的语言和诙谐的图示讲述了观察者,装饰者,抽象工厂,和单例等关键设计模式,使得初学者可以迅速的理解并掌握设计模式。[Head First设计模式](http://www.amazon.cn/gp/product/B0011FBU34/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011FBU34&linkCode=as2&creative=3132)在Amazon上[好评如潮](http://www.amazon.com/Head-First-Design-Patterns-Freeman/product-reviews/0596007124/),就连设计模式原书作者[Erich Gamma](http://en.wikipedia.org/wiki/Erich_Gamma)都对它给出了很高的评价。 需要注意,[Head First设计模式](http://www.amazon.cn/gp/product/B0011FBU34/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011FBU34&linkCode=as2&creative=3132)是非常好的设计模式入门书,但**千万不要**把这本书作为学习设计模式的唯一的书——是的,Head First设计模式拥有风趣的语言和诙谐的例子,但它既缺乏**实际**的工程范例,也没有给出设计模式的应用/适用场景。我个人建议是在读过这本书之后立即阅读[“四人帮”](http://en.wikipedia.org/wiki/Gang_of_Four_(disambiguation))的[设计模式](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)或[Bob大叔](http://en.wikipedia.org/wiki/Robert_Cecil_Martin)的[敏捷软件开发](http://www.amazon.cn/gp/product/B00116MMA8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00116MMA8&linkCode=as2&creative=3132),以便理解设计模式在实际中的应用。 [![设计模式](https://box.kancloud.cn/2015-09-16_55f92b24a8336.jpg)](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/B001130JN8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B001130JN8&linkCode=as2&creative=3132)作为设计模式领域的开山之作,Erich Gamma,Richard Helm,Ralph Johnson等四位作者将各个领域面向对象程序开发的经验总结成三大类23种模式,并给出了每个模式的使用场景,变体,不足,以及如何克服这些不足。这本书行文严谨紧凑(四位作者都是PhD),并且代码源自实际项目,属于设计模式领域的必读之作。 需要注意:[设计模式](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)**不适合**初学者阅读——它更像是一篇博士论文而非技术书籍,加上它的范例都具有很强的领域背景(诸如GUI窗口系统和富文本编辑器),缺乏实际经验的程序员很难理解这本书。 **延伸阅读:** * [敏捷软件开发(原则模式与实践)](http://www.amazon.cn/gp/product/B00116MMA8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00116MMA8&linkCode=as2&creative=3132):尽管标题带有“敏捷”,但这本书实际是一本面向对象程序设计读物——[Bob大叔](http://en.wikipedia.org/wiki/Robert_Cecil_Martin)通过丰富的例子讲解设计模式的应用和[SOLID面向对象设计原则](http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)),如果你觉着[设计模式](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)过于晦涩,那么你完全可以从这本书开始学习。这本书使用Java作为讲解语言,它也有对应的[C#版本](http://www.amazon.cn/gp/product/B00ACXX034/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00ACXX034&linkCode=as2&creative=3132); * [代码整洁之道](http://www.amazon.cn/gp/product/B0031M9GHC/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0031M9GHC&linkCode=as2&creative=3132):同样是[Bob大叔](http://en.wikipedia.org/wiki/Robert_Cecil_Martin)的作品,这本书教导读者使用面向对象+敏捷开发原则编写清晰可维护的代码; * [企业应用架构模式](http://www.amazon.cn/gp/product/B003LBSRDM/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B003LBSRDM&linkCode=as2&creative=3132):这本书专注于架构,作者[Martin Fowler](http://en.wikipedia.org/wiki/Martin_Fowler)针对企业应用的特点(诸如持久化数据,多人访问,操作数据的界面以及复杂的业务逻辑),总结出若干企业架构模式,以便程序员构建强大且可扩展的企业应用。 ## 3\. 重构 [![重构](https://box.kancloud.cn/2015-09-16_55f92b32e9b80.jpg)](http://book.douban.com/subject/4262627/) 任何产品代码都不是一蹴而就,而是在反复不断的修改中进化而来。[重构](http://book.douban.com/subject/4262627/)正是这样一本介绍如何改进代码的书籍——如何在保持代码行为的基础上,提升代码的质量(这也是重构的定义)。 我见过很多程序员,他们经常声称自己在重构代码,但他们实际只做了第二步(提升代码的质量),却没有保证第一步(保持代码行为),因此他们所谓的重构往往会适得其反——破坏现有代码或是引入新bug。这也是我推荐[重构](http://book.douban.com/subject/4262627/)这本书的原因——它既介绍糟糕代码的特征(Bad smell)和改进代码的方法,也给出了重构的完整流程——1\. 编写单元测试保持(Preserve)程序行为;2\. 重构代码;3\. 保证单元测试通过。[重构](http://book.douban.com/subject/4262627/)还引入了一套重构术语(诸如封装字段,内联方法,和字段上移),以便程序员之间交流。只有理解了这三个方面,才能算是理解重构。 [![修改代码的艺术](https://box.kancloud.cn/2015-09-16_55f92b340dd4e.jpg)](http://www.amazon.cn/gp/product/B00KMJ2Q1U/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KMJ2Q1U&linkCode=as2&creative=3132) 这里再重复一遍重构的定义——**在保持代码行为的基础上,提升代码的质量。**[重构](http://book.douban.com/subject/4262627/)专注于第二步,即如何提升代码的质量,而[修改代码的艺术](http://www.amazon.cn/gp/product/B00KMJ2Q1U/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KMJ2Q1U&linkCode=as2&creative=3132)专注于第一步,即如何保持代码的行为。 提升代码质量并不困难,但保持代码行为就难多了,尤其是对没有测试的遗留代码(Legacy Code)而言——你需要首先引入测试,但遗留代码往往可测试性(Testability)很差,这时你就需要把代码变的可测试。[修改代码的艺术](http://www.amazon.cn/gp/product/B00KMJ2Q1U/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KMJ2Q1U&linkCode=as2&creative=3132)包含大量的实用建议,用来把代码变的可测试(Testable),从而使重构变为可能,使提高代码质量变为可能。 **延伸阅读:** * [重构与模式](http://www.amazon.cn/gp/product/B00A9YD7A2/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00A9YD7A2&linkCode=as2&creative=3132):这本书的中文书名存在误导,它的原书书名是Refactoring to Patterns——通过重构,把模式引入代码。这本书阐述了重构和设计模式之间的关系,使得程序员可以在更高的层次上思考重构,进行重构。 ## 4\. 软件测试 [![How to Break Software](https://box.kancloud.cn/2015-09-16_55f92b38d4162.jpg)](http://www.amazon.cn/gp/product/0201796198/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0201796198&linkCode=as2&creative=3132) 关于软件测试的书籍很多,但很少有一本测试书籍能像[How to Break Software](http://www.amazon.cn/gp/product/0201796198/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0201796198&linkCode=as2&creative=3132)这般既有趣又实用。不同于传统的软件测试书籍(往往空话连篇,无法直接应用),[How to Break Software](http://www.amazon.cn/gp/product/0201796198/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0201796198&linkCode=as2&creative=3132)非常实际——它从程序员的心理出发,分析软件错误/Bug最可能产生的路径,然后针对这些路径进行**残酷**的测试,以保证软件质量。 我在第一次阅读这本书时大呼作者太过“残忍”——连这些刁钻诡异的测试招数都能想出来。但这种毫不留情(Relentless)的测试风格正是每个专业程序员所应具备的心态。 **注意**:如果你是一个测试工程师,那么在阅读这本书前请三思——因为阅读它之后你会让你身边的程序员苦不堪言,甚至连掐死你的心都有 :-D。 [![xUnit Test Patterns](https://box.kancloud.cn/2015-09-16_55f92b39ea8e1.jpg)](http://www.amazon.cn/gp/product/0131495054/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0131495054&linkCode=as2&creative=3132) [How to Break Software](http://www.amazon.cn/gp/product/0201796198/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0201796198&linkCode=as2&creative=3132)注重黑盒测试,而这本[xUnit Test Patterns](http://www.amazon.cn/gp/product/0131495054/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0131495054&linkCode=as2&creative=3132)则注重白盒测试。正如书名所示,[xUnit Test Patterns](http://www.amazon.cn/gp/product/0131495054/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0131495054&linkCode=as2&creative=3132)覆盖了单元测试的每个方面:从如何编写良好的单元测试,到如何设计可测试(Testable)的软件,再到如何重构测试——可以把它看作为单元测试的百科全书。 **延伸阅读:** * [Practical Unit Testing with JUnit and Mockito](http://www.amazon.com/Practical-Unit-Testing-JUnit-Mockito/dp/8393489393/):尽管[xUnit Test Patterns](http://www.amazon.cn/gp/product/0131495054/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0131495054&linkCode=as2&creative=3132)覆盖了单元测试的方方面面,但它的问题在于不够与时俱进(07年出版)。[Practical Unit Testing](http://www.amazon.com/Practical-Unit-Testing-JUnit-Mockito/dp/8393489393/)弥补了这个缺陷——它详细介绍了如何通过测试框架[JUnit](http://junit.org/)和Mock框架[Mockito](http://code.google.com/p/mockito/)编写良好的单元测试,并给出了大量优秀单元测试的原则; * [单元测试的艺术(第2版)](http://www.amazon.cn/gp/product/B00MBQMFLI/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MBQMFLI&linkCode=as2&creative=3132):可以把这本书看作为前一本书的.Net版,适合.Net程序员; * [Google软件测试之道](http://www.amazon.cn/gp/product/B00FH36R6G/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00FH36R6G&linkCode=as2&creative=3132):这本书详细介绍了Google如何测试软件——包括Google的软件测试流程以及Google软件测试工程师的日常工作/职业发展。需要注意的是:这本书中的测试流程在国内很可能行不通(国内企业缺乏像Google那般强大的基础设施(Infrastructure)),但它至少可以让国内企业有一个可以效仿的目标; * [探索式软件测试](http://www.amazon.cn/gp/product/B003JBIV0S/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B003JBIV0S&linkCode=as2&creative=3132):[James Whittaker](http://blogs.msdn.com/b/jw_on_tech/)的另一本测试著作,不同于传统的黑盒/白盒测试,这本书创造性的把测试比喻为“探索”(Exploration),然后把不同的探索方式对应到不同的测试方式上,以便尽早发现更多的软件错误/Bug。 ## 5\. 项目管理 [![极客与团队](https://box.kancloud.cn/2015-09-16_55f92b3ad8779.jpg)](http://www.amazon.cn/gp/product/B00BLZMG8W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00BLZMG8W&linkCode=as2&creative=3132) 很多程序员都向往成为横扫千军(One-man Army)式的“编程英雄”,但卓越的软件并非一人之力,而是由团队合力而成。[极客与团队](http://www.amazon.cn/gp/product/B00BLZMG8W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00BLZMG8W&linkCode=as2&creative=3132)就是这样一本写给程序员的如何在团队中工作的绝好书籍,它围绕着HRT三大原则(Humility谦逊,Respect尊重,和Trust信任),系统的介绍了如何融入团队,如何打造优秀的团队,如何领导团队,以及如何应对团队中的害群之马(Poisonous People)。这本书实用性极强,以至于Python之父[Guido van Rossum](http://en.wikipedia.org/wiki/Guido_van_Rossum)都盛赞这本书*“说出了我一直在做但总结不出来的东西”*。 [![人月神话](https://box.kancloud.cn/2015-09-16_55f92b4fc8276.jpg)](http://www.amazon.cn/gp/product/B0011C2P7W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011C2P7W&linkCode=as2&creative=3132) 尽管[人月神话](http://www.amazon.cn/gp/product/B0011C2P7W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011C2P7W&linkCode=as2&creative=3132)成书于40年前,但它仍是软件项目管理**最**重要的书籍。[人月神话](http://www.amazon.cn/gp/product/B0011C2P7W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011C2P7W&linkCode=as2&creative=3132)源自作者[Fred Brooks](http://en.wikipedia.org/wiki/Fred_Brooks)领导并完成[System/360](http://en.wikipedia.org/wiki/IBM_System/360)和[OS/360](http://en.wikipedia.org/wiki/OS/360_and_successors)这两个即是放到现在也是巨型软件项目的里程碑项目的经验总结。它覆盖了软件项目各个方面的关键概念:从工期管理([Brooks定律](http://en.wikipedia.org/wiki/Brooks%27s_law))到团队建设([外科团队](http://en.wikipedia.org/wiki/The_Mythical_Man-Month#The_surgical_team)),从程序设计(编程的本质是使用正确的数据结构)到架构设计([概念完整性](http://en.wikipedia.org/wiki/The_Mythical_Man-Month#Conceptual_integrity)),从原型设计(Plan to Throw one away)到团队交流(形式化文档+会议)。令人惊讶的是,即便40年之后,[人月神话](http://www.amazon.cn/gp/product/B0011C2P7W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011C2P7W&linkCode=as2&creative=3132)中的关键概念(包括焦油坑,[Brooks定律](http://en.wikipedia.org/wiki/Brooks%27s_law),[概念完整性](http://en.wikipedia.org/wiki/The_Mythical_Man-Month#Conceptual_integrity),[外科团队](http://en.wikipedia.org/wiki/The_Mythical_Man-Month#The_surgical_team),[第二版效应](http://en.wikipedia.org/wiki/The_Mythical_Man-Month#The_second-system_effect)等等)依然适用,而软件开发的[核心复杂度](http://en.wikipedia.org/wiki/Essential_complexity)仍然没有得到解决([没有银弹](http://en.wikipedia.org/wiki/The_Mythical_Man-Month#No_silver_bullet))。 **延伸阅读:** * [人件(原书第3版)](http://www.amazon.cn/gp/product/B00MO7R1SG/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MO7R1SG&linkCode=as2&creative=3132):从人的角度分析软件项目。[人件](http://www.amazon.cn/gp/product/B00MO7R1SG/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MO7R1SG&linkCode=as2&creative=3132)从雇佣正确的人,创建健康的工作环境,以及打造高效的开发团队等角度阐述了如何改善人,从而改善软件项目; * [门后的秘密:卓越管理的故事](http://www.amazon.cn/gp/product/B00CBBKRQ8/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00CBBKRQ8&linkCode=as2&creative=3132):这本书生动的再现了软件项目管理工作的场景,并给出了各种实用管理技巧,如果你有意转向管理岗位,这本书不容错过; * [大教堂与集市](http://www.amazon.cn/gp/product/B00KQDTZ4S/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KQDTZ4S&linkCode=as2&creative=3132):这本书从黑客的历史说起,系统而又风趣的讲述了开源运动的理论和实践,以及开源软件项目是如何运作并发展的。了解开源,从这本书开始。 ## 6\. 专业开发 [![程序员修炼之道:从小工到专家](https://box.kancloud.cn/2015-09-16_55f92b50c3601.jpg)](http://www.amazon.cn/gp/product/B004GV08CY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004GV08CY&linkCode=as2&creative=3132) 不要被庸俗的译名迷惑,[程序员修炼之道](http://www.amazon.cn/gp/product/B004GV08CY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004GV08CY&linkCode=as2&creative=3132)是一本价值极高的程序员成长手册。这本书并不局限于特定的编程语言或框架,而是提出了一套切实可行的实效(Pragmatic)开发哲学,并通过程序设计,测试,编程工具,以及项目管理等方面的实例展示了如何应用这套开发哲学,从而使得程序员更加高效专业。有人把这本书称之为迷你版[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)——[代码大全](http://www.amazon.cn/gp/product/B0061XKRXA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0061XKRXA&linkCode=as2&creative=3132)给出了大量的优秀程序设计实践,偏向术;而[程序员修炼之道](http://www.amazon.cn/gp/product/B004GV08CY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004GV08CY&linkCode=as2&creative=3132)给出了程序设计实践背后的思想,注重道。 [![程序员职业素养](https://box.kancloud.cn/2015-09-16_55f92b51b07d5.jpg)](http://www.amazon.cn/gp/product/B0098NRHHY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0098NRHHY&linkCode=as2&creative=3132) [程序员修炼之道](http://www.amazon.cn/gp/product/B004GV08CY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004GV08CY&linkCode=as2&creative=3132)指出了**如何**成为专业程序员,这本[程序员职业素养](http://www.amazon.cn/gp/product/B0098NRHHY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0098NRHHY&linkCode=as2&creative=3132)则指出了专业程序员应该是**什么**样子——承担责任;知道自己在做什么;知道何时说不/何时说是;在正确的时间编写正确的代码;懂得自我时间管理和工期预估;知道如何应对压力。如果你想成为专业程序员(Professional Developer)(而不是码农(Code Monkey)),这本书会为你指明前进的方向。 **延伸阅读:** * [高效程序员的45个习惯](http://www.amazon.cn/gp/product/B00OA9L3NU/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00OA9L3NU&linkCode=as2&creative=3132):“敏捷”版的[程序员修炼之道](http://www.amazon.cn/gp/product/B004GV08CY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004GV08CY&linkCode=as2&creative=3132),可以把这本书作为[程序员修炼之道](http://www.amazon.cn/gp/product/B004GV08CY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004GV08CY&linkCode=as2&creative=3132)的补充; * [精益创业](http://www.amazon.cn/gp/product/B008MIFWJG/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008MIFWJG&linkCode=as2&creative=3132):尽管这是一本讲如何创业的书,但其中的精益生产,最小价值产品,以及构建-度量-学习循环都值得程序员借鉴。 ## 7\. 大师之言 [![奇思妙想:15位计算机天才及其重大发现](https://box.kancloud.cn/2015-09-16_55f92b52e71bf.jpg)](http://www.amazon.cn/gp/product/B007ED88CI/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007ED88CI&linkCode=as2&creative=3132) [奇思妙想:15位计算机天才及其重大发现](http://www.amazon.cn/gp/product/B007ED88CI/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007ED88CI&linkCode=as2&creative=3132)是一本极具眼光的技术访谈书籍——在这本书访谈的15位计算机科学家中,竟出现了12位[图灵奖](http://zh.wikipedia.org/wiki/%E5%9B%BE%E7%81%B5%E5%A5%96)获得者——要知道图灵奖从1966年设奖到现在也只有六十几位获奖者而已。 [奇思妙想](http://www.amazon.cn/gp/product/B007ED88CI/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007ED88CI&linkCode=as2&creative=3132)把计算机科学分为四大领域:编程语言;算法;架构;人工智能。并选取了每个领域下最具代表性的计算机科学家进行访谈。因为这些计算机科学家都是其所在领域的开拓者,因此他们能给出常人无法给出的深刻见解。通过这本书,你可以了解前三十年的计算机科学的发展历程——计算机科学家做了什么,而计算机又能做到/做不到什么。从而避免把时间浪费在前人已经解决的问题(或者根本无法解决的问题)上面。 [![编程人生:15位软件先驱访谈录](https://box.kancloud.cn/2015-09-16_55f92b542d657.jpg)](http://www.amazon.cn/gp/product/B00QA7GA2Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00QA7GA2Y&linkCode=as2&creative=3132) 同样是访谈录,同样访谈15个人,[编程人生](http://www.amazon.cn/gp/product/B00QA7GA2Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00QA7GA2Y&linkCode=as2&creative=3132)把重点放在程序员(Coders at work)上。它从各个领域选取了15位顶尖的程序员,这些程序员既包括[Ken Thompson](http://en.wikipedia.org/wiki/Ken_Thompson)和[Jamie Zawinski](http://en.wikipedia.org/wiki/Jamie_Zawinski)这些老牌Unix黑客,也包括[Brad Fitzpatrick](http://en.wikipedia.org/wiki/Brad_Fitzpatrick)这样的80后新生代,还包括[Frances Allen](http://en.wikipedia.org/wiki/Frances_E._Allen)和[Donald Knuth](http://en.wikipedia.org/wiki/Donald_Knuth)这样的计算机科学家。这种多样性(Diversity)使得[编程人生](http://www.amazon.cn/gp/product/B00QA7GA2Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00QA7GA2Y&linkCode=as2&creative=3132)兼具严谨性和趣味性,无论你是什么类型的程序员,都能从中受益良多。 **延伸阅读:** * [图灵和ACM图灵奖(1966-2011)](http://www.amazon.cn/gp/product/B008G80O9K/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B008G80O9K&linkCode=as2&creative=3132):通过图灵奖介绍整个计算机科学发展史,非常难得的国产精品图书; * [编程大师访谈录](http://www.amazon.cn/gp/product/B00ALPRKMA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00ALPRKMA&linkCode=as2&creative=3132):可以把这本书看作为二十年前的[编程人生](http://www.amazon.cn/gp/product/B00QA7GA2Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00QA7GA2Y&linkCode=as2&creative=3132),被访谈者都是当时叱咤风云的人物(例如微软的创造者[Bill Gates](http://en.wikipedia.org/wiki/Bill_Gates),Macintosh的发明者[Jeff Raskin](http://en.wikipedia.org/wiki/Jef_Raskin),以及Adobe的创始人[John Warnock](http://en.wikipedia.org/wiki/John_Warnock)等等)。有趣的是这本书中大量的经验和建议到如今依然适用; * [编程大师智慧](http://www.amazon.cn/gp/product/B00451BP72/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00451BP72&linkCode=as2&creative=3132):类似于[编程人生](http://www.amazon.cn/gp/product/B00QA7GA2Y/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00QA7GA2Y&linkCode=as2&creative=3132),不同的是被访谈者都是编程语言的设计者——这本书覆盖了除C语言以外的几乎所有主流编程语言。通过这本书,你可以从中学到编程语言背后的设计思想——编程语言为什么要被设计成这样,是什么促使设计者要在语言中加入这个特性(或拒绝那个特性)。从而提升对编程语言的理解。 ## 8\. 界面设计 [![写给大家看的设计书](https://box.kancloud.cn/2015-09-16_55f92b56655c0.jpg)](http://www.amazon.cn/gp/product/B00KQBLI5E/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KQBLI5E&linkCode=as2&creative=3132) 书如其名,[写给大家看的设计书](http://www.amazon.cn/gp/product/B00KQBLI5E/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KQBLI5E&linkCode=as2&creative=3132)是一本面向初学者的快速设计入门。它覆盖了版式,色彩,和字体这三个设计中的关键元素,并创造性的为版式设计总结出CRAP四大原则(Contrast对比,Repetition重复,Alignment对齐,Proximity亲密)。全书使用丰富生动的范例告诉读者什么是好的设计,什么是不好的设计,使得即便是对设计一无所知的人,也可以从这本书快速入门。 [![认知与设计:理解UI设计准则(第2版)](https://box.kancloud.cn/2015-09-16_55f92b5c245d4.jpg)](http://www.amazon.cn/gp/product/B00MFHRAK4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MFHRAK4&linkCode=as2&creative=3132) [写给大家看的设计书](http://www.amazon.cn/gp/product/B00KQBLI5E/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KQBLI5E&linkCode=as2&creative=3132)强调实践,即**如何**做出好的设计;[认知与设计:理解UI设计准则](http://www.amazon.cn/gp/product/B00MFHRAK4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MFHRAK4&linkCode=as2&creative=3132)强调理论,即**为什么**我们会接受这样的设计而反感那样的设计。如果你想要搞清楚设计背后的心理学知识,但又不想阅读大部头的心理学著作,那么[认知与设计](http://www.amazon.cn/gp/product/B00MFHRAK4/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00MFHRAK4&linkCode=as2&creative=3132)是你的首选。 **延伸阅读:** * [GUI设计禁忌 2.0](http://www.amazon.cn/gp/product/0123706432/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0123706432&linkCode=as2&creative=3132):这本书指出了GUI设计的原则和常见误区,然后通过具体范例指出了如何避免这些误区。如果你的工作涉及到用户界面,那么这本书会为你减少很多麻烦; * [界面设计模式(第2版)](http://www.amazon.cn/gp/product/B00EV562SY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00EV562SY&linkCode=as2&creative=3132):这本书将用户界面中的常见元素/行为组织成彼此关联的模式,以便读者理解并举一反三,从而将其运用到自己的应用中; * [移动应用UI设计模式](http://www.amazon.cn/gp/product/B00SFZGX08/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00SFZGX08&linkCode=as2&creative=3132):类似于[界面设计模式](http://www.amazon.cn/gp/product/B00EV562SY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00EV562SY&linkCode=as2&creative=3132),但面向移动平台。它给出了iOS,Android,以及Windows Phones上常用的90余种界面设计模式,从而使得你不必把这些平台的应用挨个玩一遍也可以掌握各个平台的设计精髓。如果你主攻Android平台,那么[Android应用UI设计模式](http://www.amazon.cn/gp/product/B00GU73RHA/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00GU73RHA&linkCode=as2&creative=3132)会是更好的选择; * [配色设计原理](http://www.amazon.cn/gp/product/B0030IMDUY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0030IMDUY&linkCode=as2&creative=3132)和[版式设计原理](http://www.amazon.cn/gp/product/B0011C25KY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B0011C25KY&linkCode=as2&creative=3132):如果你读过[写给大家看的设计书](http://www.amazon.cn/gp/product/B00KQBLI5E/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00KQBLI5E&linkCode=as2&creative=3132)之后想继续深入学习设计,这两本书是不错的起点。 ## 9\. 交互设计 [![通用设计法则](https://box.kancloud.cn/2015-09-16_55f92b5e03032.jpg)](http://www.amazon.cn/gp/product/B00ES8JL8W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00ES8JL8W&linkCode=as2&creative=3132) 书如其名,[通用设计法则](http://www.amazon.cn/gp/product/B00ES8JL8W/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B00ES8JL8W&linkCode=as2&creative=3132)给出了重要的125个设计原则,并用简练的语言和范例展示了这些原则的实际应用。每个原则都有对应的参考文献,以便读者进一步学习。我之所以推荐这本书,是因为:1\. 程序员需要对设计有全面的认识;2\. 程序员并不需要知道这些设计原则是怎么来的,知道怎么用即可。这本书很好的满足了这两个要求。 [![交互设计精髓(第3版)](https://box.kancloud.cn/2015-09-16_55f92b5ee8634.jpg)](http://www.amazon.cn/gp/product/B007Q2XXXG/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007Q2XXXG&linkCode=as2&creative=3132) [交互设计精髓](http://www.amazon.cn/gp/product/B007Q2XXXG/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B007Q2XXXG&linkCode=as2&creative=3132)是交互设计领域的圣经级著作。交互设计专家(以及VB之父)[Alan Cooper](http://en.wikipedia.org/wiki/Alan_Cooper)在这本书中详细介绍了交互设计的原则,流程,以及方法,然后通过各种范例(主要来自桌面系统)展示了如何应用这些原则。 需要注意的是这本书的[第4版](http://www.amazon.cn/gp/product/1118766571/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=1118766571&linkCode=as2&creative=3132)已经出版,它在第三版的基础上增加了移动设计以及Web设计等内容。 **延伸阅读:** * [The Design of Everyday Things](http://www.amazon.cn/gp/product/0465050654/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0465050654&linkCode=as2&creative=3132):交互设计领域的另一本经典之作,它通过解读人类行动背后的心理活动,展示了设计问题的根源,并给出了一系列方法用以解决设计问题(需要注意,尽管这本书有中译版,但中译版对应的是02年的旧版,而非13年的新版); * [The Inmates Are Running the Asylum](http://www.amazon.cn/gp/product/0672326140/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=0672326140&linkCode=as2&creative=3132):[Alan Cooper](http://en.wikipedia.org/wiki/Alan_Cooper)的另一本经典,这本书非常辛辣的指出让不具备人机交互知识的程序员直接编写面向用户的软件就像让精神病人管理疯人院(The Inmates Are Running the Asylum),然后给出了一套交互设计流程以挽救这个局面; * [简约至上:交互式设计四策略](http://www.amazon.cn/gp/product/B004I91HCY/ref=as_li_ss_tl?ie=UTF8&camp=536&tag=lucida-23&creativeASIN=B004I91HCY&linkCode=as2&creative=3132):专注于把产品变的更加简单易用。作者通过删除,组织,隐藏,和转移这四个策略,展示了如何创造出简约优质的用户体验。