程序员的工作、学习与绩效

工作中,碰到一些这样的例子,总有人提出疑问,为什么一个同事工作勤勉,完成了很多事情,季度绩效评定很高,但晋升却碰壁了。之前已经写过一篇《技术晋升的评定与博弈》,基本就能解答这个问题。但隐藏在背后的更深层次的本质却是:工作、学习与绩效的关系。

工作

程序员的主要工作是:编程,产出代码,完成需求,交付软件系统。

程序员按其工作技能和经验,大体又分为三个阶段:初、中、高级。三个级别的程序员的主要工作都是编程与产出代码,产出代码的数量也许相差不大,但产出代码的属性可能有明显差别。

在曾经的文章中提出过一个代码属性:资产与负债。由大量初级程序员产出的代码并以此构建的软件系统,如果最终能完成交付,那么很可能资产和负债性基本持平。这是很多早期创业公司的特点,因为缺乏资金和足够的知名度,难以吸引到又多又好的中高级程序员加入。这样的系统多属于勉强满足业务需要,看不出明显的 bug,但一遇到特殊情况就容易宕机。整个系统虽然勉强能支撑公司运营,但其中欠下了大量的技术债,先活下来,未来再来慢慢还。

若是完成了一个债务比资产还大的系统,会是个什么样的情况呢?那这就是一个还存在明显 bug 的系统,是基本无法完成交付和上线的。因此,现在主流都是先完成一个资产和负债刚好过平衡点的系统,发布上线,接受反馈,再快速迭代,在迭代中不断地提升其资产性,降低其负债性。在 Facebook 的著名标语激励下,奋力前行:Done is better than perfect(比完美更重要的是先完成)。

而中高级相比初级程序员,就不仅仅是交付代码,完成工作,还有后续的两条:达成品质、优化效率。从初级向后两级跨越的门槛就在于此,比较容易被卡在不断地在完成工作,但却没有去反思,沉淀,迭代并改进,导致一直停留在了不断的重复中。

程序员的工作,以产出代码为主,从初级到高级,代码的负债属性逐步降低,资产属性不断提升,并成为高品质的个人贡献者。在这个层面上,还是 Facebook 的另一条标语足以说明问题:Code wins arguments(代码赢得争论)。

学习

学习,是唯一能让你突破不断循环怪圈的不二法门。

程序员在攀登职场阶梯的道路上,走过了高级,后面会有好些分叉路线。比如,转到脱离技术的纯管理岗或者技术管理岗。我以前写过,技术主管或架构师某种意义上都属于技术管理岗,不懂技术是做不了这两个角色的。或者继续沿着深度领域走,成为细分领域专家。

这后面哪条路适合你呢?你是随大流,还是自己真得认真思考过?这是做选择题。如果一生要工作三十多年,前十年你多在做解答题,解决一个又一个问题。那么在大约走过三分之一后,你就会开始做越来越多的选择题。为什么呢?因为一开始可能都没有太多选择的机会。而做好选择题,就需要大量的学习,还需要不断的试错。

面对怎么选路的问题,我近年学习的收获是这样的:选择走最适合实现个人价值的路。这就是我的基础选择价值观。程序员的个人价值该怎么实现?该如何最大化?程序员作为个人贡献者,产出的增长随时间和经验实际上连线性都不是,而是呈对数曲线的(《两种增长曲线》)。到了一定时间必然面临瓶颈,这就需要找到一个价值贡献放大器。有人很幸运的编写服务于数千万或数亿人的软件服务,这是产品自带的价值放大器。这样同样写一份代码,你的价值就是要比别人大很多。而转管理者、主管或架构师,这些角色无非都是自带杠杆因子的,所以也有价值放大作用。但个人能否适应得了这样的角色转换,又是另一回事了。

现在稍具规模的中大型公司内部的职场阶梯模型,我看基本都源自拉姆·查兰的那本书《领导梯队》。书里把人才潜能分成三种:熟练潜能、成长潜能、转型潜能。原书文中对这三点做了详细的特征描述(比较长),我简单提炼下主要特点:

  • 熟练潜能:关注当前专业领域且十分熟练,但没有显示出在开发新能力上的努力,竭力维持现有技能。
  • 成长潜能:按需开发新能力,显示出高于当前层级要求的其他技能(专业、管理、领导)。
  • 转型潜能:持续有规律的开发新能力,追求跨层级的挑战和机会,展现雄心壮志。

