有同学在评论里留言,说让我分享一下读过的书和感受。事实上,每个人的目标都不一样,适合我的书不一定适合其他人,因此我觉得分享一下我挑选书籍的方法,顺带分享几本好书,可能对读者来说更有价值。
所以在分享书单之前,我想先聊聊我是怎样挑选书籍的。
评价驱动 vs 能力驱动
不同于一般的评价驱动,也就是哪本书评价高,读哪本,我读书,是极其功利的能力驱动,我的职业规划和工作需要我掌握什么能力,我就去看什么书。
评价驱动:
能力驱动:
这两种阅读方式,一种读书是为了接受教育,另一种,则是为了研究。
评价驱动式阅读,就好比这学期有一门叫“计算机编译原理”的课,配套一本《计算机程序的构造和解释》这本书,你要把这本书读完;
而能力驱动式阅读,则好比你需要写一篇关于“计算机编译原理”的论文,你需要对这个课题进行研究,而《计算机程序的构造和解释》,只是你研究过程中的一份参考文献。
我的短期目标是成为一个专业的程序员,这是一个很空洞的描述,因此我将其细化为各种能力:
- 精通一门编程语言:一个连一座山都未曾征服的登山者,怎么敢称自己是专业的。同样,一个专业的程序员,也至少要精通一门语言,至于是什么语言并不重要。对于我而言,这门语言是Java。
- 掌握程序员通用技能:有些技能,不管使用哪种语言,都需要具备的。比如如何编写出整洁易读的代码、通讯协议、计算机的原理等。
- 掌握一些代码之外的软技能:生活不只有代码,还有诗和远方,程序员也不可能一天到晚写代码,你需要学会沟通、需要学会让自己有良好的心态,需要学会面对压力等等。
接着再根据我需要的能力,去寻找对应的书籍,这种主动式的阅读,比起传统的把读完一本书作为目的的被动阅读,会带来更高的学习效率。由于我是带着寻找答案的目的来阅读的,因此读的时候会更加专注,同时,如果书中不能完全解答我的疑惑,我还会继续寻找更多的资料,直到我认为自己掌握了足够的知识。
由此,我的书单,或者说我的能力清单,也就产生了。
Java
我不想争论到底是Java好还是Python好,我只想好好精通一门语言。
1 JavaSE - 《Effective Java》
这是一本很好的提升JavaSE水平的书,里面介绍了很多关于编写Java代码的优秀原则,对于养成良好的Java编程习惯和深入理解Java语法细节,都有很大帮助。唯一有点遗憾的是翻译,这是很多书籍的通病了,建议结合英文一起阅读。
说来惭愧,这竟然是我阅读的第一本技术书籍,整个大学四年,我并没有主动的去阅读书籍,后悔是没用的了,种树的最佳时机是在十年前,其次是当下。这本书让我养成了每天阅读学习的习惯,这个的重要性远超它带给我知识的重要性。
2 JVM - 《深入理解Java虚拟机》
要想真正精通Java,必须要掌握JVM。在掌握了JVM的内存模型、类加载机制等知识之后,后面看Java代码的视角就完全不一样了,你会不自觉的从JVM的角度去看代码,你会好奇这段代码,JVM是按照什么机器指令去执行的。
3 Spring - 《Spring in Action》
之前学过Spring,也做过项目,但都是利用网上一些视频、博客等资源学习的,去年年中,因为项目的变动,新的项目需要用到Spring和Spring Boot,于是打算重新学习一下。从搜索引擎的反馈结果,我认定了这本书。看看书的目录,就知道对Spring的讲解非常全面,是一本非常适合Spring入门的书,看完之后对如何使用以及为什么要使用Spring提供的各种技术,会有一个很详尽的理解。
当然,就像上面提到的,书中的内容往往不能完全满足我对知识的理解,就像这本书中提到的“控制反转对于单元测试起到很好的作用”,书中并没有做进一步解释,因此我只能自己找其他的资料继续了解。主动式的阅读也让我收获到更多的东西,最后输出了“用小说的形式讲解Spring”系列的文章。
4 Restful - 《Rest in Practice》
现在的接口基本上都是restful接口,什么是restful,为什么要使用restful,它是怎么发展起来的,带着种种疑问,我在网上找到了这本介绍restful的书,而它也完美的回答了我的问题。 还是和之前一样,光看一本书是不足以掌握一项技能的,利用搜索引擎可以找到更多的关于Restful的论著和讨论,以至于我研究完这个专题之后,写出了我迄今为止点赞数最高的文章——《如何给老婆解释什么是Restful》。
回过头来看这篇文章,看到文章最后的十二篇参考文献,发现自己在不知不觉中写出了一篇可以发表为大学毕业论文的文章ヽ( ̄▽ ̄)ノ。
5 Next
无知的人,总觉得自己很厉害,什么都懂;厉害的人,喜欢望望天空,告诉自己,“你很无知”
学无止境,对于Java这本语言,我需要去掌握的还有很多:
- 并发编程:不仅仅是Java,其他语言也都会涉及到并发,只要你想利用多CPU提升你程序的性能,你就要学会处理并发问题、学会并发编程。准备阅读的书籍:《Java并发编程实践》
- 微服务:不得不说,微服务实在是太火了,恰好现在所在的项目也是用到了微服务+Docker,因此了解一下微服务架构,对工作、对自己的未来都是有很大帮助的。准备阅读的书籍:Spring官网、《Spring Cloud 微服务实战》、《微服务设计》…
- 设计模式:以前对于设计模式都是零零碎碎的了解,准备系统的学习一下,对自己写出优雅的代码、看大神的代码乃至设计出优雅的架构都会有帮助。准备阅读的书籍:《Head First设计模式》
- 阅读源码:可以说,上面所学的种种Java技术,都是为了阅读源码做准备的,而阅读源码,则是为了写出和优秀源码一样优秀的代码做准备的。现在还没想好要读什么源码,到时会先搜一下阅读源码的一些技巧和适合新手阅读的Java源码。之后,可以从自己最经常使用的开源软件,比如Spring和Tomcat入手,一个个了解它们背后的机理。在一起这么久,连对方底子都没摸透,我怎么好意思?
程序员通用技能
一个连代码都写不整洁的架构师,你能指望他设计出多好的架构?
1 整洁易读的代码 - 《代码整洁之道》
这是一本提升代码审美的书,看完之后,你再也不会容忍自己写出那些自己过几个月回过头再来看时,一脸懵逼完全看不懂的代码了。
2 代码重构 - 《重构》
《代码整洁之道》侧重于介绍什么是整洁的代码,而《重构》则告诉你怎样把不整洁的代码,修改到整洁。这本书很厚,但我只用了两个星期就把它“读完”了,就像书中作者所建议的,仔细阅读前面介绍重构通用方法的四个章节,后面的都是介绍具体重构方法的,可以粗读,然后把这本书放在桌子旁边,需要时再去查阅。
可以说,这就是一本重构的字典,就像你有了英语词典之后,学英语时就不再害怕遇到生词一样,有了这本书,你再也不必担心不会重构代码。
3 TDD
《代码整洁之道》、《重构》以及下面要介绍的《程序员职业素养》,都提到了TDD的重要性,这也确实是一名专业的程序员的必备素养,因此去年年末,我对TDD做了一番研究:
4 Next
作为一个程序员,还有很多通用技能需要掌握,可惜大学不是读的计算机专业,不过既然这么热爱写代码,那么有些技能就必须补上:
- 通讯协议:TCP/IP协议,以及应用层的Http协议,这些技术在工作中虽然很少需要直接使用,但是和JVM一样,弄清楚这些通讯协议背后的原理,以后看问题的视角也就不一样了,准备阅读的书籍:《图解Http》、《TCP/Ip协议》
- 解释器和编译器原理:这门课是很多计算机专业的必修课,所以准备读一下一本教科书,《计算机程序的构造和解释》
- 学一门新的编程语言:编程语言在很多方面都是相通的,当然也有互补的地方,而且快速掌握一门新语言,也是程序员的必备技能,准备学一门和Java比较互补的,也许是Ruby?
程序员软技能
生活不只有代码,还有诗和远方。
1 《软技能-代码之外的生存指南》
如果要选一本2017年对我影响最大的书,那无疑是这一本《软技能-代码之外的生存指南》。
在这之前,我为公司写代码只是为了交差,在这之后,我把自己当做一个公司,我写的代码影响到“我”这个公司的声誉。
在这之前,我写文章只是为了总结,在这之后,我搭建起自己的个人博客网站,开始经营自己的品牌——Sexy Code,开始用心在写作,思考怎样表达才能让读者更加容易接受,思考我所讲的内容够不够全面。
在这之前,我只知道学更多的技术,在这之后,我懂得了每天再划分一些时间出来,学习代码之外的一些技能。 我在简书上写了关于这本书的三篇读后感,不过这远远不是我所收获的一切,很多东西很零碎,不适合写出来:
2 《程序员职业素养》
这本书很薄,却介绍了很多程序员在工作中会遇到的事情的处理方法,比如怎么说不、怎样作出承诺、怎样管理好时间等等,特别是里面对TDD的介绍,让我对这个听过很多次却依然很陌生的名词产生了兴趣,并进行了一番研究。
3 阅读能力
随着看书习惯的养成,看书的效率就显得越来越重要。去年花了两个多月的时间,专门读了七本书,研究“如何高效阅读”这个课题:我读了这七本书,写了这篇关于如何高效阅读的文章。
4 经济学
不知道为什么会对经济学感兴趣,在年初订阅了一个经济学的课程。直到最近突然发现,代码和软件架构中经常提到的“解耦”、“分层”,不就是经济学里说的“分工产生效能”吗,而软件中追求的高性能,和经济学中追求的“效率”,又何尝不是可以互相借鉴呢?当然,学点经济学对生活也是很有帮助的了。
这里就又不得不提到“跨学科”这个很潮的词了,软件工程、经济学、生物工程……这些学科之间,肯定是有可以互相借鉴的,Docker容器化的设计者,是不是从集装箱中得到灵感呢?而集装箱的设计者,是不是从某种生物的身上得到的灵感呢?
5 Next
代码之外的技能对自己的帮助是如此之大,以至于我在今年年初就给自己想好了要学哪些技能:
- 批判性思维:看的书越来越多,再加上碎片化阅读,每天摄入的信息量是越来越大,哪些结论是科学的,哪些是值得质疑的,掌握批判性思维就很重要了。准备阅读的书籍:《学会提问》、《这才是心理学》
- 心理学:有时候总是会被一些事情搞得很心烦,是不是该学学心理学了?
- 沟通:如何高效沟通?如何做一个高情商的人?如何做一个幽默的人?这些都是困扰我很久的问题了
- 学习能力:作为一个程序员,自认为学习能力还算可以,但是在学校时的经历告诉我,我的学习能力比起那些学霸来说,还差的很远,是时候好好研究一下如何学习了。
- 极简主义:极简,这个词总是很吸引我,看看自己经常买了很多用不到的东西,经常把好吃的东西吃到撑了,我决定好好研究一下极简。准备阅读的书籍:《极简主义》…
- 搜索能力:2017年我最大的进步当属将谷歌列为自己的首选搜索引擎,并且强迫自己用英文去搜索,强迫自己查看英文资料。不过这仅仅是搜索能力的起步,谷歌的高级搜索,以及其他一些搜索技巧,也是越早掌握越好的
- 专注力:尽管我自认为是一个很自律的人,然而自律不代表专注,经常还是无法全神贯注的投入到一件事中,看电影时想玩手机,吃饭时想玩手机,写作时想玩手机…是时候学一下怎样保持专注了
介绍了这么多书,最后还是要回到一开始提到的,能力驱动。
读再多的书,也不能确保你比别人优秀,关键在于书中的知识,有没有转换成你的能力。
这个观点我已经忘了是在哪里看到的了,但是这个观点是如此明显,以至于都不需要对它进行批判性质疑。不过就是这么明显的道理,很多人都忘了。而这,也是我坚持写作的原因,只有能够用自己的语言,把知识重新输送出去,才算是真的弄懂了知识。
同时,写作带给我的粉丝、评论互动、点赞,也是一种正向反馈,这促使我继续通过阅读,获得大量输入,进而持续输出。
工作一年后的自己,反而比读大学时的自己更加好学了,也许是大学时忙于写作业、泡妞、吹牛皮、防挂科而没有精力考虑人生规划了吧,也许是出了象牙塔之后接触的人和事更多了吧,anyway ( ̄▽ ̄)~*