《软件设计的哲学》摘抄

软件设计的核心在于降低复杂性。


编写计算机软件是人类历史上最纯粹的创作活动之一。


改善设计技能的最好方法之一就是学会识别危险信号:信号表明一段代码可能比需要的复杂。


精美的设计反映了相互竞争的思想和方法之间的平衡。


如果一个软件系统难以理解和修改,那就很复杂。如果很容易理解和修改,那就很简单。


读者比作家更容易理解复杂性。如果您编写了一段代码,对您来说似乎很简单,但是其他人则认为它很复杂,那么它就是复杂的。作为开发人员,您的工作不仅是创建可以轻松使用的代码,而且还要创建其他人也可以轻松使用的代码。


变更放大:复杂性的第一个征兆是,看似简单的变更需要在许多不同地方进行代码修改。


认知负荷:复杂性的第二个症状是认知负荷,这是指开发人员需要多少知识才能完成一项任务。


未知的未知:复杂性的第三个症状是,必须修改哪些代码才能完成任务,或者开发人员必须获得哪些信息才能成功地执行任务,这些都是不明显的。


复杂性是由两件事引起的:依赖性和模糊性。


好的设计不是免费的。它必须是不断投资的东西,这样小问题才不会累积成大问题。幸运的是,好的设计最终会收回成本,而且比想象的要早。


在开发模块时,为了减少用户的痛苦,要找机会给自己多吃一点苦。


敏捷开发主要是关于软件开发的过程(组织团队,管理进度表,单元测试的角色,与客户交互等),而不是软件设计。


在项目开始时就不可能对复杂的系统进行充分的可视化以决定最佳设计。最终获得良好设计的最佳方法是逐步开发一个系统,其中每个增量都会添加一些新的抽象,并根据经验重构现有的抽象。


几乎每个软件开发组织都有至少一个将战术编程发挥到极致的开发人员:战术龙卷风。战术龙卷风是一位多产的程序员,他抽出代码的速度比其他人快得多,但完全以战术方式工作。实施快速功能时,没有人能比战术龙卷风更快地完成任务。在某些组织中,管理层将战术龙卷风视为英雄。但是,战术龙卷风留下了毁灭的痕迹。他们很少被将来必须使用其代码的工程师视为英雄。通常,其他工程师必须清理战术龙卷风留下的混乱局面,这使得那些工程师(他们是真正的英雄)的进步似乎比战术龙卷风慢。


设计两次:如果您想获得非常好的结果,那么无论您多么聪明,都必须考虑第二种可能性,或者第三种可能性。


保持战略编程,将注释保持在代码附近。

posted on 2023-05-18 10:03  dysjwang  阅读(17)  评论(0编辑  收藏  举报

导航