人月神话 8.4分
读书笔记 未雨绸缪(Plan to Throw One Away)
虎子
對於大多數專案,第一個開發的系統並不合用。它可能太慢、太大,而且難以使用,或者三者兼而有之。系統的丟棄和重新設計可以一步完成,也可以一塊塊地實現。這是個必須完成的步驟,如果將開發的第一個系統丟棄原型釋出給使用者,可以獲得時間,但是它的代價很高。對於使用者,使用極度痛苦;對於重新開發的人員,分散了精力;對於產品,影響了聲譽,即使最好的再設計也難以挽回名聲。

在现今阶段,尤其是在开源产品的框架下,这种态度似乎遭到了挑战:我们都是一边evolve一边不断地让用户当小白鼠的。也许可能的原因就是,开源的核心就让一些早期的宽容度大而规模小的公司作为testing,而让中后期的规模大,宽容度低(同时也是开源产品最可能获利的)用户使用经过了testing成熟的版本。

第一步是接受这样的事实:变化是与生俱来的,不是不合时宜和令人生厌的异常情况... 变更的阶段化是一种必要的技术。

如何在变更中找到那一个变与不变的tradeoff,比如simplicity和funtion,modularity和monolithic,才是关键。

软件维护主要包含对设计缺陷的修复。对于广泛使用的程序,维护成本通常是开发成本的40%或更多。 缺陷修复总会以(20-50)%的机率引入新的bug。 所以整个过程是前进两步,后退一步。用在修复原有设计上瑕疵的工作量越来越少,而早期维护活动本身引起的漏洞修复工作越来越多... 所有修改都傾向於破壞系統的架構,增加了系統的混亂程度。即使是最熟練的軟體維護工作,也只是放緩了系統退化到不可修復混亂的程序。

所以说,任何一代系统都有实在无法继续修补寿终正寝的那一天。不论是由于地层硬件发展的结果,还是一开始的设计本身致命缺陷无法弥补的原因,重建是必然的。更重要的是,掌握“我还能再抢救一下”和“推倒重来”之间的timing。

0
《人月神话》的全部笔记 70篇
豆瓣
免费下载 iOS / Android 版客户端