工作中,碰到一些这样的例子,总有人提出疑问,为什么一个同事工作勤勉,完成了很多事情,季度绩效评定很高,但晋升却碰壁了。之前已经写过一篇《技术晋升的评定与博弈》,基本就能解答这个问题。但隐藏在背后的更深层次的本质却是:工作、学习与绩效的关系。
工作
程序员的主要工作是:编程,产出代码,完成需求,交付软件系统。
程序员按其工作技能和经验,大体又分为三个阶段:初、中、高级。三个级别的程序员的主要工作都是编程与产出代码,产出代码的数量也许相差不大,但产出代码的属性可能有明显差别。
在曾经的文章中提出过一个代码属性:资产与负债。由大量初级程序员产出的代码并以此构建的软件系统,如果最终能完成交付,那么很可能资产和负债性基本持平。这是很多早期创业公司的特点,因为缺乏资金和足够的知名度,难以吸引到又多又好的中高级程序员加入。这样的系统多属于勉强满足业务需要,看不出明显的 bug,但一遇到特殊情况就容易宕机。整个系统虽然勉强能支撑公司运营,但其中欠下了大量的技术债,先活下来,未来再来慢慢还。
若是完成了一个债务比资产还大的系统,会是个什么样的情况呢?那这就是一个还存在明显 bug 的系统,是基本无法完成交付和上线的。因此,现在主流都是先完成一个资产和负债刚好过平衡点的系统,发布上线,接受反馈,再快速迭代,在迭代中不断地提升其资产性,降低其负债性。在 Facebook 的著名标语激励下,奋力前行:Done is better than perfect(比完美更重要的是先完成)。
而中高级相比初级程序员,就不仅仅是交付代码,完成工作,还有后续的两条:达成品质、优化效率。从初级向后两级跨越的门槛就在于此,比较容易被卡在不断地在完成工作,但却没有去反思,沉淀,迭代并改进,导致一直停留在了不断的