完美世界手游官网隐藏任务 www.gytoi.icu

圖0:軟件開發宣言:請保持簡潔

本文要點:

  • 復雜度是軟件公司成長和盈利的最大障礙。
  • 開發成本隨代碼庫的復雜度增加呈指數增長。
  • 在進度和簡潔之間做選擇是一個錯誤的二分法。對簡潔的投資就是對進度的投資。
  • 很少有高管認識到復雜度的代價,因為他們不了解其銷售的產品的性質。
  • 軟件是一種比較特殊的產品,它混合了產品和服務,帶有非常獨特的質保。

復雜度是公司源代碼的特征之一。通常與以下幾種情形有關聯:

  • 考慮不完善的架構,即數據在應用程序組件之間傳遞的方式。
  • 大量的冗余代碼(不再使用的代碼)。
  • 代碼設計沒有考慮模式的應用,比如面向對象設計和依賴注入等。
  • 存儲數據的結構維護得很差,比如未使用的列或不再使用的表仍然存儲在關系數據庫中。
  • 注釋文檔不足,代碼難以閱讀,開發人員很難維護或二次開發。

軟件開發人員對這種失敗有自己的稱謂,而我們稱之為技術債。沒有人愿意談論它,但正是這些我們本應該注意的問題,它們一點點累積起來,在不知不覺中讓公司的產品開發變得苦不堪言。公司原本只需要幾天或幾周就能推出的特性,現在也變成了幾個月。

簡潔是復雜的對立面。當代碼組織良好、邏輯簡明并且易于閱讀時,它就顯示出簡潔性。需要指出的是,復雜和簡潔跟代碼行的數量沒有直接關系。一個非常大的代碼庫(例如,谷歌大約有 20 億行代碼)可能并沒有很復雜,而一個小的代碼庫也可能一點都不簡潔。

復雜度問題

復雜度是阻礙軟件公司成長和獲利的最大障礙之一??⒊殺舅孀鷗叢傭鵲腦黽傭手甘栽齔?。之所以存在這種指數關系,是因為隨著軟件產品變得越復雜,公司需要更多的開發人員對其擴展和維護;而隨著開發人員數量的增加,公司的管理人員也越來越難掌控復雜度。

那為什么還有這么多軟件公司允許復雜度來危害產品代碼呢?畢竟這其中的很多公司不乏聰明而勤奮的員工,甚至他們的生計也依賴于軟件本身。很少有高管(天使投資人和風險投資家就更少了)能夠認識到復雜度的代價,這是因為他們不了解其銷售的產品的性質。軟件是一種比較特殊的產品,當你銷售軟件的時候,你實際上是在銷售一種混合了產品和服務并帶有獨特質保的東西(詳見下文A 還是 B)。

軟件公司的管理人員,甚至早期的工程師,都是畢業于商學院。他們喜歡從銷售、市場營銷和微觀經濟學的角度來看待自己所處的行業。他們也深信“做第一個”的教條,或者說,速度優勢。

做第一個固然好,但做第一名更好。早期的搜索引擎先驅雅虎就很好地體會到了這個教訓。雅虎雖然是第一個推出搜索服務的公司,但谷歌作為后來者,憑借更好的算法、商業模式和領導團隊很快超越了前者。當然很多時候,一家公司可能還沒有來得及入場就已經被淘汰。例如,現在很難想象有新公司要挑戰谷歌在搜索領域的地位。但是,爭奪行業主導地位的競賽是一場馬拉松,而不是短跑,而且賽道上最初的幾圈對長期結果幾乎沒有影響。

通過要求中層管理人員盡快將產品推向市場,偏執地專注于速度優勢可能會危及公司的生存。與此同時,像敏捷這樣的工作流管理方法(經常被誤解和執行不力)可能會把問題復雜化,因為它們注重速度的實踐制度化,而簡潔將成為背后的犧牲品。公司中往往只有軟件開發人員能夠唯一意識到這一點。

