如何用好应届生,是一个相当巨大的管理挑战。如果想要招聘应届生,那么就必须做好心理准备,在很大的概率上,团队将会迎来一个浑浑噩噩的放纵了四年,靠着漏题以及考前突击度过考试的定时炸弹。他们很可能了解除冒泡/交换、晓得一点数组和链表的区别、能讲出进程与线程的轻重之分、目前还有相当大一部分的人基于SSH、JQuery/Ext做过购物车、图书管理系统等东西(感谢培训机构),然而,这样的同学距离一名合格的程序员还差很远。这样的同学很可能只会使用Eclipse的各种包装版(MyEclipse是我见过最多的),但是完全不知道jar/war/ear(Spring一统江湖之后,知道ear的就更少了),不知道javac/jar,从参数传递为止的不同区分POST和GET,离开了JS框架很难发出XHR,更不要说早已被种种框架所屏蔽的大量底层细节(Cookie、Session、JDBC、事务等等)。

当然毕业生里面也有厉害的,比如topcoder component development里面大量在校生,但如果仅仅是抱着希望而去开展校园招聘,那么必然是浪费时间精力的事情。实际上,如何用好应届生,是一个教育问题,而不是管理问题。

作为一个应届生的第一个目标,首先就是成长为一个合格的coder。
所谓合格的coder,是要能清醒的知道,自己写下的每一行代码,到底将会产生什么样的作用。这个方法的语义是什么?他的用户是谁?参数是从何而来的?中间经历了那些处理?可能会有多少个输入的来源?这些不同的来源之间是否有业务上的差异?如果有,我该如何处理?方法的返回值将会被如何使用?我的经验是,只有把这些问题都问完了,有结论了,才会有安全感。
可是,能够问出这样的问题,就要求他心中必须有一个全局的视图。这正是大部分人get lost的地方:过早的关注细节。早早的,这些人就因为这样那样的原因,选定了某个细分小工种,然后对工种以外的知识技能弃之不顾。于是我们见过太多这样的人,身为一个标称的J2EE程序员,毫不羞愧的承认自己不知道如何获取Select控件的值、数据库中表和索引是如何存储的。或者你可以说这是因为我一直在小公司工作,资源紧缺,职责划分不清造成的。那么,退一万步说,一个合格的coder,至少要知道目前工作的项目是如何集成、部署、运行的。之前我的团队中,总是只有少数几个人能成功的完成集成部署,而这些人恰恰又正是能在系统分析、设计阶段提出自己想法的人。对于至今不懂的如何集成部署的人,我想问:一堆不能运行的代码,到底能为你的用户递交什么价值?
除了有全局观,第二个要素就是追求。是的,如果没有追求与那份狂热,你是永远无法成为Jamie Zawinski这样的人(他在Netscape时写的日记)。有了这份狂热,精益求精,或者精益说的Continuous Improvement就已经成为了你的本能,在做何事情的时候,你都在思考,什么东西通过哪种方式,可以变得更好。于是,在不知不觉中,每分钟你都在做各种refactor or even re-design的方案,思考权衡各种利弊,慢慢的你和那种工作八小时内闲着无聊上上网的普通程序员拉开距离了。

各位广大的应届生,你们最大的优势在于,充满着无限可能。越早的开始你的一万小时,就越早到达终点。