最近有兩個趨勢真的令我很討厭:"DevOps"和“全能型”開發人員。DevOps 運動是如此受歡迎,以致我反對它就像是說我討厭 x86 電腦或者微控制器那樣。但是事實是我確實不能忍受 DevOps。是什麼讓我如何煩惱痛苦和討厭?因為它強調每個公司都必須像一個創業公司一樣運作,但其實並不是每個公司都是剛剛創辦的。
DevOps
“Devops”指的是原來純粹進行開發的人,和那些負責運維和質量管理保證任務的角色之間的緊密協作和相互交流。因為軟體必須以越來越快的速度發行,原始的“瀑布式”開發—檢測—發行已經被打破。開發者必須同時承擔質量檢測和發行評估的任務。
開發者(這個詞是否合適還有爭議)的逐漸擴大的任務範圍加速了寄生蟲式的工作角色—全棧開發者的增長。這樣的工程師可以做包括軟體開發人員、質量保障團隊成員、運維分析人員、系統管理員和資料庫管理員等等的全部工作。在你指責我說的太誇張離譜之前再返回去重新讀一遍這個列表。在這個列表中有什麼角色的能力是你不期望一個全能型開發人員掌握的?
這些概念從何而來?當然是來源於初創公司和敏捷開發方法。初創公司都是一種奇特的野獸,它們需要以一種非常精益(精打細算)的方式度過最初的幾年。我不否認這個。不幸的是我們讓那些在初創公司裡的工程師由於資源的缺乏而被迫扮演的多種技術角色變為“開發工程師”的最低要求。
多重角色
想象你在一個有著七個人開發團隊的初創公司,你從接觸到開發這個 WEB 應用程式已經一年,一切都進行的很順利,儘管它是通過瘋狂地加班來維持的。如果這裡有一個比較棘手的事情要求你有紮實的資料庫方面的知識,你沒有自由說“那不是我的專長”然後把它交給資料庫管理團隊去研究。因為資源非常有限,你不得不扮演資料庫管理人員的角色然後自己解決這個問題。
現在通過之前列舉過的所有角色擴充套件一下這個情形。在任何同一時間,一個剛成立公司的軟體開發者可能要扮演軟體開發人員,質量保證檢測人員,部署/操作分析人員、系統管理員、或者資料庫管理人員的角色, 這些工作的實質其實可以讓一些人在這種環境下得到成長。然而在前進的路途上,我們自己在欺騙自己——因為不管什麼時侯,剛剛創立的任何一家公司的軟體開發者不得不承擔這樣的角色,並且同時承擔多種任務。
如果這樣的人仍然存在,“全能型”開發者還是不會像他們應該扮演的角色那樣無所不能。他們是要在所有的時間執行所有的角色,而不是在很短的一段時間暫時承擔一個角色,然後過渡到下一個角色。這才是真正吸引人的地方:大多數好的開發人員幾乎可以做到這樣。
圖騰柱
好的開發人員都是聰明人。我知道我說的下面這段話將被很多人罵,但在一個有層次結構的組織裡,每個都有一些實用性技術。但開發人員是在頂部的,其次是系統管理員和 DBA (資料庫管理人員)。QA(質量保證)團隊,“運維”人員,釋出協調員等相似的人在圖騰柱的底部。為什麼這樣安排?
因為如果必要的話每個角色可以做其下面的所有角色的工作。
初創公司告訴我們這一點。好的開發人員如果想要的話,他可以很快的變為 DBA,他們也可以成為像樣的測試人員,“部署工程師”,和其他任何你想使用的荒謬的術語。他們的工作要求他們瞭解“更低”角色的領域。有一個大問題,希望現在你看到它:
在相反方向它不成立。QA 人員不能在必要時做一個開發人員的工作,釋出工程師也不能做 DBA 的工作。他們從未獲得扮演這個角色所需的專業知識。很好。不管你喜不喜歡,每個組織有層次結構,人們有不同的技能和能力水平。然而,當你讓開發人員扮演其他角色,你將沒有任何人承擔開發者的角色!
但沒有人,即使是他所有的員工加在一起,也沒有人可以做他(程式設計師)的工作。
這樣的運動對每個其中參與的人來說是一種傷害行為,當然僱主除外。開始作為一個嘗試旨在提高軟體質量現在已經成為一場鬧劇,最有才華的員工過度工作(雖然做的少,少而有用的工作)和根本不存在的低階職位。
這是問題的癥結所在。所有被之前各種能力水平的人持有的職位被全能的工程師變得多餘。大公司喜歡這個,因為它意味著他們可以僱傭更少的人做同樣多的工作。不過,在這個過程中,實際開發成為一個很小很小的開發人員工作的一部分。這就是為什麼我們看到許多開發人員,不能通過 FizzBuzz:他們從未真正需要去編寫任何程式碼。現在很常見的一個問題,你能想象你面試一位廚師,然後問他到底一天有多少時間真的在致力於烹飪嗎?
雜而不精,什麼都不精
如果你是一個在中等大小的軟體公司當開發人員,您需要部署系統。
我們專業的原因:人類是唯一能保留這麼多知識的人。多工切換是非常昂貴的。迫使開發人員承擔額外的通常由專家承擔的角色意味著他們:
- 不花自己的時間開發;
- 需要跟上一個巨大的知識領域;
- 會崩潰掉;
更重要的是,通過迫使開發人員承擔“完整”的責任,他們支付的薪水給僱員,往往超過大多數市場的平均水平。如果開發人員每年掙 100k。你可能在一個僅需要兩人完成的任務上每年給四個開發者支付 100k,50% 做開發和 50% 做釋出管理。或者以 75K 僱一個釋出人員和兩個全職開發人員開發。注意兼任釋出管理的開發人員浪費的時間,通常是不可預測的。
不要扼殺開發人員
所有這一切的效果是摧毀“開發人員”的角色,以一種“技術多面手”代之。我知道的每個開發人員走進程式設計,因為他們確實喜歡這份工作(在某種程度上)。當你強迫你最能幹的人承擔額外的角色,其實你是在傷害每個參與的人。
並不是每一個公司都是一家剛剛創立的公司。初創公司不得不讓開發者擔任多個職務,他們這樣做出於需要。因為他們的的公司沒有創造價值,而且可能沒有足夠的資源。請不要將“精益”和“使用盡可能少的員工”混為一談。看在上帝的份上,讓開發人員寫程式碼吧!
本文轉載自: ourjs.com