"DevOps"是如何傷害一個開發(fā)者的
最近有兩個趨勢我真的很討厭:DevOps及“全棧”開發(fā)者的概念。隨著DevOps運動越來越受歡迎我越發(fā)討厭x86架構(gòu)和單內(nèi)核。但確實如此:我受不了。是什么引發(fā)我的痛苦呢?這是原因:不是每一個公司都剛起步,那怎么還要每個公司都必須表現(xiàn)得像它們的經(jīng)歷一樣。
DevOps
“DevOps”用來表示密切地協(xié)作,將之前純粹的開發(fā)者、純粹的操作者以及純粹的QA的角色內(nèi)容進行穿插。因為軟件需要以不斷加快的速度釋放出來,老的開發(fā)-測試-發(fā)布的“瀑布”型周期被打破了。開發(fā)者還必須為測試及發(fā)布環(huán)境的質(zhì)量責任。
“開發(fā)者”(這個詞是否適當有待商榷)越來越廣的責任范圍導致了對聯(lián)合體求職者的需求:“全棧”開發(fā)者。這樣的開發(fā)者能夠做開發(fā)工作,是QA團隊的成員,能夠進行業(yè)務(wù)分析,做系統(tǒng)管理員和DBA。在你指責我夸張前回頭再看下這個列表。列表中有你不希望“全棧”開發(fā)者精通的嗎?
這些概念是從哪來的呢?初創(chuàng)公司,對(以及敏捷方法)。初創(chuàng)公司初起時奇形怪狀,需要以一種艱苦的方式撐過最初的幾年。對此我不否認。但不幸的是,初創(chuàng)公司的工程師承擔了多種技術(shù)角色,被迫在缺乏一系列最基本能力的情況下承擔“開發(fā)者”的角色。
身兼多職
想象你在一家初創(chuàng)公司,開發(fā)團隊共有7人。你已經(jīng)開發(fā)了一年某個web應(yīng)用,現(xiàn)在看起來像模像樣,一切順利,但是在保持正常運轉(zhuǎn)這方面卻往往是令人抓狂的混亂。如果有一個特別麻煩的問題,需要深度研究數(shù)據(jù)庫,你可沒有權(quán)力說“這不是我的專長”,然后交給 DBA 團隊處理。條件所限,你不得不承擔起 DBA 的工作,自己解決這個問題。
現(xiàn)在把這個情景擴展到之前列出的所有職位吧。一個初創(chuàng)公司的開發(fā)者可能同時擔任開發(fā),QA,部署/操作分析員,系統(tǒng)管理員,還有 DBA 。初創(chuàng)公司天然如此,而有些人會特別適合這種環(huán)境。然而,不知從什么時候起,我們開始自欺欺人說自己適合;因為在任何時候,一個初創(chuàng)公司的開發(fā)者不得不身兼多職,他/她還必須一下子擔任所有這些角色。
即使居然真有這樣的人,這些“全棧”開發(fā)者仍然不能以他們適應(yīng)的方式工作。初創(chuàng)公司并不是讓他們在一段時間內(nèi)擔任某一個角色,然后再轉(zhuǎn)換到下一個角色,而是要求他們一直同時擔任所有這些角色。最糟的是:大部分好的開發(fā)者還幾乎可以應(yīng)付。
階級
好的開發(fā)者都是聰明人。我知道我這么說肯定會被拍,但一個組織里的技術(shù)人員還是有一個重要程度的層次區(qū)別的。最頂層是開發(fā),接下來是系統(tǒng)管理員和 DBA。QA 團隊,“操作員”之類,發(fā)布管理員等等角色處于階級的最底層。為什么是這么個順序呢?
因為每個角色有能力做比它低的層次的所有工作。
初創(chuàng)公司教會我們這個道理。如果需要,好的開發(fā)者也能當合格的 DBA。他們也能當不錯的測試,“部署工程師”,或者其他什么形形色色的職位。他們的工作需要他們對更低層工作的領(lǐng)域也了如指掌。但這其中有一個問題,希望說到這里你也能看出來:
反過來卻行不通。
QA 無法湊合當開發(fā)用,構(gòu)建(build)工程師也做不了 DBA 的工作。他們不具備擔任這些角色所必須的專業(yè)知識。這也沒關(guān)系。無論你喜歡與否,每個組織里都有這種階級層次,而成員的能力層次、技術(shù)水平也有所不同。盡管如此,你讓開發(fā)去做其他工作,沒有人能來替他做開發(fā)的工作!
舉個例子能說得更清楚一些。我爸爸是一個開私人診所的牙醫(yī)。他雇了一個秘書,一個保健專家和一個牙醫(yī)助理。在所謂的“牙醫(yī)Ops”環(huán)境下,我爸爸需要一邊記錄病人的預(yù)約,一邊洗牙,同時還要擠出時間來給牙鉆孔,實施根管治療術(shù),等等。我爸爸能做得了診所里的其他工作,因為他具備這些工作所需的專業(yè)知識。
但是其他人做不了他的工作,即使全加起來也不行。
如果診所要這么運轉(zhuǎn),牽涉到的所有人都會受到損害,(當然)除了雇員們。這場本意是希望提高軟件質(zhì)量的實驗演變成了一場鬧劇,最有才華的員工疲憊不堪(并且有價值的工作產(chǎn)出遠遠減少),而低層次的職位根本不存在。
這就是這個問題的關(guān)鍵所在。之前那些職位由不同能力層次的人分別擔任,而“全棧”工程師使得這些職位沒必要存在了。大公司非常喜歡這一點,因為這意味著它們可以遠遠減少雇傭人數(shù),來完成同樣的工作量。然而,在這個過程中,真正的開發(fā)在開發(fā)者工作所占的比例越來越小。這就是為什么我們會看到這么多的開發(fā)者通過不了 FizzBuzz:他們從來不用真正寫任何代碼?,F(xiàn)在這個問題已經(jīng)太普遍了,你能想象面試廚師時要問他,每天他有多少時間是真正用來烹飪的嗎?
什么都做過一點,什么都不精通
如果你是一個有點規(guī)模的軟件的開發(fā)者,你會需要一個能用的部署系統(tǒng)??伎寄?,馬上說出以下系統(tǒng)各自的好處和壞處:Puppet,Chef,Salt,Ansible,Vagrant,Docker。現(xiàn)在實現(xiàn)你的部署解決方案吧!你恐怕都沒有注意到,上面列出那些系統(tǒng)里有一項是完全無關(guān)的吧?
專業(yè)化是有原因的:人類能運用的知識有限。在任務(wù)之間切換,無疑是代價昂貴的。強迫開發(fā)者去承擔其他專業(yè)人員的角色,意味著他們將:
-
沒有把時間花在開發(fā)上
-
需要跟上一個極其龐大的知識領(lǐng)域
-
會不堪重負
不僅如此,要強迫開發(fā)者接受“全棧”的任務(wù),公司要付給雇員的工資遠高于完成其中大部分任務(wù)的市場平均價格。如果一個開發(fā)者1年賺100K,你可以雇4個1年100k的開發(fā)者來做一個兩人的任務(wù),50%的時間做開發(fā),50%的時間做發(fā)布管理;或者,你也可以只雇一個發(fā)布管理員,花上大概75k,然后兩個開發(fā)者全職開發(fā)。更不用說兼職發(fā)布管理的開發(fā)者,在沒有發(fā)布需要管理時浪費的時間了。
不要扼殺開發(fā)人員
這樣做全部的效果就是毀掉“開發(fā)者”的作用,并且替之以“技術(shù)工種”。我所知的每個開發(fā)人員都沉迷于編程,因為它們真正熱愛它(在某點上)。當你強行讓這些聰明人執(zhí)行額外的任務(wù)時,你則傷害了每個相關(guān)的人。
并非每個公司都是初創(chuàng)公司。出于選擇,初創(chuàng)公司沒有讓開發(fā)人員參與多種職能,他們這樣做是因為必要。你的公司很可能在你沒有創(chuàng)造出一些資源之前有著極大的制約。請不要混淆“精簡”與“以最少雇員運營”的區(qū)別??丛谏系鄣拿嫔?,讓開發(fā)人員寫代碼吧!
譯文鏈接:http://www.oschina.net/translate/how-devops-is-killing-the-developer