# 必读书籍
[TOC=2,2]
## 程序设计:
1. [基础理论](http://lucida.me/blog/developer-reading-list/#foundation):[深入理解计算机系统(第2版)](http://lucida.me/blog/developer-reading-list/#csapp)
2. [编程语言](http://lucida.me/blog/developer-reading-list/#programming_language):
* [C](http://lucida.me/blog/developer-reading-list/#c):[C程序设计语言(第2版)](http://lucida.me/blog/developer-reading-list/#tcpl)
* [C++](http://lucida.me/blog/developer-reading-list/#cpp):[C++程序设计语言(第4版)](http://lucida.me/blog/developer-reading-list/#tcpppl)
* [Java](http://lucida.me/blog/developer-reading-list/#java):[Effective Java(第2版)](http://lucida.me/blog/developer-reading-list/#effective_java)
* [C#](http://lucida.me/blog/developer-reading-list/#csharp):[CLR via C#(第4版)](http://lucida.me/blog/developer-reading-list/#clr_via_csharp)
* [JavaScript](http://lucida.me/blog/developer-reading-list/#javascript):[JavaScript语言精粹](http://lucida.me/blog/developer-reading-list/#js_good_parts)
* [Python](http://lucida.me/blog/developer-reading-list/#python):[Python参考手册(第4版)](http://lucida.me/blog/developer-reading-list/#python_essential_reference)
3. [编程语言理论](http://lucida.me/blog/developer-reading-list/#programming_language_theory):[程序设计语言——实践之路(第3版)](http://lucida.me/blog/developer-reading-list/#plp)
4. [程序设计](http://lucida.me/blog/developer-reading-list/#programming_technique):[计算机程序的构造与解释(第2版)](http://lucida.me/blog/developer-reading-list/#sicp)
5. [算法与数据结构](http://lucida.me/blog/developer-reading-list/#algorithm_data_structure):[编程珠玑(第2版)](http://lucida.me/blog/developer-reading-list/#programming_pearls)
6. [程序调试](http://lucida.me/blog/developer-reading-list/#debugging):[调试九法——软硬件错误的排查之道](http://lucida.me/blog/developer-reading-list/#debugging_9_rules)
## 软件开发:
1. [编程实践](http://lucida.me/blog/developer-reading-list/#programming_practice):[代码大全(第2版)](http://lucida.me/blog/developer-reading-list/#code_complete)
2. [面向对象程序设计](http://lucida.me/blog/developer-reading-list/#oop):[设计模式](http://lucida.me/blog/developer-reading-list/#design_patterns)
3. [重构](http://lucida.me/blog/developer-reading-list/#refactoring):[修改代码的艺术](http://lucida.me/blog/developer-reading-list/#working_effectively_with_legacy_code)
4. [软件测试](http://lucida.me/blog/developer-reading-list/#software_testing):[xUnit Test Patterns](http://lucida.me/blog/developer-reading-list/#xunit_test_patterns)
5. [项目管理](http://lucida.me/blog/developer-reading-list/#project_management):[人月神话](http://lucida.me/blog/developer-reading-list/#mythical_man_month)
6. [专业开发](http://lucida.me/blog/developer-reading-list/#professional_developing):[程序员职业素养](http://lucida.me/blog/developer-reading-list/#clean_coder)
7. [大师之言](http://lucida.me/blog/developer-reading-list/#master_saying):[编程人生:15位软件先驱访谈录](http://lucida.me/blog/developer-reading-list/#coders_at_work)
8. [界面设计](http://lucida.me/blog/developer-reading-list/#interface_design):[认知与设计:理解UI设计准则(第2版)](http://lucida.me/blog/developer-reading-list/#design_with_mind_in_mind)
9. [交互设计](http://lucida.me/blog/developer-reading-list/#interaction_design):[交互设计精髓(第3版)](http://lucida.me/blog/developer-reading-list/#about_face)
## 个人成长:
1. [职业规划](http://lucida.me/blog/developer-reading-list/#career_development):[软件开发者路线图](http://lucida.me/blog/developer-reading-list/#apprentice_patterns)
2. [思维方式](http://lucida.me/blog/developer-reading-list/#thinking):[如何把事情做到最好](http://lucida.me/blog/developer-reading-list/#mastery)
3. [求职面试](http://lucida.me/blog/developer-reading-list/#job_interview):[程序员面试金典(第5版)](http://lucida.me/blog/developer-reading-list/#cracking_the_coding_interview)
4. [英语写作](http://lucida.me/blog/developer-reading-list/#english_writing):[风格的要素](http://lucida.me/blog/developer-reading-list/#elements_of_style)
这个阅读列表覆盖了软件开发各个关键领域的入门书籍和必读书籍,我相信它可以满足绝大多数程序员的需求,无论你是初学者,还是进阶者,都可以从中获益:
* [基础理论](http://lucida.me/blog/developer-reading-list/#foundation)包括了程序员应该掌握的计算机基础知识;
* [编程语言](http://lucida.me/blog/developer-reading-list/#programming_language)对软件开发至关重要,我选择了[C](http://lucida.me/blog/developer-reading-list/#c),[C++](http://lucida.me/blog/developer-reading-list/#cpp),[Java](http://lucida.me/blog/developer-reading-list/#java),[C#](http://lucida.me/blog/developer-reading-list/#csharp),[Python](http://lucida.me/blog/developer-reading-list/#python),和[JavaScript](http://lucida.me/blog/developer-reading-list/#javascript)这六门[主流编程语言](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)进行介绍,如果想进一步理解编程语言,可以阅读[编程语言理论](http://lucida.me/blog/developer-reading-list/#programming_language_theory)里的书目;
* 在理解编程语言的基础上,优秀的程序员还应该了解各种[程序设计](http://lucida.me/blog/developer-reading-list/#programming_technique)技巧,熟悉基本的[算法数据结构](http://lucida.me/blog/developer-reading-list/#algorithm_data_structure),并且能够高效的进行[程序调试](http://lucida.me/blog/developer-reading-list/#debugging)。
* 良好的程序设计能力是成为优秀程序员的前提,但软件开发知识也是必不可少的:优秀的程序员应具备良好的[编程实践](http://lucida.me/blog/developer-reading-list/#programming_practice),知道如何利用[面向对象](http://lucida.me/blog/developer-reading-list/#oop),[重构](http://lucida.me/blog/developer-reading-list/#refactoring),和[软件测试](http://lucida.me/blog/developer-reading-list/#software_testing)编写可复用,可扩展,可维护的代码,并具备软件[项目管理](http://lucida.me/blog/developer-reading-list/#project_management)知识和[专业开发](http://lucida.me/blog/developer-reading-list/#professional_developing)素养;
* 就像我们可以从名人传记里学习名人的成功经验,程序员也可以通过追随优秀程序员的足迹使自己少走弯路。[大师之言](http://lucida.me/blog/developer-reading-list/#master_saying)包含一系列对大师程序员/计算机科学家的访谈,任何程序员都可以从中获益良多;
* 为了打造用户满意的软件产品,程序员应当掌握一定的[界面设计](http://lucida.me/blog/developer-reading-list/#interface_design)知识和[交互设计](http://lucida.me/blog/developer-reading-list/#interaction_design)知识(是的,这些工作应该交给UI和UX,但如果你想独自打造一个产品呢?);
* 专业程序员应当对自己进行[职业规划](http://lucida.me/blog/developer-reading-list/#career_development),并熟悉程序员[求职面试](http://lucida.me/blog/developer-reading-list/#job_interview)的流程,以便在职业道路上越走越远;
* 软件开发是一项需要不断学习的技能,学习[思维方式](http://lucida.me/blog/developer-reading-list/#thinking)可以有效的提升学习能力和学习效率;
* 软件开发是一项国际化的工作,为了让更多的人了解你的代码(工作),良好的[英语写作](http://lucida.me/blog/developer-reading-list/#english_writing)能力必不可少。
尽管我尽可能的去完善这个书单,但受限于我的个人经历,这个书单难免会有所偏颇。所以如果你有不同的意见,或者认为这个书单漏掉了某些重要书籍,请在评论中指出,我会及时更新。:–)