上一篇:用vim格式化文本 - 下一篇:Perl语言的效率及其他
版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/01/24/how-to-recognise-a-good-programmer/以及本声明。
在delicious上看到一篇去年的文章: How to recognise a good programmer。 正好这段时间一直在为面试发愁,看看这篇文章很有帮助。原文篇幅很长,这里就不逐字逐句地翻译了, 只把要点和看过之后的体会写出来,希望能给同样是为寻找程序员而头疼的同仁们提供帮助。
优秀程序的几个必要条件:
1. 要有热情
企业中有这样一种人:职业程序员。他们之所以做IT是因为IT是个好工作,而不是因为对技术充满热情。这些人回家后绝对不会写程序。 对于他们来说,编程是每天必须的工作,公司为他们提供技术培训也是理所应当的。 这种人缺乏热情,也不会是好的程序员。
其实这类人相当相当多,随手一抓就能抓出一大把。他们自己也有电脑,但那是用来上网看电影打游戏的,不是用来搞开发的。 开发环境、编辑器甚至连Office都没有。这样的人也很难期待他是优秀程序员。
2. 会自学,爱自学
大家都知道IT行业更新很快,不会主动学习的人很快就会被淘汰。有些人你要他们学习某项技术时他会说“公司给我培训我就学”。 当然,在找工作时他们有可能在家里学习必要的技术,但那不是主动的自学。好的程序员热爱学习新技术, 对于他们来说学技术纯粹是好玩,纯粹是个人兴趣。有些人还会制定出完善的学习计划。 这样的程序员根本不用培训。
3. 聪明
也许程序员都给人以不善交际的印象,但其实他们不是。好的程序员都是智商奇高的人, 不可能不善交际。而事实上的确在某些场合他们不善言辞,那是因为他们的兴趣不在那里。 一旦讨论到他们感兴趣的技术话题,他们就会扯开话匣子说个不停。
在招聘时可以试着去谈论一些他可能感兴趣的技术话题,看他能侃到什么程度。 如果问一句说一句或者说不出来什么,那就不用再抱希望了。
4. 隐藏的经验
优秀程序员或多或少都有些“课外活动”,如参加开源社区,为处理日常生活的事情而写的小程序, 个人网站,或者纯粹为了好玩而做的小东西。而面试时这些东西是不会写在简历上的, 因为他们觉得这些根本算不上简历要求的“经验”。
我经常看到有些应聘者的简历上把大学时做的小学期作业都写在上面。这种人就不必考虑了—— 连作业都自认为是“经验”的人可以想到他的水平有多高。
所以,优秀程序员的简历通常都很简短,不过你可以去问问他们,除了简历上写的东西之外, 工作之外有无技术经验,即使完全和工作无关也行。如果他答不出,那即使简历有20页长,他也不会是优秀程序员。
5. 广博的技术知识
这一点很简单,学得技术越多水平越高。不一定要完全精通,但了解许多毫不相关的知识对个人水平有很大帮助。 但同样,优秀程序员不会把他知道的东西全都写上,那些他不精通的东西会认为不值得一写。
不过有一点要注意。如果简历上写到“精通Java、J2EE、Ant、XML、SQL、Hibernate、Spring、Struts、EJB”, 就要小心了,这个人不一定优秀。因为这些技术都属同一个领域,关联性太强。 但当你对这些技术一无所知时,如何分辨呢?你可以让他讲讲这些技术有什么联系。 精通一个领域的技术的人经验丰富,但他很可能不是个优秀程序员。
为什么需要有广博的技术知识?我个人认为,即使是毫不相关的技术,其实也是能融会贯通的。 学得技术多了、杂了,看到不懂的问题自然而然地就能想出最合适的解决办法来。
不过有一点要注意,如果他关心的技术中有尖端技术,如今天的AIR、Flex之类, 那你就可以考虑录用他。
另外优秀的程序员对技术很敏感,他能判断出某项技术是否适合于完成工作。 如果被迫使用一种他认为不适合的技术去工作,他会觉得很不爽的。
6. 资格证书
资格证书、学位等不是优秀程序员的必要条件,但至少不是个反面信号。优秀程序员大都有计算机科学的学位。 也有很多人没有,但这并不能说明他不优秀。专业资格认证如MCSE、CCNA等也是, 这些只是用来证明这个人已经学会了相关知识,企业在招聘的时候就可以省去考核的麻烦, 并不能证明程序员有多么优秀。如果你的企业确确实实需要非常优秀的程序员, 那就别去理会这些认证,而是把精力花在实际能力的考察上吧。
总结
如果将优秀程序员的条件按条列出的话,可以得到如下内容:
正面信号
- 对技术有热情
- 以编程为乐
- 对感兴趣的技术话题会滔滔不绝
- 工作之外自己做过某些项目
- 主动自学技术,但不是为工作而学习
- 对技术的好坏、是否合适有自己的看法
- 使用自认为不合适的技术完成工作时会很不爽
- 聪明,很多话题都能侃侃而谈
- 在上大学或工作之前就写过程序
- 有许多简历上没写出来的经验
- 知道许多毫不相关的技术(一般不会写在简历上)
负面信号
- 把编程当作每天的工作
- 不喜欢谈论技术,即使受到鼓励也不会说
- 只通过公司的培训来学新技术
- 愿意使用你选择的任何技术来完成工作,认为“所有技术都是好的”
- 看起来不怎么聪明
- 在大学时才开始学编程
- 简历上写出自己的所有经验
- 仅专注于一个或两个领域
2008-01-25 13:08
不客气的继续说, 以这样做标准, 偶只能自己去教学生. - 幸好还有一个符合多数条件的.
2008-01-25 16:04
我相信这样的人是存在的。事实上,能碰上个满足两条的我就心满意足了。
2008-01-28 12:32
不客气的接着说,我在计算机系混了四年,这样的人也就只遇到两三个(包括charlee)。
2008-01-28 21:57
@smalldust 过奖过奖。其实基本上技术blogger都满足这些特征。
ps. 你最近好像一直都没露面啊。。。。
2008-03-28 11:03
其他条件我都赞同,也都是基本应具备的,虽然现在这样的人很少(也许将来有一天能自己穿衣服也会被认为是优点.).但是,把”在大学时才开始学编程”列为负面信号让偶在顿生悲观情绪之外也有点不服,偶原来没条件(不怪谁,偶的错.),上大学时学了一点,工作以后一直努力学习编程(暂时做的是其他行业,一般人都不能保证自己能上什么学校学什么专业,哪怕分数再高.另外,偶也不光学编程(狭义),光学就没太大意思.其实偶也就是瞎捣捣.没其他爱好.虽然起步有点晚,但偶相信不会差到哪.偶认为时间不是问题,关键在于学习的效率.
2008-03-28 11:53
@堂吉诃德 谢谢你的评论。认为上大学之前没接触过编程是弱点,的确有些偏激了。事实上也有许多上学甚至是工作之后才开始学习计算机的人,他们的能力也都很强。
但是最近发现,在高中时代就参加过NOI或IOI的人,工作之后他们的学习和领悟能力要远远高于甚至是工作了一两年的人。
或许不应该将上大学之前没学过编程作为负面信号,而是应当将上大学之前学过编程作为正面信号,可能更好一些吧。
总之,谢谢你的评论。
2008-03-31 11:43
那些工作了一两年的家伙那一两年都干了些什么?!对他们来说,毕业意味着不再学习.当然,对同一个人来说,接触越早越好.
2008-03-31 15:09
@堂吉诃德 不知道您这句话是什么意思?抱歉无法理解您是什么观点……
2008-06-03 10:55
“编程当作工作”这没什么错的。
工作永远是种负担下的压力。
如果没有生活压力,谁愿意替人打工的???
即使优秀的程序员。
也许他更愿意花精力在自己的想法上。
不能认清这个工作和生活,工作和梦想的区别。
大都是刚毕业的 初哥 而已。
但 “热情的员工”,无论是否程序员,都是好员工了。
只是,经常的,热情 总会被 无能的领导,压抑的工作规范,冷漠的同事 而浇灭。
另,“广博的技术知识” 在现在 互联网时代 是非常必要的。
开发一个网站,一个软件,已经不仅仅是一项技术,一门语言就能完成的了(学校的毕业设计除外)。
可以肯定地说,仅有某项技术专长的人,在今天已经不适合工作。
昨天碰到一个 30多岁的人应聘建筑设计工程师的说懂用CAD,但他连OFFICE都不会,也不知道在WIN那里能找出来。 结果发现,对CAD的操作也是麻麻地,连工程图都看不明白。
最后,对于 优秀程序员的 定义。紧要的 还是 “能聊得来”。
所谓,不是一家人不进一家门,话不投机半句多。
有共同的爱好,相似的追求,相近的想法。 那才是 真正适合的 优秀的程序员。
2008-06-03 11:01
另外,我更愿意,将 我所应用过的 技术 和 能力,还有成绩 罗列出来。
让人“更快地,更准确地”认识我,领悟我的意思。
这是 一种工作须要。
时间对 雇佣双方都非常之宝贵。
只有 故作清高的酸秀才 不愿公开自己的能力,将长处支支吾吾遮遮掩掩,认为自己的 含苞的玫瑰,等待别人开采。
我可不屑 这种 小女子般的玫瑰员工 呢。
2008-06-03 11:04
AIR、Flex
尖端技术,只适用与 实验室研究。
如果放之企业应用,那所要冒的 维护费用,技术变革风险,成倍大于 成熟技术。
估计这篇文章,是某个不得志的程序员YY之作吧。
和现实不太相符。
2008-06-03 16:43
@changker 谢谢你写了这么多来讨论这个问题。
其实把编程当作工作本身没有错,但如果把编程*仅仅*当作工作,我觉得还是不大合适。实际工作中也是,我很希望我的下属能够在业余时间也搞一些技术研究,做做网站、写写blog什么的,但毕竟那是人家的个人时间,没法强迫别人。但每次我在面试时总要问一句“平常上不上网?泡不泡技术论坛?有没有网站blog?”,以此来探究面试者究竟对技术有多大的兴趣。
至于简历上写什么东西,我觉得我们的看法应当是相同的,可能只是表述方式不一样而已。就拿我个人来说,如果我自己去应聘,我肯定不会在简历上写“熟悉Flash”的话,虽然我也能做出比较好的Flash程序来,但我知道自己的水平还十分有限。学到的知识越多,就越知道自己的不足在哪里。举个反例,就像你刚才说的那个建筑设计师一样,也许他只会一点点CAD,对于他来说,CAD就是他最熟悉的技术了,所以他会写。——所以说,只写自己精通的那些技术,并不是说遮遮掩掩,而是不班门弄斧而已。
至于AIR、Flex等,我觉得还是有其应用价值的。企业应用肯定不会,但对互联网公司相当有吸引力,因为新技术可以作为他们招揽客户的筹码。至少,我们现在已经开始尝试使用Flex了,我就十分后悔一年前没能储备Flex方面的人才。
2008-06-06 15:51
恩。出发点不同,对问题的看法多多少少都会有些差别的。
简历也仅是一种表达方式。
在真实的工作环境中溜一溜,就知道是骡子是马了。
劳资关系是个永恒的话题啊。
可惜不是人人都是刘备,身边总有诸葛亮和五虎将:)
2008-06-06 17:10
现在我感觉,招聘的时候一定要笔试C语言和数据结构。以前总以为,开发时用什么技术就考什么技术,其实并不是这样。一个不懂C的程序员并不是真正的程序员。学会了C语言和数据结构,其他语言就能很快领悟了。

2008-01-25 09:27
不客气地说,以这样做标准,咱们公司招不进来几个人了。