英文原文:How 'DevOps' is Killing the Developer
最近,我很讨厌两个趋势,分别是:DevOps 和“全栈”工程师。DevOps 运动的流行也让我不喜欢 x86 架构或单核。事实上,并不是每个公司都是初创公司,但似乎每个公司都要搞的跟初创公司似的。
DevOps
DevOps 主要强调开发人员、运维人员以及 QA 之间的合作与沟通。因为软件会定期的更新,发布新版本,所以,以前旧的“瀑布式”的软件开发-测试-发布流程已经变的不适用。作为开发人员,除了实现功能外,还需关心负责产品的质量测试和发布环境。
开发者职责的不断扩大也催生了一些新角色的出现,“全栈”工程师。什么意思呢?一个开发者除了会编写代码外,还可以充当 QA 团队成员、业务分析师、系统管理员和 DBA。如果你指责我说的太夸张,那么你可以去查查什么叫“全栈”工程师。
“全栈”的流行主要源自于创业(当然,还有敏捷)。尤其是在创业初期,由于资源的匮乏以及资金上的短缺,一名工程师常常扮演着多重角色。因此,网络上也诞生了这样的说法:全栈是被创业逼出来的。
身兼多职
想象一下,如果你目前在一家创业公司,该公司的开发团队只有 7 个人,你已经有 1 年的 Web 开发经验,你所参与的项目也都在很好的运行,尽管也会遇到各种难关,但仍能正常工作。但有时,如果你遇到一个数据库领域的问题,该问题需要专门的 DBA 团队才能解决,但由于资源有限,你只能亲力亲为,绞尽脑汁地去解决这个问题,即使你不擅长数据库。
在一个创业公司里,开发者随时可能扮演着 QA、测试人员、部署/业务分析人员、系统管理员或数据库管理员的角色。这些也都是业务的根本需求,有的人在这样的环境里会快速成长。即使这种“全栈”工程师真的存在,他们也并没有得到很好的使用,在各种角色中来回切换。这真的很糟糕,大多数优秀的开发人员几乎都可以把这些事情办完了。
技术层次
优秀的开发者都是非常聪明的。任何一个组织都会有一定的技术层次结构。开发在最顶端,紧随其后的应该是系统管理员和 DBA。QA 团队、运维人员、发布协调等在最低端。为什么会这样安排?
因为每个角色在必要时,都可以做比他层次低的工作。
创业公司可能会这样想:在需要时,好的开发人员也可以充当 DBA、测试人员、部署工程师等任何他们需要的角色。他们的需求驱使着这些优秀的程序员扮演着许多低能的角色。这里面存在着很大的问题:他们并不能反向工作,比如,一名 QA 并不能去做开发。
不知从何时起,提高软件质量已成为一场闹剧,一些非常有才华的员工常常超时工作,而一些低级别的职位甚至都不存在。这就是问题的症结所在。开发者、QA、运维等人员都由“全栈”工程师来充当会显得相当多余,但大公司一般都喜欢这样做,意味着他们可以雇佣更少的人做相同的工作。在整个工作过程中,实际的开发工作只占到了很小一部分。这就是为什么大多数开发者无法通过 FizzBuzz:他们从来没有真正写过任何代码。
广而不精
如果你是一名技术不错的软件开发者,你需要在适当的地方部署系统,那么,你可以快速说出这些系统的优缺点吗?Puppet、Chef、Salt、Ansible、Vagrant、Docker。现在,来将你的部署方案付诸实践吧!你甚至会认识到,在这些系统中,有一个是不必要的。
专业化是有原因的:人类所吸取的知识是有限的,在任务之间来回切换的代价是昂贵的。强迫开发者身兼多职意味着:
更重要的是,公司强迫开发者接受“全栈”任务,那么公司所给的薪水就要高于市场平均水平。如果一个开发者一年可以赚 100K,你可以雇佣 4 个同样的开发者来做两个人的任务,其中 50% 的时间用来做开发,50% 时间做发布管理。或者,你可以花 75K 来雇一个发布管理员,然后 2 个做全职开发。值得注意的是:开发者来兼职发布管理工作完全是浪费时间,因为发布管理无需一直不间断地进行。
不要扼杀程序员
这样做的效果就是以“技术实用”来摧毁开发者。开发者之所以从事这份工作,是因为他们享受这份工作带来的乐趣(在某点上)。当你强迫这些聪明人执行额外的任务时,你其实是在伤害每个与之相关的人。
并不是每个公司都是初创公司。出于选择,初创公司也没有让开发者身兼多职,他们这样做是出于必要。请不要混淆“精简”与“以最少的雇员运营”的区别。看在上帝的面子上,让开发人员写代码吧!