為什么糟糕的軟件成功了
英文原文:What Do We Actually Mean by Bad Software?
做為熱愛公平的軟件制造者,最難以接受的現狀之一,莫過于一款制作精良、設計優秀的軟件完全沒有用武之地。類似地,世界上嚴重被依賴的很多軟件 卻是糟糕的——即使沒有完全的、不可否認的 bug,也充斥著低劣的設計抉擇。這好像成為了有關軟件的、一種重要的讓人沮喪的事實。
到底什么是糟糕的軟件?
成功的糟糕軟件(失敗的優秀軟件)的第一個也是最重要的理由,在于我們無法就“糟糕”的意思達成一致。大部分人都認為,如果軟件宣稱備份你的電 腦而不是隨意地破壞你的數據,明顯因成功備份而占用了更多的存儲空間,卻不包含你的數據,那么這種軟件就是“糟糕的”。但是在此假想情況與我們開發者稱之 為糟糕軟件之間,存在著大量的中間立場。
- 如果軟件比較適合初級用戶、但是不利于擴展、修改或二次開發,那么這是糟糕的嗎?
- 如果軟件的設計意圖非常準確、但是需要長時間的訓練才能變得有效率,那么這是糟糕的嗎?
- 如果軟件運行良好,相對易于上手,但是在實際執行某些操作時,卻不應該地慢了很多很多,那么這是糟糕的嗎?
- 如果它能夠完成工作,但是真的看著很丑,該怎么說?
- 完成了 95% 的工作或時間,然后不幸死掉了,因為宕機而花掉剩下的5% 的時間,該怎么說?
人們不認同讓它成為糟糕的標簽,糟糕的軟件比你預期的這種標簽做得要好,因為所有這些例子都被理智地歸入了“糟糕軟件”之列,所以它比其中的原 因之一要清晰些。如果你認為一款軟件因其 GUI 難看而被視作糟糕的,那么當一款軟件在它的設計功能上出問題時,我想它就是糟糕的,我們很可能在業務依賴的老款 Swing(Java) 工具包上存在分歧。
當糟糕軟件是優秀的時候
理解上的沖突是關于糟糕軟件成功的原因核心所在。商人優先考慮的事情和開發人員極有可能不同。終端用戶優先考慮的事情,與商業主和開發者也可能不同。一個人認為好的東西,另一個人認為一般般,甚至認為是“非常痛苦的”。這就是問題的核心。
大多數剛接觸 WordPress 的開發者都厭惡它。作為一個開發平臺,充其量有點兒新奇。它的代碼是很久以前寫的,十年前的一些不平凡的設計決策,到了今天仍然是健壯的。但是,由于該平 臺優先考慮的事情是用戶便利性和持續性,它仍然運行在帶有 PHP5.2 的、陳舊的共享主機賬號上(它甚至好多年沒有安全方面的發布了)。所有過去的模板和擴展(在 WordPress,其術語是主題、插件)仍然良好地運行在最新的版本里。
你可以不認同 WordPress 團隊關于他們優先考慮的事情,你可以認為他們的軟件只是不可挽回地、糟糕至極,但是你真的不能無視一個事實,那就是它仍然被相當數量(貌似還在增長)的用戶使用,他們覺得它簡單、舒服和強大。
為什么糟糕的軟件沒有隨處可見
基本上,“糟糕”軟件繁殖的主要驅動力在于,有著不同優先目的的人們所做的決定,在影響著軟件開發的最后產品或購買進程。通常,這些組合,和目標以及成功的定義沒有多大關系。
擺脫糟糕軟件的辦法在所有層面都是深度相關的,取決于所有的利益相關人,既定軟件要完成什么、它使誰受益、以及軟件的“優秀”版本應該是什么。當它達到那個版本時,每個人最終認為它是優秀的,而不僅僅是實現了最重要的、最有權勢的利益相關人的版本。
基本上,清晰地、良好測試的、文檔齊備的、明辨可懂的代碼,僅僅和開發者相關。對于業務人員,它能否提供價值、以及幫助賺錢才是重要的。對于管 理人員,成功通常是運行時間上的五個9(99.999%)。對于終端用戶,最重要的卻是容易和開心。但是這些利益相關人的每個目標,很容易與其他人在不可 避免的優先權爭奪中發生轉移。
對于所有利益相關人而言,制作優秀軟件是一種政治平衡,更像是軟件藝術、敏捷實踐、TDD 或任何其它東東的問題。在一個軟件團隊調整每個人的愿景和工作,和在任何其他團隊一樣有難度。在所有利益相關人的愿景根據他們的目標、優先考慮的事情和成 功的條件做出調整之前,有人常常覺得他們被迫地與“糟糕的”軟件打交道。
— END —
譯文: 《為什么糟糕的軟件成功了 》 臘八粥