杜绝重复
需求是变化的,因此维护和修整不可避免。而重复是维护的噩梦,因为重复的本质是同一事物使用不同或相同的形式在不同的地方出现了多次,当这一事物发生改变时,你需要找到所有它以不同或相同的形式出现的地方并一一修改
遗漏是不可避免的,应责怪的是重复而非遗漏
如果重复必须发生,让机器重复而非人工重复(从前文可以了解到重复导致的问题主要是人的疏忽,而机器的一大优点正是一丝不苟,因此机器是不怕重复的,也基本不会犯因重复而导致的错误)
如果复用很容易,那么没有人会选择重复,因此应尽量让自己做的东西易于复用
减少依赖
如果事物之间互不依赖,那么系统的结构将会非常清晰,这让修改变得容易,且会减少错误的发生
但系统的本质是一系列事物的相互关联,因此系统中的事物必然会有联系(否则这些事物的整体就不能称为一个系统),怎么办呢?
分层!
分层的本质是同层的内容之间可以互相作用,但对于不同层的情况,只许上层内容使用下层内容提供的抽象,下层内容不应知晓上层内容的存在(不同层间只允许单向依赖)
通过抽象简化系统(实际是让人避免迷失于细节之中,同时抽象能让依赖关系变得清晰)
延迟决策,让决策易于修改
没有人能一开始就做出最好的决定(因为人的思维能力有限,无法考虑到所有的情况,且未来总是难以捉摸)
使用灵活的架构,用上面提到的构建正交系统减少依赖的方式,让替换变得容易
曳光弹
先搭好骨架,让整个流程“跑”起来,再向其中添加血肉,不断完善
构建原型
“曳光弹”的前奏,先做出想要的东西的样子,让想象实体化,这将有助于更早发现问题
需注意的是原型是注定要被丢弃的!(不要在原型上修修补补,妄图将其变成最终产品)
根据问题选择合适的工具
之所以出现这么多工具是因为每个工具都有自己的不可替代性,找到最适合解决自己问题的工具再去着手解决问题
如果选的工具合适,也从侧面反映出你对问题有足够的了解。因此选择出合适的工具这一目的将迫使你更深入地了解问题,这让问题的解决有了更大的可能
估算
估算能让你更深刻地理解问题(为了估算你得知道问题究竟是什么,毕竟无依据的估算只是“瞎猜”)
通过比对估算结果与实际结果并反思,可以培养直觉思维能力