同样是一样的计算机专业毕业, 进入职场的职位和工作都差不多, 为何有些程序员短短几年就成长为全能选手或领域专家, 有些程序员还在做 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 的前段基础上修改.
尝试换岗. 换岗位可以直接的让你接受不同的项目, 做一些不同的事情. 我在上家公司的第一组待了近三年才换组, 现在来看应该更早的时候尝试不同的事情. 换岗位也会带来一些其他的问题, 比如到新岗位之后可能会影响晋升速度, 需要重新建立自己的权威等等.
换工作. 换工作是一个终极大招, 它会带来很多其他的变化, 不建议只是为了脱离重复劳动而换工作. 如果没有养成良好的学习习惯, 那么换一份新工作之后也很有可能陷入到新的重复劳动的循环中.
重复劳动不可以完全避免
重复劳动是否可以完全避免呢?
我觉的是不可以避免的. 以上的内容都是基于程序员成长的角度去分析问题, 重复劳动是有害的. 但是将程序员的劳动视为价值输出的话, 熟练的价值输出确实也是程序员的价值之一, 可以争取到更高的薪酬.
我们站在组织的角度上来看, 重复的需求永远存在, 这些重复的需求需要被完成. 如果在人员配置有限的情况下, 不可避免的单个个体成员需要去进行一定的重复劳动. 而由于时间上的紧迫性, 可能必须要用高效粗暴的方法来实现.
如果你是公司的初创成员, 需要在初期做大量的重复工作来从无到有的实现新的产品, 那毫无疑问这是应该做的, 因为这样的重复劳动带来的收益可能是巨大的.
希望大家在工作中都可以正确的认识到重复劳动的陷阱, 让自己能够保持持久的成长.
来源: https://www.cnblogs.com/chaosyang/p/dont-repeat-yourself.html