DevOps 是怎样扼杀开发者的

jopen 10年前

DevOps 是怎样扼杀开发者的

最近有两个趋势真的令我讨厌:DevOps和“全栈”开发者概念。DevOps运动如此受欢迎,以至于讨厌它就相当于说是我讨厌x86架构或单内核。但是确实如此:我受不了它。使我痛苦的根本原因是什么?那就是:不是每个公司都是新创公司,但看来每个公司都必须表现得好像它们就是一样。

DevOps

“DevOps”表示之前纯粹的开发、运营以及质量保障(QA)部门之间的密切合作和交叉。因为软件需要以不断加快的速度发布出来,传统的“瀑布型”开发-测试-发布周期已经不能满足要求。开发者还必须对测试及发布环境的质量负责。

“开发者”(这个词是否合适有待商榷)渐增的责任范围催生了对综合型求职者的需求:“全栈”开发者。这类开发者既能够做开发工作,也可以是QA团队的成员、运营分析师、系统管理员和数据库管理员。在你指责我夸张之前,再回头看一下这个列表,有你不期望一个“全栈”开发者精通的吗?

这些概念来自哪里呢?对,新创公司(还有敏捷方法)。新创公司初起时奇形怪状,需要以一种艰苦的方式撑过最初几年。我不否认这一点。不幸的是,由于缺乏资源,新创公司的工程师被迫承担多种技术角色作为“开发者”角色必备的基本要求。

身兼多职

想象你在一家拥有7人开发团队的新创公司。你已经做了一年的web应用开发,一切顺利。但在确保这方面一切正常,却常常是令人抓狂的混乱。如果有一个特别麻烦的问题,需要深奥的数据库知识,你没有权力说“那不是我的专长”,然后把它交给 DBA 团队处理。由于条件有限 ,你必须担当起DBA 的角色,然后自己解决这个问题。

现在,将这个情景扩展到之前列出的所有角色。在任何时候,一个新创公司的开发者可能同时担任开发、QA测试、部署/运营分析师、系统管理员和 DBA 。这就是商业本性,而有些人非常适合这种环境。然而,不知从什么时候起,我们开始自欺欺人说自己适合,因为在任何时候,一个新创公司的开发者不得不身兼多 职,他/她必须一下担当起所有这些角色。

即使真存在这样的人,“全栈”开发者仍然不能以他们应有的方式工作。新创公司并不是让他们在一段时间内担当某一个角色,然后再转换到下一个角色,而是要求他们一直同时担当所有这些角色 。最糟的是:大部分优秀开发者几乎都能做到。

阶级

优秀开发者都是聪明人。我知道我这样说肯定会遭人反感,但在一个组织里存在着技术角色实用性等级制度。最顶层是开发,接下来是系统管理员和DBA。QA 团队,“运营”人员,发布协调者等类似角色处于该阶级的最底层。为什么是这样的顺序呢?

因为,若有必要,每个角色都能够承担低于这一层次所能做的所有工作。

新创公司教会我们这个道理。如果需要,优秀开发者可以是合格的DBA。他们也可以是像样的测试员,“部署工程师”,或者其他诸如此类职位。他们的工作要求他们对更低层工作领域也了如指掌。但这其中有一个问题,希望说到这里你也能看出来:

反过来却行不通。

在紧要关头,QA人员不能承担开发者的工作,构建工程师也不能承担DBA的工作。他们不具备担当这些角色所必须的专业知识。好吧,不管你喜不喜欢, 每个组织里都有这种阶级层次,并且人们有着不同技能组合和能力水平。然而,当你让开发者去做其他工作时,任何人都不能来担当他的开发者角色。

举个例子能使它更清楚些。我爸爸是一个开私人诊所的牙医。他雇了一个秘书,一个保健专家和一个牙医助理。在这种对应的“DentOps”运转下,我 爸爸需要边记录预约、洗牙,边挤出时间来钻蛀牙、实施根管治疗术,等等。我爸爸可以做诊所里所有其他工作,因为他具备这些工作所必需的专业知识。

但是没有一个人,即便是所有雇员全加起来,也都做不了他的工作。

这样运转会伤害到每一个牵涉其中的人,(当然)雇主除外。这个旨在提高软件质量的实验已经变成一场闹剧,最具天赋的雇员劳累过度(然而有价值的工作少之又少),而低层次的职位根本不存在。

这就是这一问题的关键所在。“全栈”工程师,使之前那些由不同能力水平的人分别担任的职位变得多余。大公司喜欢这一点,因为这意味着,他们可以雇佣 尽可能少的人来完成等量工作。然而,在这个过程中,真正的开发在开发者工作所占的比例越来越小。这就是为什么我们会看到那么多开发者都不能通过 FizzBuzz:他们从不须真正编写任何代码。现在这个问题太常见了,你能想象面试厨师时要问他,每天有多少时间真正用来烹饪吗?

什么都可以做,什么都不精通

如果你是一个中等规模软件的开发者,那么你需要一个适当的部署系统。请马上说出下述这些系统各自的优缺点:Puppet、Chef、Salt、 Ansible、Vagrant、Docker。现在实施你的部署方案吧!你是不是都没有注意到,上面列出的系统中有一项是完全无关的?

我们需要专业化的原因是:人类所能保留的知识有限。任务切换无疑是昂贵的。强迫开发者去担当其他传统专业人员的角色,意味着他们将:

  • 不能花费时间在开发上

  • 需要跟上一个巨大的知识领域

  • 将不堪重负

另外,要强迫开发者承担“全栈”职责,公司需要付给雇员们远高于完成其中大部分任务的市场平均价格的工资。如果一个开发者1年赚10万,你可以雇佣 4个每年10万的开发者来做一个两人的任务,一半时间做开发,一半时间做发布管理。或者,你也可以只雇一个每年75k的发布管理员,然后两个开发者做全职 开发。要注意到兼职发布管理的开发者,在没有发布需要管理时浪费的时间了。

不要扼杀开发人员

所有这一切的效果就是毁掉“开发者”的角色,并代之以“全能技术工人”。我所认识的每个开发者都沉迷于编程,因为他们真地喜欢(一度)。当你强迫那些聪明人执行额外的任务时,你就伤害了每个牵涉其中的人。

并非每个公司都是新创公司 。新创公司可以选择不让开发人员身兼多职,他们这样做是出于必要。你的公司很可能在你没有创造出一些资源之前有着极大地制约。请不要混淆“精益”与“以最少雇员运营”的概念。看在上帝的份上, 让开发者写代码吧!

原文链接: Jeff Knupp   翻译: 伯乐在线 - yixingqingkong
译文链接: http://blog.jobbole.com/66532/