在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等也是, 这些只是用来证明这个人已经学会了相关知识,企业在招聘的时候就可以省去考核的麻烦, 并不能证明程序员有多么优秀。如果你的企业确确实实需要非常优秀的程序员, 那就别去理会这些认证,而是把精力花在实际能力的考察上吧。
总结
如果将优秀程序员的条件按条列出的话,可以得到如下内容:
正面信号
- 对技术有热情
- 以编程为乐
- 对感兴趣的技术话题会滔滔不绝
- 工作之外自己做过某些项目
- 主动自学技术,但不是为工作而学习
- 对技术的好坏、是否合适有自己的看法
- 使用自认为不合适的技术完成工作时会很不爽
- 聪明,很多话题都能侃侃而谈
- 在上大学或工作之前就写过程序
- 有许多简历上没写出来的经验
- 知道许多毫不相关的技术(一般不会写在简历上)
负面信号
- 把编程当作每天的工作
- 不喜欢谈论技术,即使受到鼓励也不会说
- 只通过公司的培训来学新技术
- 愿意使用你选择的任何技术来完成工作,认为“所有技术都是好的”
- 看起来不怎么聪明
- 在大学时才开始学编程
- 简历上写出自己的所有经验
- 仅专注于一个或两个领域
摘自: http://tech.idv2.com/2008/01/24/how-to-recognise-a-good-programmer/