人力资源管理中的高潜人才盘点,基本就来自这套模型,主要就是识别出这三类潜能人才。「熟练潜能」就是对学习的最低要求,在程序员这个技术日新月异的行业里,维持现有技能确实已经让不少人感觉很竭力了。

攀登的这条阶梯,它从来不是笔直的。在每一个拐弯处,都应减速、思考、学习、进步。学习也常与错误相伴,查理·芒格说过:

世界上不存在不犯错误的学习或行事方式,只是我们可以通过学习,比其他人少犯一些错误 —— 也能够在犯了错误之后,更快地纠正错误。但既要过上富足的生活又不犯很多错误是不可能的。实际上,生活之所以如此,是为了让你们能够处理错误。

绩效

绩效,特别是程序员的绩效,从来都是个谜(《程序员的绩效之谜》)。

一谈绩效,管理者就会说谁谁绩效很好,你看加了很多班,做了很多事。之前说了程序员交付的软件系统,如果说代码的资产和负债属性相当,大家可能会没有直观感觉。做个大家熟悉的类比,如果只是相当,这就像我们刷信用卡购买了一项产品或服务,满足了当下的需求,赢得了时间,但将来这笔欠款是要还的,不还就会付出代价。但如果是资产远大于负债,那就是刷了卡,后面却不用还了的感觉,那应该是种暗爽的感觉。后者才叫绩效好,但如何评估?谜。

最近看刘润的文章讲到 KPI 管理,提到了一个考核微软技术支持的办法。感觉挺有意思,如果把它换成程序员的场景可能就是这样一些关键指标:

  • A:需求难度系数,需求评审时架构师和程序员共同分析确定,达成共识
  • B:需求花费时间,越短越好,由程序员自己记录
  • C:完成需求提交的代码行数,越少也好,需要定制工具支持代码和需求关联的统计
  • D:完成需求数,越多越好
  • E:E = A x B x C x D 表示有效工作产出

其中 A 难度系数基于团队共识达成,因为大量的业务需求,其实很多难度近似。B 和 D 实际是两个互相制衡的因素,本来用 1 小时完成的,你自己记录成 10 分钟,那么完成的总的数量就会变少。C 展现了代码技术能力,完成同样功能的代码,资产性不变,越少的代码行数越少负债。这样当衡量有效工作产出(E)时,同样的 E,A 和 D 大的技术能力更好。

当然,这是一个简化的理想模型,但现实中程序员的考核恐怕比这个模型更简单粗暴。但它也指出了一个事实:晋升技术能力更好的人,他们解决更难的问题因而创造壁垒,产出更多的资产和更少的负债。而对于仅仅单一高绩效的人,不适合用晋升来激励,而应该用奖金来奖励。

为什么业界喜欢三到五年的程序员?按一万小时理论,三到五年接近或满足了这个量的编程训练,这个阶段就是产出代码的黄金时段,量大质优,而且各公司的“坑”(职位)也多。



写点文字,画点画儿,记录成长瞬间。

微信公众号「瞬息之间」,既然遇见,不如一起成长。

时间: 2024-11-10 14:38:33

程序员的工作、学习与绩效的相关文章

Mac开发利器之程序员编辑器MacVim学习总结

Emacs和Vim都是程序员专用编辑器,Emacs被称为神的编辑器,Vim则是编辑器之神.至于两者到底哪个更好用,网络上两大派系至今还争论不休.不过,相比之下,Emacs更加复杂,已经不能算是一个编辑器了,有人这么说:Emacs是伪装成编辑器的操作系统.与之相反,Vim的定位很明确,就是要做一个强大的编辑器.由于笔者精力有限,决定还是选择自己认为相对简单点的Vim来学习.因此,笔者将会在本文跟大家介绍Mac下Vim的安装以及简单使用.          首先,Mac系统默认已经安装了Vim.打开

程序员都应学习代码编译器知识

程序员都应学习代码编译器知识   所有优秀的计算机科学学院都提供了编译器课程,但是相对比较少的学校把它作为本科课程的必修部分.这篇文章回答了这个问题:为什么需要学习编译器知识?即使你从没打算过编写编译器. 我写这篇文章的其中一个原因是,尽管我在读本科时很喜欢编译器课程,但是我几乎看不到它的实际作用.大多数资料看起来要么简单易懂,要么很深奥(事实上,我找到的大部分编译器资料都是很枯燥的.)无论怎样,我用了几年时间总结了为什么这类课程会如此有用的实际原因.原因如下. 分析器和解析器无处不在 严谨的p

