Categories
程式開發

被劣質代碼“殘害”的這些年


都已經2020年了,但我們仍然在生產劣質軟件。自從計算機誕生以來,已經過去了近70年,但我們似乎還沒有吸取所有的教訓,仍然在犯著重複的錯誤。

科技行業的變化日新月異,或許今天看起來有意義的事情五年後就失去了其意義。我認為,這正是軟件的一個迷人之處,因為它的可塑性很強。但是有一件事是不變的,那就是劣質軟件帶來的糟糕體驗,我們似乎短期內無法克服它。

現在,開源生態系統中的優秀軟件多如牛毛,以至於人們誤以為劣等軟件已經成為過去。其實不然,儘管開源軟件在過去十年裡呈現出爆炸式增長趨勢,但這其中依然混跡著不少非常糟糕的軟件,我每天都在“深受其害”。

劣質軟件緣何而來?

編寫優秀的軟件的確很難,但這不能成為產出劣質軟件的藉口。你每天都在使用優秀的軟件,所以應該知道如何來編寫優秀的軟件。優秀的軟件總是“潤物細無聲”,在你沒有察覺時就已完成了工作,而糟糕的軟件會把你逼向崩潰邊緣。但是,通常情況下,你不會看到或使用到特別多的糟糕軟件,因為我們日常生活中使用的大多數軟件都是消費軟件,糟糕的軟件無法在消費市場生存,但糟糕的軟件確實存在,這是不爭的事實。

據我所知,糟糕的軟件在企業生態系統中普遍存在。最主要的原因有以下幾點:

  • 在企業環境中,人對系統更加寬容;
  • 普通軟件研發人員比消費市場型軟件研發人員要少,普通軟件開發者對於他們自己編寫軟件沒有投入感情;
  • 軟件所做的大部分工作是以機器對機器交互的形式完成的,當某些東西不能工作時,機器檢查問題的能力不足;
  • 大多數情況下,編寫企業軟件的人不如為消費市場編寫軟件的人更了解他們的最終用戶和他們的問題。

被劣質代碼“殘害”的這些年 1

糟糕的軟件是缺乏思考和錯誤決策的結果。每一行代碼都很重要,每一個接觸軟件的人都會對其產生影響,甚至每一個決策都會影響軟件的設計走向。如果你不編寫單元測試,而是利用編寫單元測試的時間來進行一些新特性的開發,那麼這時系統中的Bug就會無孔不入,這種目光短淺又無知的決定是對幾十年來積攢的經驗智慧的一種褻瀆。

軟件不只是一個冰冷的機械,它也有情感。你可能會問為什麼?因為它是工程師的邏輯和情感狀態的精確體現,工程師開發軟件時並不是只有一種情緒,軟件是在工程師的多種情緒和狀態下編寫而成的,或難過、或開心、或高興、或生氣、或激動、或厭煩、或充滿鬥志,抑或沮喪憋悶,軟件既能反映工程師的情緒,還能反映出工作場所的文化氛圍。糟糕的企業文化幾乎總是會產生糟糕的軟件,這是顯而易見的,因為大多數組織在規模變大後卻因為糟糕的企業文化而最終衰敗。

劣質軟件帶來的惡果

糟糕的軟件會陷入惡性循環。技術債務不斷堆積,會議越來越多,完成的工作卻越來越少。會議上淨是些陳詞濫調的方法和管理實踐,卻沒有人懂。糟糕軟件就像癌症,大多數時候在最後階段才顯現出來,它會帶來非常嚴重的後果,它也會降低工作效率,讓人失去動力。軟件工程是一項充滿創造性的工作,但糟糕的軟件會把工程變成維護工作。花在Bug修復上的時間比花在為改善終端用戶體驗上的時間要多。公司內部的一些問題開始滲透進來。雖然糟糕的軟件是源於失敗的團隊,但是沒有人承擔責任,大家開始相互指責,在此情況下很容易滋生腐敗,最終讓員工備受煎熬。簡而言之,糟糕的軟件就是糟糕的企業文化的縮影。

被劣質代碼“殘害”的這些年 2

Bug是軟件工程中不可避免的存在,但是如果Bug一直存在下去,那就是危險的信號,它會產生連鎖反應。由於沒有動力和缺少獎勵,情況會變得更糟,在一切以交付為首要目標的情況下,鮮有人會對軟件進行改進或在其中增加新的特性。它變成了一個沒人敢碰的、失控的爛攤子,後患無窮。

如何改善劣質軟件?

如何將糟糕的軟件變成優秀的軟件?這是個棘手的問題。我雖然不是專家,但我也願意在這裡與讀者分享我的觀點。首先,它變得如此糟糕,很大程度上說明了該組織的文化也出現了嚴重問題。改變文化比改變代碼要難得多。文化是一個組織的支柱,即使有望改善它,也要面臨很大的阻力,因為已經投入的資源是一個更大的問題,預防勝於治療。

關於這個主題的文章不多。也許這個行業發展得太快了,以至於人們都來不及進行反思,或者與其把精力浪費在寫作上,不如去解決其他緊迫的問題。總有更多的東西被發明,更多的問題等待著我們去解決,更多的工具要開發,但投入一點時間反思將有助於整個行業的發展。

原文鏈接:
https://techimadions.com/the-misery-of-bad-software/