軟體開發中的瑞士軍刀綜合症

vaikan發表於2014-05-30

  首先,如果你覺得這篇文章更像是在發牢騷,我先向你表示道歉。這個瑞士軍刀綜合徵的靈感是在我跟很多專案經理、客戶,甚至其他程式設計師的接觸中備受打擊的情況下想出來的。我十分沮喪於他們的視野狹窄。我認為他們都有瑞士軍刀綜合徵。

 瑞士軍刀

瑞士軍刀

  “瑞士軍刀”這個詞通常用來比喻一個東西有很多很豐富的用途,能夠在很多場合下使用。

  雖然這種東西非常有用,但它也有一些需要你警惕的地方。一個工具如果有太多的活動部件組合而成,也許最終它什麼都幹不了。一個工具試圖什麼功能都有,也許它沒有一樣功能能做好。

  在我的經驗中,這個道理在軟體開發中同樣適用。而且是經常出現類似問題,程式設計師試圖堆砌一堆模組和程式碼,只是因為它們很酷;專案經理試圖在專案開發過程中增加新的功能,只是因為”X”或”Y”功能看起來會讓軟體更有價值。客戶會要求額外的軟體特徵和功用,只是因為他們讀到或聽說這些東西會對他們的業務起到“關鍵”作用。

  “瑞士軍刀綜合徵”有很多的表現:堆砌功能,過早優化,討好無知客戶等。但問題的根源是我們對軟體的認知和對價值的評估:

  功能多

  =

  價值大

  然而,在現實生活中,在大多數情況下,反過來才是真理。程式碼越複雜,軟體越龐大,它的價值反而會越小。我個人的一個證明這個說法的例子是一個小的 Demac Media 公司使用的管理軟體。

  最初這個應用非常簡單:我們需要的是:

  • 1)能看到所有任務都分配到哪個團隊裡
  • 2)任務按周或按2周列表顯示,基本的任務列表

  我用一個週末把這些簡單的功能實現。週一給經理演示的時候,他認為這個軟體會非常有用。

  但是,如果能 … 會更好

  於是,瑞士軍刀綜合徵發病了:伴隨著一個“但是”。其它團隊也要使用這個軟體。就在他們還沒有開始使用之前,我們就收到了一大堆他們“需要”的功能列表或增強意見。突然間,我們最初的輕量級的軟體就要變成了一個超級複雜的多功能應用了。

 軟體設計需要有清楚的目標

菜刀

  軟體應該簡單實用。仍然使用瑞士軍刀的例子,一個好的軟體應該像一把殺豬刀。殺豬刀有清楚明確的使用方向和特殊功用。專業屠夫會選擇適合他的工作的正確的刀。我們程式設計師對程式碼的認識也應該是這樣的。

  幹一件事,幹好一件事!

  軟體設計也應該遵循這樣的原則,這也是我們通常說的單一責任原則

…單一責任原則描述的是每個類應該只有一個責任,這個責任應該完全封裝到這個類內部。這個類提供的所有服務都要以這個責任為目標。

 總結

  沒有哪個公司、專案經理、程式設計師或客戶能逃脫“瑞士軍刀綜合徵”的毒害。我們都傾向於認為“更多”就是“更好”或“更有價值”。軟體應該優雅,優雅的程式是剛好漂亮的解決一個問題。我們程式設計師有責任讓我們編寫的每一行程式碼都最簡明、優雅和實用。

  英文原文:Swiss Army Knife Syndrome

相關文章