YAGNI原則之深度思考

什么是YAGNI?

YAGNI 是 You aren’t gonna need it 的縮寫。該原則的基本含義就是,不應(yīng)該開發(fā)任何當(dāng)前不使用的功能。因?yàn)檫@些占用開發(fā)成本的功能,可能根本沒有人用。而且不僅僅是開發(fā)成本打了水漂,你還要不斷投入維護(hù)成本,來保證這些無人使用的功能可以正常運(yùn)行。

YAGNI原則之深度思考

看似簡單,執(zhí)行不簡單

作為一名程序員,一般都具有良好的抽象能力和超前思維。編寫更健壯的、擴(kuò)展性更好的,復(fù)用性更強(qiáng)的代碼,往往是許多程序員的理想和目標(biāo)。但是,這種程序員的思維定勢也容易將軟件開發(fā)推向一個(gè)大家都不愿見到的局面。常見的不良局面可能是以下幾種:

  • 過渡設(shè)計(jì):十分常見的情況。增加了復(fù)雜度不說,不少功能根本無人使用或調(diào)用。最終導(dǎo)致開發(fā)成本和維護(hù)成本都居高不下。
  • 重復(fù)造輪子:比如,同一公司,各個(gè)項(xiàng)目,到處可見功能類似的工具包。大量開發(fā)成本被重疊和浪費(fèi)。
  • 框架上的框架:比如,同一公司,各個(gè)項(xiàng)目都有自己一套項(xiàng)目小框架,凌駕于基礎(chǔ)框架之上。如此這般,維護(hù)成本只會(huì)越來越高。
    (當(dāng)然,上述情況,尤其是后兩種情況的發(fā)生,不僅僅是未履行YAGNI原則的問題)

所以,合格的程序員和優(yōu)秀的程序員之間的區(qū)別,有一個(gè)重要的標(biāo)志,就是是否擁抱YAGNI原則。優(yōu)秀的程序員應(yīng)該是充分理解YAGNI原則,并且能真正地執(zhí)行。

YAGNI vs 未雨綢繆/擴(kuò)展升級(jí)

可能有讀者要問,YAGNI要求不應(yīng)該開發(fā)任何當(dāng)前不使用的功能。那難道軟件開發(fā)就不需要未雨綢繆了,不考慮未來擴(kuò)展和升級(jí)了?

筆者認(rèn)為:

  • YAGNI:本質(zhì)是實(shí)用主義,通過減少不必要的功能,降低復(fù)雜度,從而減少無價(jià)值的開發(fā)和維護(hù)成本。它聚焦剔除無回報(bào)的成本。
  • 未雨綢繆:聚焦預(yù)防風(fēng)險(xiǎn),減少損失。
  • 擴(kuò)展和升級(jí):聚焦未來的開發(fā)和維護(hù)成本。

3者因關(guān)注度不同,并不沖突。

  • 首先,預(yù)防風(fēng)險(xiǎn)和擴(kuò)展升級(jí)都屬于必要功能,都不屬于無回報(bào)的成本
  • 其次,YAGNI作為一種思想也可以應(yīng)用到后2者。比如預(yù)防風(fēng)險(xiǎn),就一定要判斷哪些風(fēng)險(xiǎn)需要預(yù)防。再比如,擴(kuò)展和升級(jí),一定會(huì)預(yù)先明確擴(kuò)展升級(jí)的范圍以及方向。

總結(jié)

擁抱YAGNI原則,可以提高開發(fā)效率,降低開發(fā)和維護(hù)成本,避免過度設(shè)計(jì)等一系列問題。是軟件開發(fā)過程中的重要且必要原則之一。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容