如何用好應(yīng)屆生,是一個相當(dāng)巨大的管理挑戰(zhàn)。如果想要招聘應(yīng)屆生,那么就必須做好心理準備,在很大的概率上,團隊將會迎來一個渾渾噩噩的放縱了四年,靠著漏題以及考前突擊度過考試的定時炸彈。他們很可能了解除冒泡/交換、曉得一點數(shù)組和鏈表的區(qū)別、能講出進程與線程的輕重之分、目前還有相當(dāng)大一部分的人基于SSH、JQuery/Ext做過購物車、圖書管理系統(tǒng)等東西(感謝培訓(xùn)機構(gòu)),然而,這樣的同學(xué)距離一名合格的程序員還差很遠。這樣的同學(xué)很可能只會使用Eclipse的各種包裝版(MyEclipse是我見過最多的),但是完全不知道jar/war/ear(Spring一統(tǒng)江湖之后,知道ear的就更少了),不知道javac/jar,從參數(shù)傳遞為止的不同區(qū)分POST和GET,離開了JS框架很難發(fā)出XHR,更不要說早已被種種框架所屏蔽的大量底層細節(jié)(Cookie、Session、JDBC、事務(wù)等等)。

當(dāng)然畢業(yè)生里面也有厲害的,比如topcoder component development里面大量在校生,但如果僅僅是抱著希望而去開展校園招聘,那么必然是浪費時間精力的事情。實際上,如何用好應(yīng)屆生,是一個教育問題,而不是管理問題。

作為一個應(yīng)屆生的第一個目標,首先就是成長為一個合格的coder。
所謂合格的coder,是要能清醒的知道,自己寫下的每一行代碼,到底將會產(chǎn)生什么樣的作用。這個方法的語義是什么?他的用戶是誰?參數(shù)是從何而來的?中間經(jīng)歷了那些處理?可能會有多少個輸入的來源?這些不同的來源之間是否有業(yè)務(wù)上的差異?如果有,我該如何處理?方法的返回值將會被如何使用?我的經(jīng)驗是,只有把這些問題都問完了,有結(jié)論了,才會有安全感。
可是,能夠問出這樣的問題,就要求他心中必須有一個全局的視圖。這正是大部分人get lost的地方:過早的關(guān)注細節(jié)。早早的,這些人就因為這樣那樣的原因,選定了某個細分小工種,然后對工種以外的知識技能棄之不顧。于是我們見過太多這樣的人,身為一個標稱的J2EE程序員,毫不羞愧的承認自己不知道如何獲取Select控件的值、數(shù)據(jù)庫中表和索引是如何存儲的。或者你可以說這是因為我一直在小公司工作,資源緊缺,職責(zé)劃分不清造成的。那么,退一萬步說,一個合格的coder,至少要知道目前工作的項目是如何集成、部署、運行的。之前我的團隊中,總是只有少數(shù)幾個人能成功的完成集成部署,而這些人恰恰又正是能在系統(tǒng)分析、設(shè)計階段提出自己想法的人。對于至今不懂的如何集成部署的人,我想問:一堆不能運行的代碼,到底能為你的用戶遞交什么價值?
除了有全局觀,第二個要素就是追求。是的,如果沒有追求與那份狂熱,你是永遠無法成為Jamie Zawinski這樣的人(他在Netscape時寫的日記)。有了這份狂熱,精益求精,或者精益說的Continuous Improvement就已經(jīng)成為了你的本能,在做何事情的時候,你都在思考,什么東西通過哪種方式,可以變得更好。于是,在不知不覺中,每分鐘你都在做各種refactor or even re-design的方案,思考權(quán)衡各種利弊,慢慢的你和那種工作八小時內(nèi)閑著無聊上上網(wǎng)的普通程序員拉開距離了。

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