的確,軟件公司不能從仍在開發的產品中獲利,但是,當管理人員偏重于發布的速度而不是基礎代碼完整性的時候,投資資本和使用資本的回報將會有很大的風險。復雜度的成本顯然比加速發布日期節省的成本更高。

諷刺的是,在進度和簡潔之間做選擇是一種錯誤的二分法。對簡潔的投資其實也是對進度的投資,因為簡潔可以將軟件產品更快地推向市場,然后更有效地維護和增強它們。它還是知識產權的源泉,也是一種一旦失去就幾乎不可能重新獲取的競爭優勢。

芝諾悖論

在著名的阿基里斯悖論里,快捷的阿基里斯必須追上一只始終在他前面的笨重的烏龜。古希臘哲學家芝諾認為,因為追逐者必須首先要追上被追趕者的起點,所以阿基里斯必須在每次縮進距離的同時首先要抵達烏龜的起點,這樣盡管領先越來越少甚至無窮小,但烏龜將始終保持領先。

芝諾悖論有助于解釋為什么你的公司也可能是那個追趕烏龜的阿基里斯。當源代碼變得復雜時,添加新代碼會非常困難,舊代碼也幾乎不可能被調試。對簡潔有序比較執著的開發人員會變得沮喪,直到最終放棄。當然并不是所有的開發人員都會離開,而且這也會是一個緩慢的過程。然而,影響還是會逐漸蔓延開來,公司發展速度會隨著他們的離開而變慢,招聘和入職的相關成本也會增加。

此外,你將很難找到合適的替代人員。因為在當今的社交網絡世界中,你公司的代碼狀態對開發人員社區基本上是透明的,而它正是你從中招聘開發人員的地方。迫不得已的情形下,你可以雇傭新的工程師來處理這些復雜的代碼,而他們所需要的薪酬要遠高于市場平均水平。與此同時,特性的增加以及復雜度的進一步提高會需要更多的工程師。所以死亡螺旋會一直繼續。

我工作的軟件公司也面臨著復雜度的問題。同其他公司一樣,我認為我們公司沒有清楚地認識到困境的前因后果,我們轉而將業務外包(包括在岸和離岸業務),希望能改善這種狀況。但是復雜度是一個不能外包的問題,外包只會讓問題變得更糟,因為外包公司以及他們雇傭的承包商更愿意擴大知識面,并增加代碼的復雜度,他們這樣才能獲取更多的經濟利益。

A 還是 B?

設想一下:假設汽車制造商之間的競爭以及二手車庫存過剩大大抑制了新車銷量。因此,一家高端車制造商的高管們做出了大膽的回應:永久質保。經過仔細研究分析,公司決定提高標價 20%,他們不單為客戶提供同樣高質量的汽車,還承諾在整個保修期(比如說四五年)內對車輛承擔全部責任,包括所有預定的維修,以及改裝加載新車型才有的新功能。

讓我們通過兩種情形對這一舉措進行評估:

  • 情景 A:該公司的車輛設計得很好。它的工程師充分利用了??榛涂攀郊芄?,因此添加特性或替換故障組件變得非常容易。新舉措不僅在新車收入方面增加了 20%,而且公司經銷商的銷售和服務部門也比以往更加忙碌。與此同時,環保人士、政府機構和司機都稱贊該公司保養車輛的效率和安全性能。車主也高興,車輛在保修期結束后的轉售價值相當高,變相降低了新車的購買成本。這項創新很快就被宣布為一項勝利。在幾年的時間里,其他制造商也在試驗他們自己的永久質保項目,但是因為他們本身設計上的復雜性,質量很難保證,最終使這項試驗變得前途迷離。
  • 場景 B:盡管該公司的汽車功能豐富,性能良好,但是其內部設計復雜且雜亂無張。自該計劃推出以來,新車銷售收入增長了 20%,這在一定程度上抵消了正在進行的維護和功能增強的成本。但隨著每一次持續地改進,履行保修的困難和成本開始逐步升級。永久質保項目剛剛過了兩年,這些成本就變得不可維護,汽車制造商也撤回了報價。但是,公司仍然需要履行對已有客戶的義務。高管們估計損失將近 10 億美元,并面臨是否繼續經營的艱難決定。

