前言

    一直想写篇这样的文章,最近忙里偷闲抽空写了一下,这个东西我和很多人都谈过,特别是对水平一直在不是很高的水平段徘徊又不知道怎么提高的人会很有帮助。我当然也有过这样的时期,也是通过阅读度过了这个阶段,所以拿来与大家分享经验。

   本文所指阅读的内容包括书籍、杂志、网站,其中书籍写的最为系统,杂志内容会比较新,网站内容多但是杂乱。要根据目的进行选择性阅读。

阅读的种类

   我把需要阅读的书归为几类,根据水平情况进而选择更深入的读物,水平不对等的读物建议少量、快速的阅读,了解即可。

 1. 经验心得类:这个类别的书对于在校或刚毕业的人非常有价值,看看大牛的成长经历和教诲会减少你走的弯路,能让你早起形成更好的思维习惯和基础技能。这类书建议就读1到2本就足够了,重点是你能把别人的建议做到什么程度。

 【推荐书籍:《程序员修炼之道》、《我编程,我快乐:程序员职业规划之道》、《软件开发者路线图:从学徒到高手》】

 2. 专业技术类:这是这个行业必须要读且要读的透的东西,特别是你专长的方向更是如此。细分起来我觉得以下类型的知识都要有所涉猎,然后再把自己从事的方向重点精度。

   1)计算机语言类:你最常用的那一种开发语言,必须深入学习。

   2)计算机新兴语言或衍生语言:多学几种语言将极大提升你对语言的认识,并且知道差异你会知道在具体环境下,那种语言更合适。

   3)正则表达式:计算机编程人员的最基本技能之一,建议反复练习,做到可以随手写出简单的正则,复杂的正则通过查看语法也能正确编写。再有兴趣可以研究一下正则表达式怎么写性能更好。

   4)数据库:关系型数据库你必须精通一个,建议先看看mysql,同时还要多去了解一下nosql,建议先看看redis。

   5)设计模式:计算机编程人员不能不掌握的技术之一,必须要有非常深入的理解,并且在开发中能灵活运用,切忌硬套模式。

   6)软件开发理论:不管你是不是喜欢敏捷开发,你都要知道它,我是对其中一些实践非常喜欢。传统的开发理论肯定也要了解。

   7)服务器知识:windows的服务器我从来没用过,但是如果你用linux的服务器,linux的基本操作你必须熟悉,要能在上面进行问题排查这样的基本工作能力。

   8)系统架构:这类好的书籍很少,我也是零零散散看的一些文章,多找点分布式相关的东西看看,会有很大帮助。

   9)开源产品:这个其实非常重要,特别是对做java这种类库丰富的语言而言,你要了解已经有什么可以用的东西,能解决什么问题,避免重复造轮子的问题。最后还有个非常重要的事情,就是一定要学会阅读官方的文档,他既可以在线免费阅读,有很容易找到,同时真的很难有比官方文档写的更好的书籍。

 【推荐书籍:《Java编程思想》、《Head First设计模式》、《快学Scala》、《深入理解Java虚拟机》、《鸟哥Linux私房菜》、《高性能Linux服务器构建实战》、《持续交付》、《Mysql技术内幕》、开源产品的官方文档】

 3. 资讯杂志类:这类书就是把网络上杂乱的东西进行规整,可能让你更高效全面的看到新的东西,这对你扩宽知识面、了解新事物都非常重要。

 【推荐书籍:《程序员》、《互联网周刊》】

 4. 思维扩展类:我非常不建议大家完全沉迷于纯技术类的书籍,做一些其他的事情可能会激发你对原本一些事情另一个层面的理解。所以可以看看微观经济学的书,还有一些创业指导的书籍。

 【推荐书籍:《牛奶可乐经济学》、《怪诞行为学》、《Facebook效应》、《四步创业法》、《精益创业》】

