程序员的重复劳动陷阱
同样是一样的计算机专业毕业,进入职场的职位和工作都差不多,为何有些程序员短短几年就成长为全能选手或领域专家,有些程序员还在做CRUD?
程序员的重复劳动陷阱
不知道大家有没有这样的感觉,每次加入一个新的公司/组,一开始总是要学这个学那个,可能会花很多时间看现有的代码,然后花一些时间实现一点点小的功能,等到经过一段时间后,自己对工作越来越得心应手,提来的类似需求马上就可以做,以做得多做得快为骄傲,觉的这样可以更受老板青睐,可以升职加薪。
我在毕业第三年的时候加入前公司,在加入公司的第一个季度,我主要再做一些边缘工具以及理解系统,从第二个季度开始在组里的核心业务上开发。当时自己为了能够快速的出成果,会从组里所有的任务里挑看着比较容易实现的做,往往一天就可以做完一个或者两个任务。做完一个任务后,发现backlog里面有相似的任务,我也“赶紧”抢过来assign给自己,然后快速的做完,提交code review。从那个季度开始我每个季度做的工单越来越多,超过组里的所有其他成员,自己也对自己的“高效”洋洋得意,觉的自己工作的非常充实,进步很大。
然而在这个过程中,我已经不知不觉得掉到“重复劳动”的陷阱中去了。
我们在写代码的时候,有一个原则交叫DRY(Don't Repeat Youself)原则,简单通俗的说就是不要copy paste代码,能抽象成函数的抽象成函数,能抽象成基类的抽象成基类。但是程序员的工作本身也应该遵循一样的道理,那就是尽量不要做重复的工作。
重复劳动对程序员的危害
回到开篇的问题,同样是一样的计算机专业毕业,进入职场的职位和工作都差不多,为何有些程序员短短几年就成长为全能选手或领域专家,有些程序员还在做CRUD?
大部分的技术学习曲线类似于上图,经历过短暂的入门期和相对长一些的积累期之后,可能大部分技术都会进入到高效期。在入门期和积累期的时候可能技能使用的效率会低一些,进入到高效期之后,随着技能使用的效率大大提高,工作所产生的“输出”也越来越大。因此“高效期“给人以充实的假象。
一旦自己的某项技术进入到高效期,在此基础上的提升会非常困难,可能之前工作三个月所掌握的新知识,比之后一年在工作中积累的要多。有时候我们看一个程序员工作了5年,但是他可能第一年学习并熟悉所用的技术,接下来4年都在做相同的工作,解决类似的需求,那么他的5年工作经验等于1年乘以5。
而有些程序员,他每工作一段时间之后,都会钻研技术更深的部分,或者去学习新的技术,总是保持着在尝试自己并不擅长的领域,那么这样的程序员,他的5年工作经验会比前一种程序员要多。
如何摆脱重复劳动的循环
既然重复劳动的危害这么大,那么我们是否可以摆脱重复劳动的循环呢?
有的时候,程序员自己也不想老是重复的干类似的东西,但是无奈被派发的任务重复的很多,似乎自己可以选择的不多。
在我自己在第三年大量重复劳动之后,我的经理找到我谈话,说我不应该这样重复自己,同样的事情做一两次就好了,再重复的做对自己的帮助不大。我分享一下我是怎么样避免重复的劳动的:
- 找到Pattern,解决一类问题而不是一个问题。当你解决了N次类似的需求的时候,是否可以把这些问题抽象出来,是否可以去自动化的实现这类需求?改了N次bug之后,是否可以发现bug的规律,能够开发出静态分析工具来抓住这些bug?
- 尝试用新的技术解决同样的问题。有时当项目的实现并没有多少规定的时候,我们可以在一定的自由度下尝试新的工具。今年年初的时候我去尝试修改一个已有的内部工具前段,持着学习新技术的心理,我用Redux重新实现了前段,而不是在原有的jQuery的前段基础上修改。
- 尝试换岗。换岗位可以直接的让你接受不同的项目,做一些不同的事情。我在上家公司的第一组待了近三年才换组,现在来看应该更早的时候尝试不同的事情。换岗位也会带来一些其他的问题,比如到新岗位之后可能会影响晋升速度,需要重新建立自己的权威等等。
- 换工作。换工作是一个终极大招,它会带来很多其他的变化,不建议只是为了脱离重复劳动而换工作。如果没有养成良好的学习习惯,那么换一份新工作之后也很有可能陷入到新的重复劳动的循环中。
重复劳动不可以完全避免
重复劳动是否可以完全避免呢?
我觉的是不可以避免的。以上的内容都是基于程序员成长的角度去分析问题,重复劳动是有害的。但是将程序员的劳动视为价值输出的话,熟练的价值输出确实也是程序员的价值之一,可以争取到更高的薪酬。
我们站在组织的角度上来看,重复的需求永远存在,这些重复的需求需要被完成。如果在人员配置有限的情况下,不可避免的单个个体成员需要去进行一定的重复劳动。而由于时间上的紧迫性,可能必须要用高效粗暴的方法来实现。
如果你是公司的初创成员,需要在初期做大量的重复工作来从无到有的实现新的产品,那毫无疑问这是应该做的,因为这样的重复劳动带来的收益可能是巨大的。
希望大家在工作中都可以正确的认识到重复劳动的陷阱,让自己能够保持持久的成长。