工作中,碰到一些這樣的例子,總有人提出疑問,為什么一個同事工作勤勉,完成了很多事情,季度績效評定很高,但晉升卻碰壁了。之前已經(jīng)寫過一篇《技術晉升的評定與博弈》,基本就能解答這個問題。但隱藏在背后的更深層次的本質卻是:工作、學習與績效的關系。
工作
程序員的主要工作是:編程,產(chǎn)出代碼,完成需求,交付軟件系統(tǒng)。
程序員按其工作技能和經(jīng)驗,大體又分為三個階段:初、中、高級。三個級別的程序員的主要工作都是編程與產(chǎn)出代碼,產(chǎn)出代碼的數(shù)量也許相差不大,但產(chǎn)出代碼的屬性可能有明顯差別。
在曾經(jīng)的文章中提出過一個代碼屬性:資產(chǎn)與負債。由大量初級程序員產(chǎn)出的代碼并以此構建的軟件系統(tǒng),如果最終能完成交付,那么很可能資產(chǎn)和負債性基本持平。這是很多早期創(chuàng)業(yè)公司的特點,因為缺乏資金和足夠的知名度,難以吸引到又多又好的中高級程序員加入。這樣的系統(tǒng)多屬于勉強滿足業(yè)務需要,看不出明顯的 bug,但一遇到特殊情況就容易宕機。整個系統(tǒng)雖然勉強能支撐公司運營,但其中欠下了大量的技術債,先活下來,未來再來慢慢還。
若是完成了一個債務比資產(chǎn)還大的系統(tǒng),會是個什么樣的情況呢?那這就是一個還存在明顯 bug 的系統(tǒng),是基本無法完成交付和上線的。因此,現(xiàn)在主流都是先完成一個資產(chǎn)和負債剛好過平衡點的系統(tǒng),發(fā)布上線,接受反饋,再快速迭代,在迭代中不斷地提升其資產(chǎn)性,降低其負債性。在 Facebook 的著名標語激勵下,奮力前行:Done is better than perfect(比完美更重要的是先完成)。
而中高級相比初級程序員,就不僅僅是交付代碼,完成工作,還有后續(xù)的兩條:達成品質、優(yōu)化效率。從初級向后兩級跨越的門檻就在于此,比較容易被卡在不斷地在完成工作,但卻沒有去反思,沉淀,迭代并改進,導致一直停留在了不斷的