天天看點

軟體開發打敗了 80 %的程式員

首先,我并不是說軟體開發人員都是輸家,我想說的是,大多數軟體開發人員都沒能赢得軟體開發,他們都被軟體開發打敗了。

開發人員的痛點在于,他們不知道自己面對的是什麼遊戲,或者說他們不知道應該采用哪種戰術。

你必須知道軟體開發是何種遊戲,才能在遊戲中獲勝。

在編寫代碼的過程中,重點不在于代碼是否會出錯,而是代碼何時會出錯,以及如何通過最簡單的方法修複錯誤。

1、赢家與輸家

Charles Ellis曾撰寫過一篇文章《Loser’s Game》,他指出,職業網球是赢家的比賽,即選手利用自己的技能主動赢得比賽。而業餘選手會使用不同的政策避免自己失誤,然後等待對手出現失誤,進而自己打敗自己。

“在專業網球比賽中,80%的得分是赢得的;而在業餘網球比賽中,80%的得分是輸掉的。換句話說,職業網球是赢家的遊戲,即最終結果取決于赢家的活動;而業餘網球是輸家的遊戲,即最終結果取決于輸家的活動。這兩種遊戲的基本特征完全不同,甚至是相反的。”

—— Charles Ellis

遊戲雖然相同,但你需要根據對手選擇有效的政策:

“專業網球就是我所說的赢家遊戲。赢得分數更多的一方選手獲勝,也就是說并不是看哪個選手得到的分數更高,而是看哪個選手赢得的分數更高。Ramo發現業餘網球則完全不同。業餘選手很少打敗自己的對手,但是他們會自己打敗自己。在這樣的比賽中,得分更高的選手獲勝,但他得分更高是因為他的對手輸掉的分數更多。”

2、軟體開發遊戲

我從事軟體開發工作已20載有餘,曾與許多軟體開發人員一起從事過許多項目。我認為80%的開發人員都是業餘玩家,隻有20%的是專業玩家。

我為什麼這麼說?

業餘軟體開發人員不喜歡:

标準

單元測試

設計模式/ SOLID原則

學習和設定開發運維和産品生命周期管理(他們喜歡使用)

修複建構

代碼審查

代碼分析/解決方案檢查

如果你想毀掉一個開發團隊,那就不要執行上述步驟,因為團隊中的大多數開發人員都不是專業人員。

“避免犯錯的方法是保守行事,想辦法讓比賽繼續下去,給對手充裕的機會出現失誤,進而自己打敗自己,因為業餘選手玩的是輸家的遊戲,而且他深陷其中卻不自知。”

大多數開發人員都會低估編寫代碼的難度,同時還會高估自己的能力。他們以為編寫代碼非常容易,而且編寫好的代碼第一次運作就可以成功。

3、業餘玩家

如果大多數開發人員都是業餘玩家,那麼我們就應該将軟體開發視作輸家的遊戲,竭盡全力減少業餘玩家容易犯的錯誤。

業餘開發人員的目标是寫代碼,其他活動都會降低開發的速度。上述提到的其他步驟就是為了建立簡單的代碼,更快地發現錯誤,并注意提高品質。産品生命周期管理/開發運維可以快速地完成部署,而且還不容易出錯,進而實作快速回報。

快速編寫代碼的最佳方法是專注于品質和減少錯誤,而不是更快地編寫代碼。

項目和開發團隊的規模越大,為bug和錯誤所付出的代價就越沉重。大型團隊的問題可能會導緻很多人的進度延誤,而實施上述清單中的活動可以讓我們集中精力處理阻礙。

我曾經曆過一些項目,直到項目後期才發現的一些bug導緻使用者失去信心,并給上線帶來了風險。

4、本末倒置

我們的目标不是編寫有效的代碼,而是花時間避免編寫品質低劣的代碼和bug,否則就會本末倒置。

“對于你我之輩來說,難得的不是一時的聰明,而是堅持不做蠢事。”

—— Charlie Munger

業餘開發人員認為,快速編寫代碼是最有效的建立産品的方法。如果方法龐大,代碼複雜,則代碼庫會越來越複雜,而且每添加一行代碼開發工作就會更加困難。這種方法僅适合隻有1~2名開發人員的小型項目。

5、Bug的成本

從代碼編寫完成開始,發現bug的時間越晚,修複所需的時間就越長。舉個例子,如果你發現了生産中的某個bug,那麼首先你必須設法複現bug,并搞清楚bug發生的原因,修複bug,并通過每個環境的部署和測試,最後才能進入生産。

如果在單元測試中發現相同的錯誤,則可以快速修複,同時還不會影響到其他開發人員和測試人員。

我們可以在開發過程中添加一些簡單的步驟來找出bug,在軟體開發這個遊戲中,bug會浪費大量時間,并消磨掉客戶的信任。

如果我們知道大多數開發團隊的成員都是業餘玩家,他們很容易犯錯并導緻自己甚至團隊的失敗,那麼我們就更加應該重視防止bug,而不是假定每個人都是專業的開發人員,每個人都可以編寫出色的代碼。

赢得軟體開發這場遊戲的關鍵,不在于第一次就能建立正确的代碼,而在于避免失敗的各種方式。

“專業人士靠主動赢分獲勝,而業餘人士靠對方丢分獲勝。”

繼續閱讀