如何用好應屆生,是一個相當巨大的管理挑戰。如果想要招聘應屆生,那么就必須做好心理準備,在很大的概率上,團隊將會迎來一個渾渾噩噩的放縱了四年,靠著漏題以及考前突擊度過考試的定時炸彈。他們很可能了解除冒泡/交換、曉得一點數組和鏈表的區別、能講出進程與線程的輕重之分、目前還有相當大一部分的人基于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的方案,思考權衡各種利弊,慢慢的你和那種工作八小時內閑著無聊上上網的普通程序員拉開距離了。

各位廣大的應屆生,你們最大的優勢在于,充滿著無限可能。越早的開始你的一萬小時,就越早到達終點。