最近有两个趋势我真的很讨厌:DevOps及“全栈”开发者的概念。随着DevOps运动越来越受欢迎我越发讨厌x86架构和单内核。但确实如此:我受不了。是什么引发我的痛苦呢?这是原因:不是每一个公司都刚起步,那怎么还要每个公司都必须表现得像它们的经历一样。
“DevOps”用来表示密切地协作,将之前纯粹的开发者、纯粹的操作者以及纯粹的QA的角色内容进行穿插。因为软件需要以不断加快的速度释放出来,老的开发-测试-发布的“瀑布”型周期被打破了。开发者还必须为测试及发布环境的质量责任。
“开发者”(这个词是否适当有待商榷)越来越广的责任范围导致了对联合体求职者的需求:“全栈”开发者。这样的开发者能够做开发工作,是QA团队的成员,能够进行业务分析,做系统管理员和DBA。在你指责我夸张前回头再看下这个列表。列表中有你不希望“全栈”开发者精通的吗?
这些概念是从哪来的呢?初创公司,对(以及敏捷方法)。初创公司初起时奇形怪状,需要以一种艰苦的方式撑过最初的几年。对此我不否认。但不幸的是,初创公司的工程师承担了多种技术角色,被迫在缺乏一系列最基本能力的情况下承担“开发者”的角色。
想象你在一家初创公司,开发团队共有7人。你已经开发了一年某个web应用,现在看起来像模像样,一切顺利,但是在保持正常运转这方面却往往是令人抓狂的混乱。如果有一个特别麻烦的问题,需要深度研究数据库,你可没有权力说“这不是我的专长”,然后交给DBA团队处理。条件所限,你不得不承担起DBA的工作,自己解决这个问题。
现在把这个情景扩展到之前列出的所有职位吧。一个初创公司的开发者可能同时担任开发,QA,部署/操作分析员,系统管理员,还有DBA。初创公司天然如此,而有些人会特别适合这种环境。然而,不知从什么时候起,我们开始自欺欺人说自己适合;因为在任何时候,一个初创公司的开发者不得不身兼多职,他/她还必须一下子担任所有这些角色。
好的开发者都是聪明人。我知道我这么说肯定会被拍,但一个组织里的技术人员还是有一个重要程度的层次区别的。最顶层是开发,接下来是系统管理员和DBA。QA团队,“操作员”之类,发布管理员等等角色处于阶级的最底层。为什么是这么个顺序呢?
因为每个角色有能力做比它低的层次的所有工作。
初创公司教会我们这个道理。如果需要,好的开发者也能当合格的DBA。他们也能当不错的测试,“部署工程师”,或者其他什么形形色色的职位。他们的工作需要他们对更低层工作的领域也了如指掌。但这其中有一个问题,希望说到这里你也能看出来:
反过来却行不通。
QA无法凑合当开发用,构建(build)工程师也做不了DBA的工作。他们不具备担任这些角色所必须的专业知识。这也没关系。无论你喜欢与否,每个组织里都有这种阶级层次,而成员的能力层次、技术水平也有所不同。尽管如此,你让开发去做其他工作,没有人能来替他做开发的工作!
但是其他人做不了他的工作,即使全加起来也不行。
如果诊所要这么运转,牵涉到的所有人都会受到损害,(当然)除了雇员们。这场本意是希望提高软件质量的实验演变成了一场闹剧,最有才华的员工疲惫不堪(并且有价值的工作产出远远减少),而低层次的职位根本不存在。
如果你是一个有点规模的软件的开发者,你会需要一个能用的部署系统。考考你,马上说出以下系统各自的好处和坏处:Puppet,Chef,Salt,Ansible,Vagrant,Docker。现在实现你的部署解决方案吧!你恐怕都没有注意到,上面列出那些系统里有一项是完全无关的吧?
专业化是有原因的:人类能运用的知识有限。在任务之间切换,无疑是代价昂贵的。强迫开发者去承担其他专业人员的角色,意味着他们将:
并非每个公司都是初创公司。出于选择,初创公司没有让开发人员参与多种职能,他们这样做是因为必要。你的公司很可能在你没有创造出一些资源之前有着极大的制约。请不要混淆“精简”与“以最少雇员运营”的区别。看在上帝的面上,让开发人员写代码吧!
全栈工程师就是跳槽时拿不出有力的简历去说服下一家公司给你期望的薪水。每个公司都希望自己的员工是超人是全栈工程师,每个公司在招聘新员工时又极力排斥全栈工程师,认为他们不精通。悲哀啊~
DevOps!=FullStackDeveloper,DevOPS不是让你去做运维,DBA的工作,作者根本不清楚什么是devops
同意
初创公司的技术合伙人可以去作全栈开发者,但不能因此要求后继的员工也一样。而问题是妄想以低廉薪酬找一些全栈开发者并且不给一点股权的弱智BOSS也不少。要解决很多问题,首先应从清扫不合格的公司开始做起。而这又牵涉到政府是否负责和有能力。
同感
我是个运维人员,路线也是devops,从我的角度上,作者并未完全了解devops的作用和应用场景,的确有时候强调开发人员兼顾其他的确伤害了他们,但是devops更多的是为了应对出现越来越复杂的运维工作场景,更多的责任也是再更规范化,自动化以及模块化的处理好运维的工作,释放传统运维工作重复的劳动去专注更应该专注和有价值的问题,而不是让一个人做两个职责范围的事情,devops可以说是特定性比较强
storyboard
如果你是一个有点规模的软件的开发者,你会需要一个能用的部署系统。考考你,马上说出以下系统各自的好处和坏处:Puppet,Chef,Salt,Ansible,Vagrant,Docker。现在实现你的部署解决方案吧!你恐怕都没有注意到,上面列出那些系统里有一项是完全无关的吧?=====================================================这一段是什么意思?到底哪一项完全无关?
应该是Vagrant吧,不能用个系统镜像去部署吧。
我觉得不是,说批量部署的话这几个都能做到。vagrant可以将需要的环境制作好,部署的时候只需要分发启动就可以了,批量部署开发和测试环境都没问题。