转:浅谈程序员的英语学习

转自:http://www.cnblogs.com/haoyifei/p/5687235.html 浅谈程序员的英语学习 作为在中国工作的程序员,不懂得英语似乎也不妨碍找到好工作,升职加薪.但程序员这个工种则稍有不同,因为程序,尤其是高级语言,基本上都是由英语和数字表达式构成的.英语对于程序员十分重要.我的大学本科全部采用英文教学,工作时也经常会遇到外国人,和他们谈笑风生,自认为自己的英语水平比园子的平均水平高一点.下面我就根据自己的经验来说说英语的学习方法. 为什么要学习英语 学好英语你可以直

小小程序员找工作的一路经历

小小程序员找工作的一路经历 昨天下午把三方给了TP-LINK之后,为期将近两个月的找工作过程也算是告一个段落.两个月一路走来,压力巨大.人生的下一站到底会在哪里,无法预测.面对事业.家庭.爱情,总想找到一个最好的平衡点.选择Android开发,选择TP-LINK,选择深圳,这一路的选择必然会对未来产生极大的影响,而影响总是具有两面性.未来的路应该怎么走,如何把命运掌握在自己的手里,这值得深思. 感谢家人的支持,感谢女友的相伴,感谢朋友的建议,是你们让我有一种持续战斗的激情:同样感谢腾讯,是你让我

十年京东Java程序员的工作总结,写给迷茫中的你!

很多年前,刚刚从大学毕业的时候,很多公司来校招.其中最烂俗的一个面试问题是:"你希望你之后三到五年的发展是什么?".我当时的标准回答是(原话):"成为在某一方面能够独当一面的技术专家".后来经历了几家不同的公司,换了不同的方向,才知道这个真是一个很难的问题.因为兵无常势,什么东西都是在不断的变化,一早的时候看好的东西可能会被淘汰. (几乎)没有人能够看准技术的下一个方向,因为这个问题实在是太难了,能够做到这一点的你就成为了技术界的巴菲特了.比如说11年加入Googl

这个时代,毕业生将很难找Java程序员的工作

相信在现在这个时代,有很多学生选择专业的时候,都会选择热门的计算机专业,因为目前信息化时代,计算机专业不仅是挣钱最多的专业,而且还是接触科技最前沿技术的专业,无论是现在的AI人工智能,还是大数据开发以及云计算等等热门的岗位,都跟计算机有着千丝万缕的直接关系. 但是令人恼火的是,很多计算机专业的学生毕业是根本找不到软件开发程序员工作的,很多人疑惑为什么计算机专业的学生找不到程序员开发的工作?今天小编给大家详细的说说. 计算机专业学生毕业找不到程序员开发工作的几点原因: 1. 最直接的原因就是计算机

好程序员大数据学习路线Hadoop学习干货分享

好程序员大数据学习路线Hadoop学习干货分享,Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件.Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据).包括这些模块: Hadoop Common:支持其他Hadoop模块的常用工具. Hadoop分布式文件系统(HDFS?):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问. Hadoop YARN:作业调度和集群资源管理的框架. Hadoop MapRedu

好程序员web前端学习路线分享了解AJAX是什么

好程序员web前端学习路线分享了解AJAX是什么首先是服务器 什么是服务器:咱们的页面来源于服务器:实例(在phpnwo上面存放一个页面), 咱们把页面放在互联网的服务器上,就有了自己的网站了. 1.异步同步 生活中的同步: 生活中的异步: 在JavaScript语言中,同步和异步的概念刚好相反. 这JavaScript中同步就是:你不执行完上面的代码,那么下面的代码你就别执行:一步一步执行,这就是同步. 异步就是可以一块执行的代码: 进程的概念 进程≠程序 程序从开始到结束的一次执行过程叫做进

好程序员大数据学习路线分享Scala系列之集合操作函数

好程序员大数据学习路线继续为大家分享Scala系列之集合操作函数4.6 集合的重要函数4.6.1sum/max/min/count在序列中查找最大或最小值是一个极常见的需求,如下:val numbers = Seq(11, 2, 5, 1, 6, 3, 9) numbers.max //11 numbers.min //1 更高级的例子,其中包含一个书的序列case class Book(title: String, pages: Int) val books = Seq( Book("Futu