DevOps:全能开发是如何扼杀程序员的
注:DevOps(英文 Development 和 Operations 的组合),一般译为开发运维或敏捷运维,其观点认为开发和运营工作必须紧密合作,是最近比较流行的一种新趋势,不过也很多人对此表示反感
英文原文:How 'DevOps' is Killing the Developer
最近有两个趋势真的令我很讨厌:"DevOps"和“全能型”开发人员。DevOps 运动是如此受欢迎,以致我反对它就像是说我讨厌 x86 电脑或者单片机那样。但是事实是我确实不能忍受 DevOps。是什么让我如何烦恼痛苦和讨厌?因为它强调每个公司都必须像一个创业公司一样运作,但其实并不是每个公司都是刚刚创办的。
DevOps
“Devops”指的是原来纯粹进行开发的人,和那些负责运维和质量管理保证任务的角色之间的紧密协作和相互交流。因为软件必须以越来越快的速度发行,原始的“瀑布式”开发—检测—发行已经被打破。开发者必须同时承担质量检测和发行评估的任务。
开发者(这个词是否合适还有争议)的逐渐扩大的任务范围加速了寄生虫式的工作角色—全栈开发者的增长。这样的工程师可以做包括软件开发人员、质量保障团队成员、运维分析人员、系统管理员和数据库管理员等等的全部工作。在你指责我说的太夸张离谱之前再返回去重新读一遍这个列表。在这个列表中有什么角色的能力是你不期望一个全能型开发人员掌握的?
这些概念从何而来?当然是来源于初创公司和敏捷开发方法。初创公司都是一种奇特的野兽,它们需要以一种非常精益(精打细算)的方式度过最初的几年。我不否认这个。不幸的是我们让那些在初创公司里的工程师由于资源的缺乏而被迫扮演的多种技术角色变为“开发工程师”的最低要求。
多重角色
想象你在一个有着七个人开发团队的初创公司,你从接触到开发这个 WEB 应用程序已经一年,一切都进行的很顺利,尽管它是通过疯狂地加班来维持的。如果这里有一个比较棘手的事情要求你有扎实的数据库方面的知识,你没有自由说 “那不是我的专长”然后把它交给数据库管理团队去研究。因为资源非常有限,你不得不扮演数据库管理人员的角色然后自己解决这个问题。
现在通过之前列举过的所有角色扩展一下这个情形。在任何同一时间,一个刚成立公司的软件开发者可能要扮演软件开发人员,质量保证检测人员,部署 /操作分析人员、系统管理员、或者数据库管理人员的角色, 这些工作的实质其实可以让一些人在这种环境下得到成长。然而在前进的路途上,我们自己在欺骗自己——因为不管什么时侯,刚刚创立的任何一家公司的软件开发者不得不承担这样的角色,并且同时承担多种任务。
如果这样的人仍然存在,“全能型”开发者还是不会像他们应该扮演的角色那样无所不能。他们是要在所有的时间执行所有的角色,而不是在很短的一段时间暂时承担一个角色,然后过渡到下一个角色。这才是真正吸引人的地方:大多数好的开发人员几乎可以做到这样。
图腾柱
好的开发人员都是聪明人。我知道我说的下面这段话将被很多人骂,但在一个有层次结构的组织里,每个都有一些实用性技术。但开发人员是在顶部的,其次是系统管理员和 DBA (数据库管理人员)。QA(质量保证)团队,“运维”人员,发布协调员等相似的人在图腾柱的底部。为什么这样安排?
因为如果必要的话每个角色可以做其下面的所有角色的工作。
初创公司告诉我们这一点。好的开发人员如果想要的话,他可以很快的变为 DBA,他们也可以成为像样的测试人员,“部署工程师”,和其他任何你想使用的荒谬的术语。他们的工作要求他们了解“更低”角色的领域。有一个大问题,希望现在你看到它:
在相反方向它不成立。
QA 人员不能在必要时做一个开发人员的工作,发布工程师也不能做 DBA 的工作。他们从未获得扮演这个角色所需的专业知识。很好。不管你喜不喜欢,每个组织有层次结构,人们有不同的技能和能力水平。然而,当你让开发人员扮演其他角色,你将没有任何人承担开发者的角色!
但没有人,即使是他所有的员工加在一起,也没有人可以做他(程序员)的工作。
这样的运动对每个其中参与的人来说是一种伤害行为,当然雇主除外。开始作为一个尝试旨在提高软件质量现在已经成为一场闹剧,最有才华的员工过度工作(虽然做的少,少而有用的工作)和根本不存在的低级职位。
这是问题的症结所在。所有被之前各种能力水平的人持有的职位被全能的工程师变得多余。大公司喜欢这个,因为它意味着他们可以雇佣更少的人做同样多的工作。不过,在这个过程中,实际开发成为一个很小很小的开发人员工作的一部分。这就是为什么我们看到许多开发人员,不能通过 FizzBuzz:他们从未真正需要去编写任何代码。现在很常见的一个问题,你能想象你面试一位厨师,然后问他到底一天有多少时间真的在致力于烹饪吗?
杂而不精,什么都不精
如果你是一个在中等大小的软件公司当开发人员,您需要部署系统。
我们专业的原因:人类是唯一能保留这么多知识的人。多任务切换是非常昂贵的。迫使开发人员承担额外的通常由专家承担的角色意味着他们:
- 不花自己的时间开发;
- 需要跟上一个巨大的知识领域;
- 会崩溃掉;
更重要的是,通过迫使开发人员承担“完整”的责任,他们支付的薪水给雇员,往往超过大多数市场的平均水平。如果开发人员每年挣 100k。你可能在一个仅需要两人完成的任务上每年给四个开发者支付 100k,50% 做开发和 50% 做发布管理。或者以 75K 雇一个发布人员和两个全职开发人员开发。注意兼任发布管理的开发人员浪费的时间,通常是不可预测的。
不要扼杀开发人员
所有这一切的效果是摧毁“开发人员”的角色,以一种“技术多面手”代之。我知道的每个开发人员走进编程,因为他们确实喜欢这份工作(在某种程度上)。当你强迫你最能干的人承担额外的角色,其实你是在伤害每个参与的人。
并不是每一个公司都是一家刚刚创立的公司。初创公司不得不让开发者担任多个职务,他们这样做出于需要。因为他们的的公司没有创造价值,而且可能没有足够的资源。请不要将“精益”和“使用尽可能少的员工”混为一谈。看在上帝的份上,让开发人员写代码吧!