软件设计的哲学
2026-02-07
软件设计
软件是“生长”出来的,复杂性不断积累和增长
如见的“设计”与“制造”是同时的,我们只能延缓复杂性的聚集速度,无法杜绝
改进:思考更轻量的设计,缓解复杂度的漫延
复杂性 = 依赖 + 模糊 =[导致]> 变更放大 + 认知负担 + 不知道未知
战术性编程 (快但是复杂度增速也快),战略性编程(前期慢,但是更容易有高质量设计)
模块/接口比实现简单,即使用者只需要知道少量(必须)条件下就能完成功能
模块深,代表方法定义简单但是实现的功能多
信息泄露:一个功能分解多步,每个模块都需要知道相同的信息
按知识设计而不是时序,减少信息泄露
软件设计的重要因素之一: 确定谁需要知道什么,以及什么时候需要知道
通用性 + 深模块 <= 提炼需求 + 知识分离
异常处理中,考虑重要性和感知性来决定是扩大函数能力(不抛异常)/ 统一处理 / 向上抛出异常
设计两次,第一感设计总会觉得很好,但是更好的设计需要额外思考
注释
方法或者接口的注释不应该详细说明实现,而应该说重点功能
注释要写代码不能表达出来的,否则没有意义
注释维护是一件苦力活,但是维护好很重要,能帮你在多个月之后看代码不疑惑
code
使用大家都认同的变量名很重要,同步的知识能大量减少知识负担
变量名太长,可能说明你没有做好抽象
设计模式不要生搬硬套,要符合契机再使用,不然事倍功半还不易理解
性能优化,要找到关键路径,做针对性的优化,同时做好回归测试
确定什么重要,什么不重要。专注重要的事情,减少重要的事情,就是减少认知负担
读完书,其中几个词汇雷击了我,如生长,认知负担。还有作者对
CleanCode书中一些观点提出了不一样的看法,我认为无关对错,每个人针对的领域与理解不同而已,适合我们的都是可以接受的,聚众家之长。 越发觉得软件设计就像对人生的设定,你觉得模糊是因为你对生活也模糊,如果你设计能力好的话,就应该知道 “减少认知负担,才能茁壮生长”的道理。
Last updated