軟體開發中的瑞士軍刀綜合症
首先,如果你覺得這篇文章更像是在發牢騷,我先向你表示道歉。這個瑞士軍刀綜合徵的靈感是在我跟很多專案經理、客戶,甚至其他程式設計師的接觸中備受打擊的情況下想出來的。我十分沮喪於他們的視野狹窄。我認為他們都有瑞士軍刀綜合徵。
瑞士軍刀
“瑞士軍刀”這個詞通常用來比喻一個東西有很多很豐富的用途,能夠在很多場合下使用。
雖然這種東西非常有用,但它也有一些需要你警惕的地方。一個工具如果有太多的活動部件組合而成,也許最終它什麼都幹不了。一個工具試圖什麼功能都有,也許它沒有一樣功能能做好。
在我的經驗中,這個道理在軟體開發中同樣適用。而且是經常出現類似問題,程式設計師試圖堆砌一堆模組和程式碼,只是因為它們很酷;專案經理試圖在專案開發過程中增加新的功能,只是因為”X”或”Y”功能看起來會讓軟體更有價值。客戶會要求額外的軟體特徵和功用,只是因為他們讀到或聽說這些東西會對他們的業務起到“關鍵”作用。
“瑞士軍刀綜合徵”有很多的表現:堆砌功能,過早優化,討好無知客戶等。但問題的根源是我們對軟體的認知和對價值的評估:
功能多
=
價值大
然而,在現實生活中,在大多數情況下,反過來才是真理。程式碼越複雜,軟體越龐大,它的價值反而會越小。我個人的一個證明這個說法的例子是一個小的 Demac Media 公司使用的管理軟體。
最初這個應用非常簡單:我們需要的是:
- 1)能看到所有任務都分配到哪個團隊裡
- 2)任務按周或按2周列表顯示,基本的任務列表
我用一個週末把這些簡單的功能實現。週一給經理演示的時候,他認為這個軟體會非常有用。
但是,如果能 … 會更好
於是,瑞士軍刀綜合徵發病了:伴隨著一個“但是”。其它團隊也要使用這個軟體。就在他們還沒有開始使用之前,我們就收到了一大堆他們“需要”的功能列表或增強意見。突然間,我們最初的輕量級的軟體就要變成了一個超級複雜的多功能應用了。
軟體設計需要有清楚的目標
軟體應該簡單實用。仍然使用瑞士軍刀的例子,一個好的軟體應該像一把殺豬刀。殺豬刀有清楚明確的使用方向和特殊功用。專業屠夫會選擇適合他的工作的正確的刀。我們程式設計師對程式碼的認識也應該是這樣的。
幹一件事,幹好一件事!
軟體設計也應該遵循這樣的原則,這也是我們通常說的單一責任原則:
…單一責任原則描述的是每個類應該只有一個責任,這個責任應該完全封裝到這個類內部。這個類提供的所有服務都要以這個責任為目標。
總結
沒有哪個公司、專案經理、程式設計師或客戶能逃脫“瑞士軍刀綜合徵”的毒害。我們都傾向於認為“更多”就是“更好”或“更有價值”。軟體應該優雅,優雅的程式是剛好漂亮的解決一個問題。我們程式設計師有責任讓我們編寫的每一行程式碼都最簡明、優雅和實用。
相關文章
- 軟體開發中的“瑞士軍刀綜合徵”
- MySQL 瑞士軍刀MySql
- 命令列工具中的瑞士軍刀 - tmux命令列UX
- 技術主管的瑞士軍刀
- Unix除錯的瑞士軍刀:lsof除錯
- 瑞士軍刀redis - 慢查詢Redis
- Reflect API:每個 JavaScript 開發人員都需要的瑞士軍刀APIJavaScript
- Linux命令列裡的“瑞士軍刀”Linux命令列
- 瑞士軍刀redis - 釋出訂閱Redis
- 瑞士軍刀redis-pipelineRedis
- mysql percona-toolkit 瑞士軍刀MySql
- 開源的網路瑞士軍刀「GitHub 熱點速覽」Github
- ComponentOne – 控制元件界的“瑞士軍刀”控制元件
- CSVKIT——處理csv檔案的瑞士軍刀
- Linux 網路工具中的瑞士軍刀 - socat & netcatLinux
- Linux Netcat命令:網路工具中的瑞士軍刀Linux
- Linux Netcat 命令——網路工具中的瑞士軍刀Linux
- 固態硬碟界的"瑞士軍刀":有這兩款工具箱軟體才安心硬碟
- Lightning 框架: 一個未被發現的 "Swiss Army Knife(瑞士軍刀級別) "Linux惡意軟體框架Linux
- f-strings: Python字串處理的瑞士軍刀Python字串
- 軟體開發中的冒名頂替綜合徵
- 瑞士軍刀 gout v0.0.5版本釋出Go
- 安全界瑞士軍刀--Netcat常用命令
- 開發者的瑞士軍刀「GitHub 熱點速覽 v.22.04」Github
- 開發者的瑞士軍刀!一款適用於開發者的工具集合!
- DevToys Mac程式設計師神器,號稱開發者的瑞士軍 刀devMacC程式程式設計師
- 程式設計師的瑞士軍刀DevToys推出vscode外掛程式設計師devVSCode
- 網路版“瑞士軍刀”!一個多功能的網路工具箱!
- 軟體開發和敏捷-對症下藥敏捷
- AE指令碼Swiss Knife Mac 瑞士軍刀MG動畫製作外掛指令碼Mac動畫
- 軟體開發實踐的24條軍規
- Linux網路命令必知必會之瑞士軍刀 nc(netcat)Linux
- 全棧工程師?給把瑞士軍刀你去砍鬼子好不好!?全棧工程師
- UNIX系統程式設計的瑞士軍刀 --《UNIX環境高階程式設計》書評程式設計
- git踩坑綜合症Git
- 軟體開發中的DevOpsdev
- 設計界的瑞 士 軍 刀:Autodesk AutoCAD2020軟體下載
- 掃描器裡的瑞士軍刀,盛邦安全PAD掃描器助力基礎設施安全檢查