软件设计的哲学


2026-02-07

软件设计

  • 软件是“生长”出来的,复杂性不断积累和增长

  • 如见的“设计”与“制造”是同时的,我们只能延缓复杂性的聚集速度,无法杜绝

  • 改进:思考更轻量的设计,缓解复杂度的漫延

  • 复杂性 = 依赖 + 模糊 =[导致]> 变更放大 + 认知负担 + 不知道未知

  • 战术性编程 (快但是复杂度增速也快),战略性编程(前期慢,但是更容易有高质量设计)

  • 模块/接口比实现简单,即使用者只需要知道少量(必须)条件下就能完成功能

  • 模块深,代表方法定义简单但是实现的功能多

  • 信息泄露:一个功能分解多步,每个模块都需要知道相同的信息

  • 按知识设计而不是时序,减少信息泄露

  • 软件设计的重要因素之一: 确定谁需要知道什么,以及什么时候需要知道

  • 通用性 + 深模块 <= 提炼需求 + 知识分离

  • 异常处理中,考虑重要性和感知性来决定是扩大函数能力(不抛异常)/ 统一处理 / 向上抛出异常

  • 设计两次,第一感设计总会觉得很好,但是更好的设计需要额外思考

注释

  • 方法或者接口的注释不应该详细说明实现,而应该说重点功能

  • 注释要写代码不能表达出来的,否则没有意义

  • 注释维护是一件苦力活,但是维护好很重要,能帮你在多个月之后看代码不疑惑

code

  • 使用大家都认同的变量名很重要,同步的知识能大量减少知识负担

  • 变量名太长,可能说明你没有做好抽象

  • 设计模式不要生搬硬套,要符合契机再使用,不然事倍功半还不易理解

  • 性能优化,要找到关键路径,做针对性的优化,同时做好回归测试

  • 确定什么重要,什么不重要。专注重要的事情,减少重要的事情,就是减少认知负担

读完书,其中几个词汇雷击了我,如生长,认知负担。还有作者对CleanCode书中一些观点提出了不一样的看法,我认为无关对错,每个人针对的领域与理解不同而已,适合我们的都是可以接受的,聚众家之长。 越发觉得软件设计就像对人生的设定,你觉得模糊是因为你对生活也模糊,如果你设计能力好的话,就应该知道 “减少认知负担,才能茁壮生长”的道理。

Last updated