# 必讀書籍
[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)能力必不可少。
盡管我盡可能的去完善這個書單,但受限于我的個人經歷,這個書單難免會有所偏頗。所以如果你有不同的意見,或者認為這個書單漏掉了某些重要書籍,請在評論中指出,我會及時更新。:–)