列书单之软件开发

作为一个程序员,难免要不断学习新东西。其实不光是程序员,所有想自我进步的人都需要学习。学习不等于上学。学习其实主要是自学。自学不一定是是自己学习,可以和别人一起。自学,我的理解是自主学习,不需要别人催,这一点很重要。小时候,每天上学不知道为什么,反正好好学成绩好父母就开心,玩的时候,父母也不会太限制。但是,一旦不上学或者离开学校仍然自主学习的人才会不断提高和进步。比如小时候,暑假很长,除了无聊的暑假作业,如果父母,长辈,哥哥姐姐可以给出一个书单,那么在家看书会是一个很好的提高自己的机会。我记的我小时候,读过一些连环画,世界名著翻译本,例如汤姆索亚历险记(英文版在这)。虽然内容我完全不记得了。对了我还读了《钢铁是怎样炼成的》(应该是这版)。印象中就是男主角的青春爱情很吸引人,他的革命热情完全不理解。还有一些书,我都不记得了。每个人上小学到上大学之前,暑假要是能多读一些书,对他/她的人生影响是很大的。我现在觉得上学时的暑假读书太少了。当然这和我那个年代有关系,书很少,受过良好教育的长辈很少,自然指导就很少。但是,我觉得我幸运地地方就是我父母对我看书十分支持,而且上学的过程中我认识了很好的朋友。我从朋友那借到了一些书,虽然我也不记得了。但是,我印象深刻的是,有一次我去同学家。我看到他的卧室墙上挂着一个地图,我的直觉是中国地图,因为我家里也挂了一个。但是,我离远处看上去觉得轮廓不一样。走近了一看,原来是一张美国地图。我就非常好奇问为什么挂美国地图。我同学说那是因为他在读《华盛顿传》(不记得当年的版本了,就在amazon随便找一本。)。我还是奇怪,看华盛顿传为甚麽要挂美国地图。他说因为华盛顿传里有好多地名,而且华盛顿领导了独立战争,看了地图才能明白当时的形式。哇,这个对当时的我非常震撼。觉得真是不一样的读书方式。我同学很大方地说,等他看完了,就把书借给我看看。我当时很开心,一是好奇想看看这个华盛顿传是否真的这么有趣,二是为自己认识这样的朋友感到十分高兴。所以,这也是我所说的自主学习,可以两个人一起。我们就有了一提起讨论的东西。后来,也是他带着我周末一起去市立图书馆看书,上自习。这麽多年下来,一直是我很好的朋友和榜样。

OK。扯远了。说了这么多,就是想说看书是自主学习的一个方式。那么,对于程序员这个职业,看书学习新技术就是十分必要的。在这里,我想列出一个简单的书单以供参考。

首先,我的建议就是看英文书。中文书很难看懂,而且错误很多。我上学的时候就是在这方面吃了苦。那么,问题是英文不好怎么办,我也是同样的问题,但是我没能解决。在我上大学时,还是看了好多中文书或者中文翻译的书。我想现在的大学生应该英语都没问题。所以,一定要看英文书。那英文实在不好怎么办,买一本英文的,再买一本翻译的。对比着看。是我知道,这有两个缺点,一费钱,二费时。费钱,两本书,有时翻译的很烂,或者没翻译的。费时,看英文的很慢。但是,没办法,想以后从事这个职业就得看的懂英文的科技书。一旦,看完一本,后面就可以很顺利看英文的书了。其实,这种技术类的书比小说容易看多了。

下面,我列出一些我个人比较喜欢的书,有基础类的,也有技术类的。

  1. SICP,structure and interpretation of computer programs, 这是一本经典教材,被誉为是魔法书,看封面就知道了。这是MIT的EECS一年级教材。如果是计算机专业的学生,一定要读一读这本书,非常震撼的一本书。我是上研究生的时候才从图书馆里借来看一看。我当时就对作者佩服的五体投地,觉得应该上本科的时候就看。这是一本从概念上讲解计算机程序设计的书。一开始接触可能有点难,但是看过五章之后,你就会有一种上到一个高层次的感觉。而且有这本书垫底,以后的计算机系专业课学起来会非常轻松。而且MIT给出了作者的教学视频,真的是功德无量。互联网时代使自学变得容易了。当然,还是那句话,得自己有定力和意愿去学。
  2. How to design programs: an introduction to programming and computing. 这本书也是一本基础书,比魔法书容易上手。而且循序渐进,没有任何programming的知识也能看懂。非常适合大学一年级的学生。
  3. Effective Java. 说了两本大部头的科班书。我们来说说这本技术书。在我上学的那个时代,Java是一门新兴语言而且前景美好。这本小册子就是Java领域的必读经典,作者也是Java libraries的开发者,有着丰富的经验和对Java的透彻理解。这本书对于工作中的实际程序非常有帮助。看过这本书之后,对于语言的运用会上一个台阶。
  4. Refactoring:improving the design of existing code. 这本书也是OO领域的经典书。我第一次知道这本书也是从我一个同学那里。上研究生的时候,我在宿舍里玩着我的玩具版本的Java代码,我同学看到说:“你应该看看重构这本书。”我就去图书馆借了这本书果然是本好书。感谢我这些同学,真是对我帮助很大(回头我要写一个系列blog介绍我这些大牛同学,呵呵)。总之,这本书一定要看。书中的知识在每天的工作中都会用到。我个人甚至觉得比design patterns还重要的一本书。作者Martin Fowler也是一个大牛。总是能把问题讲的浅显易懂。我个人非常敬佩的业界翘楚。有关这本书的理解我会专门写一篇blog来介绍。

先介绍到这里我会在后面blog里继续介绍我认为很重要的书。

One thought on “列书单之软件开发

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.