現在你可以認識到永久質保在汽車行業里的不切實際之處。但如果你是一家軟件公司的主管,你應該意識到你已經提供了一個永久質保。唯一的問題是,你是在場景 A 還是場景 B 下工作?

簡潔開發宣言

這是一個改進軟件開發的宣言,或者更謙虛地說,這不過是請求尊重常識。如果你的組織還沒有越過復雜度的臨界點,那么盡快按照下面的處方進行補救。它是一張路線圖,可以讓你降低軟件的復雜度,顯著降低開發成本,縮短上市時間;它又是一個可維持的開發過程,既能保證公司的未來,又能把你的競爭對手甩在身后。

學習。復雜度只能自上而下地修復。領導者需要投入時間來理解軟件開發生產線上發生的一切。這需要多長時間?當你意識到相對于代碼的簡潔性而言上市時間反而是次要因素的時候,你就已經完成目標了。

領導力。通過工程管理的等級來逐層強調簡潔性,這樣你的組織就會圍繞一套新的價值觀來保持一致。溝通這個計劃的戰略價值。

重新評估。評估公司是否真地需要像敏捷開發這樣的工作流管理方法,還是只需要一種強調設計質量而非開發進度的替代方法。

有策略地招聘。招聘那些熱愛簡潔的開發人員。這些人通常是寫實際代碼最慢的人,他們喜歡花很長的時間來分析需求和構建代碼的可維護性、執行時間、內存消耗和數據存儲方面的最佳解決方案。他們也會樂于記錄自己的工作并與同事分享。

知識管理。產品代碼才是公司的生命線,需要在整個組織中貫徹落實這個理念,而不僅僅局限在一個部門。維持一個分散的知識結構意味著在知識共享上需要投入更多的時間,但是這也可以讓你根據不斷變化的業務需求來快速重新部署工程師。

腳踏實地。現在我們已經使用了一些很棒的技術和工具來編寫、測試、部署和監控軟件。其中大多數都是重復的,只帶來了增量收益和高轉換成本。我們需要專注于其中的一小部分,并且優先要考慮工程師已經掌握的技術。

度量進展

我們可以通過追蹤你雇傭的工程師數量和他們的失誤率來度量公司在反復雜度過程中的進展。如果你不在高科技行業,但你工程部門的規模增速快于線上銷售,那么這是一個非常糟糕的信號;如果你在一家軟件公司,但面臨員工的大量流失,這也很糟糕。源代碼簡單的公司會有一個相對小而穩定的工程師團隊,而且這個團隊會隨著產品功能的進步而緩慢成長。相反,如果是一個被軟件復雜度所困擾的公司,它會發現自己在不斷地招人,飛速奔跑氣喘吁吁地追逐一只烏龜。

關于作者

Paul Merlyn是 Consensus Corp 的全棧工程師和思想領袖,Consensus Corp 是 Target 的數字激活子公司。Paul 還是一名活躍的企業家,他創辦了 Fynancially(一家致力于金融服務行業民主化的企業)、Abridg 社交網絡以及?National Mediation Training Registry(國家調解培訓注冊中心)。他信奉,“JavaScript 正在吞食 Java 的午餐,并且將在晚餐時間毫不猶豫地統治世界”。

余下全文(1/3)

本文最初發表在www.infoq.cn,文章內容屬作者個人觀點,不代表本站立場。

分享這篇文章:

請關注我們:

發表評論

電子郵件地址不會被公開。 必填項已用*標注