阅读与提高的关系

   我相信很多人会有疑问,是不是读完了上面的推荐书籍,我就一定牛了呢?!我要告诉你,这个完全不是对等的,要看你读了以后又做了什么。我强调的方面有两点:实践思考(貌似很多地方都会有类似观点)。

   一方面,阅读了以后不进行实践,你很难领会里面说的一些东西,没有直观的认识。所以我很喜欢在做一个事情的同时,找相关的书看,而不是去盲目苦读一些暂时完全用不到的技术方向,那个只适合泛读了解一下即可。多写一些demo来验证一些想法,然后再去书上找点更详细的说明,一来二去就能比较好的消化这本书了。

   另一方面,不思考就没有提高,缺乏思考的过程会让你对知识的领会层面就比较低,同时你能领会的内容也会变得更少。比如经验心得的书,作者写出来只是自己经验的一个子集,你看懂并认同了的部分又是一个子集,然后你实践了的部分再一个子集,你必须要让你能领会实践的这一点点东西升华,让你认同的新知识为你所用,发挥出比别人更高的价值。

阅读习惯

   1. 弄清什么精读什么泛读:有些书我看了也犯困,有些书我看完以后也觉得浪费时间,所以必须要有取舍。对于专业技能的书,比如设计模式就是要反反复复仔细读,但是对于资讯类的,或者与你从事方向并不太相关的就泛读一下即可。最重要的就是你在读一本书之前,你要知道你想得到什么,有了目的才更有针对性,从而你也会自然选择一种更加合适方法去做。在china-pub或者豆瓣上找一些书评比较好的会节约你选择的机会成本,如果真买了本不太好的书,就快速的翻阅浏览一下即可。

   2. 好书值得重复读:这个事情也不知道几个人做过,同样一本经典好书,在你不同水平的时候阅读你会发现领会的层次完全不一样,比如《Java编程思想》这样的书到毕业几年以后看感觉真是一本细致深刻的书,而最早还当做java入门读物在看。另外,我有时发现某个知识点当时不能领会,我会一直惦记着,是不是回来看一下,时间长了,加上自己实践的经验居然就搞明白了。

   3. 做读书笔记:我不知道有多少人有这样的习惯,只要是我精度的书,我都会很仔细的在书上做笔记(一本精读的书看完还和新的一样,我觉得就和没读一样),这些笔记对你下一次阅读会更有帮助,我有时还会修订自己的笔记,因为第一次的理解可能还有偏差。但是有些泛读的书我可能就只会勾出来比较喜欢的一些内容,比较好的书我会写一个读后感总结一下,每次写完读后感都会觉得理解又进了一层。

   4. 边读边做:我估计很多人对书中提到的知识点都是看过就认为掌握了,但是计算机是一门实践科学。书上的例子肯定是要选择性的运行一下,对新技术的书,肯定也要把sdk弄下来写个小程序。仅仅看完一本书,你知道的其实还是太少。

修炼的标准

   最后说说,我们怎么才算真的提高了水平?我觉得达到以下几个标准就算是有所进阶了。

   1. 一门深入,其他旁通:首先要搞清楚人的精力是有限的,你只可能在一段时间内有一到两个深入研究方向,所以你要把你研究的东西真正深入下去,成为这个领域的专家。但同时不能充耳不闻其他的动向,你要知道这个技术领域的相关技术,还要了解其他的技术领域,其实技术都是相通的,你在学习相关东西的时候也是在提高自己。达到这个层次,知识的深度和知识面就算有了,别人才会对你的技术水平有兴趣,你才能与别人去交流一个你不擅长的领域。

   2. 了解技术趋势,形成自己认识:如果你对自己领域的必要知识已经储备差不多,你要关注趋势,否则很容易在不经意间被淘汰。但是我还是强调思考,越新的东西就有越不确定性,这个选择性的代价必须押宝在自己身上,你要知道各种趋势的差异,你要有自己的认识和判断,最后就算选择了个非主流,你的技术成长都会比那些没思考盲从的人快的多。

   3. 逻辑思维指导行为:计算机是个逻辑思维要求很强的东西,但是你做任何事情都有逻辑,这才是到了一定境界。能有条有理的写出文章、做出报告,办事能有条有理,这些都是能力的体现。话说我写系统都是先在文档上写完逻辑,再去写实现代码,别人觉得我开发速度快,其实只是我想明白了再动手而已。

   4. 你的知识值得分享:只有当你达到一定水平,你的知识才会被更多人渴望,其实知识是分享以后才会变得更多。好吧,从今天开始坚持写blog吧!