# 标准
进入必读书单之前,我先介绍下书单里的书籍选择标准和领域选择标准。当然你也[点击这里](64794)直接跳转到书单开始阅读。
## 书籍选择标准
1. **必读**:什么是必读书籍呢?如果学习某项技术有一本书无论如何都不能错过,那么这本书就是必读书籍——例如[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,[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#;
* 注意我没有使用“经典”这个词,因为**经典**计算机书籍往往和**计算机科学**联系在一起,而且经典往往需要10年甚至更长的时间进行考验;
2. **注重实践,而非理论**:所以这个书单不会包含过于原理性的书籍;
3. **入门—必读—延伸**:必读书籍的问题在于:1\. 大多不适合入门;2\. 不够全面。考虑到没有入门阅读和延伸阅读的阅读列表是不完整的——所以书单中每个关键概念都会由一本入门书籍,一本必读书籍(有时入门书籍和必读书籍是同一本),和若干延伸阅读书籍所构成。
## 概念选择标准
1. **全面**:全面覆盖软件开发中重要的概念;
2. **通用**:适用于每一个程序员,和领域特定方向无关;
3. **注重基础,但不过于深入**:优秀的程序员需要**良好**的计算机科学基础,但程序员并没必要掌握**过于深入**的计算机科学知识。以算法为例,每个程序员都应该掌握排序、链表、栈以及队列这些基本数据结构和算法,但计算几何、线性规划和网络流这些算法可能就不是每个程序员都需要掌握的了;
通过这几个标准,我把程序员应掌握的关键概念分为程序设计,软件开发,以及个人成长三大类,每一大类均由若干关键概念组成。