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