如何成为优秀开发人员系列
如何成为优秀开发人员系列 如何成为优秀开发人员[0]:怎样算是优秀的? ★引子 有感于国内软件开发人员的素质普遍低下,招聘程序员往往面试了N个人都看不到一个顺眼的(当然这里面有很大原因是教育体制的问题)。因此考虑写一个系列,聊一下“如何成为优秀的开发人员”这个话题。 ★何为优秀? 要想成为一个优秀的开发人员,先得搞清楚什么样的开发人员才能称得上是优秀的?要给“优秀开发人员”下一个准确的定义有一点点困难,于是我用举例来说明。 经我多年观察,对于大部分的软件开发团队都有这样的一个现象,那就是团队中的少数(一般来说,小于总人数的20%)开发人员具有更快的开发效率、更好的程序设计、更好的代码质量、更善于 debug、更能够解决技术难题……(总之就是让 team leader 事事省心)。而且这一小撮开发人员的贡献总和可能与另外那一大撮人(大于总人数的80%)的贡献总和不相上下(甚至可能超过)。那么,这一小撮开发人员,就是我所谓的优秀开发人员。(跑题一下,实际上这就是二八原理的一种生动体现,请看二八原理系列的帖子) 说到这里,列位看官应该明白我所指的“优秀开发人员”是什么样的了吧?(如果个别读者还是不明白,那只能说明你智商偏低,本系列帖子不适合你) 如果你觉得自己目前还不属于这一小撮之列,但是希望自己日后成为他们中的一员,你该怎么做呢?我的建议就是:仔细阅读后续的“如何成为优秀的开发人员”系列文章。我会在里面逐一介绍相关的东东,或许有助于你能力的成长。 反之,如果你自认为已经完全符合我所说的优秀开发人员,那么恭喜你,你可以直接略过该系列文章,去看点别的什么东西吧 :-) 本系列不会涉及到具体的编程语言技巧、不会涉及到具体的开发工具、不会涉及到具体的软件框架、不会涉及到任何当下时髦的概念(比如什么 OOP、FP、Pattern、SOA、REST、RIA……)。至于我具体会聊些啥,大伙看了以后就知道了。 最后补充声明一下:这里所说的优秀开发人员和开发大牛(洋文叫做 Guru)不是一回事,看完这个系列文章或许有助于你成为优秀开发人员,但并不能帮助你成为开发大牛。 如何成为优秀开发人员[1]:关于兴趣 上一篇帖子已经给出了“优秀开发人员”的定义,那么现在我来说说成为优秀开发人员的头一个重要因素:兴趣。 因为物理学超级大牛爱因斯坦曾说过:兴趣是最好的老师。俺对此深以为然。所以咱们先从兴趣这个话题聊起。 兴趣这玩意是心理学层面的东西,据说人在本能上有一种“构建”的快感(例如小朋友喜欢搭积木就是)。有些人天生喜欢写程序,就是因为能够从中体会到构建的快感。鉴于心理学不是本博客重点关注的话题,暂不再深入聊下去。 (本文写完6年之后,俺又另外写了一篇《什么是【真正的】兴趣爱好?以及它有啥好处?》,供大伙儿参考) 有兴趣的开发人员和没兴趣的开发人员,差别怎么就这么大捏?这主要是因为有兴趣的人,比较有动力去学习新东西、碰到新鲜玩意喜欢去刨根问底、碰到有开发过程的困难(比如一些难调试的bug)也显得比较有耐心、……久而久之,两种人的差别就渐渐地体现出来鸟。 所以,如果你属于下列情况之一: 1、即将进入学校学习软件这门专业 2、已经从学校毕业,即将入这个行当的新手菜鸟 3、已经工作了若干年,但还不属于优秀开发人员 4、已经在其它行当工作了若干年,觉得软件这行不错,想转行过来 并且企图在将来成为一个如我所说的优秀开发人员,那么你首先要判断一下,自己是否确实喜欢软件开发。 用如下简单的问题就能够判断出你是否确实喜欢软件开发: 假设有两个工作岗位A和B供你选择。 工作岗位A:你可以随意地去干除了软件开发之外的任何事情(只要你喜欢的,都可以); 工作岗位B:你必须全职从事软件开发,不能干其它事情。 并且岗位A的收入比岗位B高很多。 对上面这个问题,你会选择哪个工作岗位?如果你毫不犹豫(其实稍微犹豫一下也没太大关系)地选择B,那么恭喜你,你确实对软件开发非常热衷。我建议你把“如何成为优秀的开发人员”这个系列的帖子都看完,对你会有帮助。 看到这里,可能有读者要问了:如果我原先对软件开发兴趣不大,有什么方法能让我变得对软件开发非常热衷? 想回答这个问题,大伙先要明白这样一个事情:根据心理学(不好意思,又扯上心理学了)的研究,大部分人的性格、兴趣、气质等因素,大都形成于20岁左右之前。在20岁左右之后,一般不会有太大的改变。 所以,你如果已经从学校毕业,又工作了若干年,那么你的兴趣多半已经定型,改变的机会和效果不大(但也不是绝对不可能改变)。兴趣这种东西是自然形成的。依靠主观愿望去改变自己或者别人的兴趣,最终的效果并不理想。与其这样,不如找一个自己真正感兴趣的行业去做。 反之,如果你年龄尚小(不到20岁),还在读中学(甚至小学),那你现在还不必考虑“如何成为优秀开发人员”这个问题。在这个年龄段,重要的是发现自己的兴趣点在哪里,并让它充分发挥出来。 关于兴趣的话题就聊到这里,下一个话题咱们来聊聊“自学能力”。 如何成为优秀开发人员[2]:关于自学能力 文章目录 ★自学的重要性 ★自学的主动性 ★自学的常用招数 通过本系列上一篇帖子,你应该已经搞清楚自己是否【确实】有兴趣从事软件开发工作。现在我们来聊一下开发人员的自学能力(终于开始介绍实质性的东东了)。 ★自学的重要性 为啥我把“自学能力”排到“兴趣”之后捏?因为大伙儿都明白,IT这行知识的更新速度巨快。有很多新玩意儿在你读书的时候还没有发明出来呢?退一步讲,即使某个新技术在你上学的时候已经发明出来,你的计算机老师也未必会教你(或许他/她自己也不懂)。再退一步讲,即使你上学时的计算机老师比较牛,会把当时新出来的某个技术教给你,但是你将来工作中需要用到的新技术未必就当年老师教给你那个…… 上面啰嗦了一大堆,无非想说,你工作中终归会需要用到某个新技术是你以前没学过的。所以,自学能力是非常重要滴。以此相对照的是:国内的大多数开发人员都比较缺乏自学能力(这个也跟国内的教育体制有关)。所以,对于立志成为优秀开发人员你,需要先搞定自学能力这个东东。 ★自学的主动性 我把国内的开发人员按照自学的主动性不同,分为如下几类(你顺便想想自己属于哪一类): ◇抗拒自学者 这类人不愿意自学(部分人是由于懒惰、另一些是由于抵触新事物)。当工作中要用到某项新技术而需要自学时,他/她就找若干理由推诿。我估计这类人占的比例不多,万一你正好属于这种人,那还是趁早改行,别在这个行业浪费青春了(因此也别再继续看这个帖子了)。 ◇被动自学者 这类人平时没事不会想到去自学新东西。只有当上司逼着他去学某某技术,他才勉为其难地去学。我建议这类人也不用继续看这个系列的帖子了,找个凉快的地方呆着去吧。 ◇需求驱动型自学者 这类人自学的动机和方向是基于需求驱动。比如因为工作中要用到 XX框架、XX库、XX软件,然后就利用业余时间找资料去看。如果你属于这类人,就得考虑考虑向第4类人转型。 ◇计划型自学者 这类人自学的动机和方向是基于自己的规划。【定期】看看自己的知识结构有什么缺陷、将来自己想朝什么方向发展、最近哪个新东西将来会用得上 ……然后给自己定一个学习计划。 如果你属于这类人,恭喜你。 ★自学的常用招数 现在,咱们来聊聊和自学有关的几个【常用】招数。 ◇搜索引擎 由于使用搜索引擎是互联网时代的必备基本功,搜索引擎的重要性我就不多废话了(千万别跟我说你还不懂得用搜索引擎啊)。 ◇百科类网站 此处所说的“百科类”例如:中文维基百科、百度百科 … 百科类网站,顾名思义,就是拿来当百科全书使的。当你听说某个时髦的新术语,但又不甚了解,这时候就可以用上百科类网站了。各种专业术语一般都可以在百科类网站上查到比较具体的解释。不过百科类网站的功能也就仅限于此,当你需要深入了解某个技术时,它是远远不够的。 ◇订阅“BBS、Mailing List、Blog” ...