从接触计算机这个专业开始到现在,课内课外阅读过不少书籍,这里给自己留一个书单,记录一路看过的好书。

书单里的书基本都是英文的,一则自己当时阅读的确实是英文版,不知道中文翻译的质量如何;二来英文阅读对程序员来说是必要的基本功。

程序语言

计算机专业的入门课程都是从编程语言开始,学会一门语言之后才能够开始和机器打交道。采用何种语言进行入门教学,网上有很多讨论。就个人而言,现在依然认为对于计算机科班专业的同学来说,从C开始更为合适。对于非科班同学,那么则推荐Python。

C

曾经的教材。C本身很精简,语言自身该介绍的都介绍了。入门的不二之选。弄明白了C的指针,C的学习就差不多了。

这本书对C中让人困惑或难以理解的地方进行了说明,对当时的自己很有帮助。

C++

C++不是自己擅长的语言,说熟悉都算不上。对C++的印象来自于本科时课堂上的学习,在实际项目中也层简单用过。

C++相比C,复杂程度天上地下。为了介绍多出来的那么多内容,砖头书是少不了的。

Effective C++可以算是Effective系列中最有名的一本书了,介绍了很多C++ Best Practice。

介绍C++标准库用法的一本好书,对学习使用标准库很有帮助。

这本书没有完全看完,因为那会儿对C++已经不再感兴趣了。很喜欢这书里的那句“源码面前了无秘密”。

C++难学难精,还是把时间节省出来学点别的吧:)

Java

Java是一门有很多优点的语言,不过也是在网上被喷得特别厉害的语言。姑且不论好坏,单单冲着Java在业界的流行程度就该去学习它。

Core Java上下厚厚两本,入门Java语言只需要上卷就足够了。非常详(luo)细(suo)的介绍了Java的各种语言特性。不仅当作可当作工具书来用,初次学习的时候里面详细的介绍对理解Java中的各种概念也很有帮助。

同Effective C++一样,这本书内也是Java Best Practice的合集。

非常值得一读的一本书,Jolt大奖作品。对Java并发编程进行了清晰易懂的介绍。

详细介绍了Java的反射机制与用法。基本上看完这本书之后,Java的反射特性就应该能熟练运用了。

很有意思的小书,如书的副标题所示,Java的一些偏门的地方都被拎出来了,适合补漏拾遗。

对Java底层细节的介绍很不错。

Python

很多人说Python适合作为入门语言,因为特别简单。但用简单的东西引人上钩,那不是钓鱼嘛。不过Python语言本身确实也简单,自己也没看基本Python的书就直接动手写了。

但直接写的问题就是难以知道会不会有各种别的更好的实现方式,或是不知道一些应该知道的东西。这本书介绍了一些自己未曾注意的地方。

JavaScript

JavaScript也不是自己擅长的语言,但也简单看过几本书。

JavaScript语言本身,说实在没有太多内容。但从看到的各种资料来说,这东西太过灵活,导致有各种坑。这本书应该能帮助绕开不少问题。

Scala

这两年函数式语言的热潮中,Scala冒出来了。Scala跑在JVM之上,融合了面向对象以及函数式编程,个人挺喜欢这语言。

Scala也是特性及其繁多,因此手册书是不可少的。看完这本对Scala就应该有差不多的了解,非常多的特性。

Jess

Jess是什么,估计没几个人知道。Jess是Java规则引擎,写代码就是写规则,其写法类似Prolog。不推荐学习,不过念在自己曾经用过很长一段时间,也在此记录下。实际应用过就知道类似这种声明式的语言有多么难(dan)用(teng)。

正经使用且学习过的语言只有上面那么多。其它一些语言如Ruby、Objective C、Clojure、C#、Lisp、Erlang、Swift等也都曾翻看过一两本书,但都学得很浅,可能现在连Hello World都搞不定: (。最后再推荐一本,

七周七语言,这本书比较精简的介绍了不同类型的几种典型程序语言。对于扩展视野也还不错。想深入,还得具体到各种语言的各种学习资料上。

编程语言来来回回就那么些路数,学的数目一点都不重要,但若对几种不同编程范式都有了解,学习新的语言就会相对容易。为什么要总是要学新语言呢?因为总是有新语言冒出来,特别是背靠大厂的,比如曾经的C#,现在的Go,以及新近出来的Swift。孤立的编程语言没有太多价值,能撑起业界生态环境的才最应该学习。

代码实践

程序语言在学会之外还得学好,见过不少人写得代码,那叫一个难以理解,下面几本书能够提升对代码质量的品味。

这本书以Java为范例,介绍了“Clean Code”的一些范例与注意点。用其它语言得也都可以看下,很多地方都可以借鉴。个人认为在类似方面的书籍中是最好的。

设计模式的学习也是少不了的,这本书浅显易懂。

这本书让自己第一次知道了重构这个概念。熟读这本书,避免写出需要重构的充满异味的代码。

编程语言是工具,但却是非常重要的工具,怎么重视都不为过。除了编程语言之外,另外一个重要的基础就是算法。

数据结构与算法

程序 = 数据结构 + 算法,这个说法很经典。那编程语言在这个公式中处于什么地位呢?数据结构与算法都依赖编程语言来实现,也依赖编程语言来组织,嗯,就是那个“+”。实际工作究竟在多大程度上依赖算法?直接设计各种高深算法的机会估计不会太多,更多的是直接用现成的库,偶尔需要去实现某种已有的算法。但对数据结构、算法的理解却是怎么都不能少的,否则大到选择技术方案,小到代码实现都可能会出现问题。合适的算法能带来有效的性能提升,性能相当与程序世界中的“钱”,高性能能够带来站点支持更快的响应、更高的并发,能够给游戏带来更炫的展示等等。

关于算法的书很多,但看个几本应该就够了。

也是曾经的教材。基础的数据结构与常见算法都进行了描述,易读易理解。

著名的算法导论。比上一本书厚不少,介绍的内容也更多些。书写得不错,篇幅和内容也都能读下来。

这本Algorithms相比薄上很多,作为算法的入门书也很不错。

软件工程及其它

程序员并不仅是把需求翻译成代码的工具,很多时候还是需要知道些更“虚”一点的东西。这里再推荐下自己看过的几本相关的书籍,

黑客与画家。这本书是作者的文章合集,不同篇章之间的关联相对较弱,不过一些篇幅的描述很有意思。

这本书也是作者的博文合集,至于内容看那超长的副标题就知道讲得是什么方面的内容了,非常有趣的书。

在豆瓣上留下了这篇书评

这几本则是36Signals介绍他们对软件开发的看法的书,有实际工作经验对照着看会更有共鸣些。

总结

读书不嫌多,多读书,读好书。阅读各种好书,能够从他人的经验中学习,站在“巨人”的肩膀上,比什么都自己从头研究要有效率得多。