软件的简约与不简单

简约之美——软件设计之道

发布者: qingtian , 发布时间: 2023-09-13, 阅读量: 0 人次

前言

20230913

简约之美这本已经绝版的纸质书,是我今年早些时候在造易师上兑换的。一直放在公司的工位上,并未能翻阅。适时,总算有了些时间,就开始翻阅一二,而这就是本篇文章的由来。读《简约之美——软件设计之道》有感,依据书中的主要原则,条规,个人日常体会所形成的摘要式随笔。

软件设计的规则

作者从为什么不存在软件设计科学这个发问开始,再到软件设计的方程式,软件设计的三大误区,如何进行软件简洁设计,以及复杂度,测试等内容的介绍。

其中最重要的是总结的几大软件设计的规则,分别为:

  • 软件的目的是帮助他人。
  • 软件设计的方程式是:变化的合意程度(可行性) =(当前价值+未来价值)/(开发成本+维护成本)。
  • 变化定律:程序存在的时间越久,它的某个部分需要变化的可能性越大。
  • 缺陷定律:在程序中新增缺陷的可能性与代码修改量成正比。
  • 简洁定律:软件任何一部分的维护难度,反比于该部分的简洁程度。
  • 测试定律:你对软件行为的了解程度,等于你真正测试它的程度。

书末的附录,特别贴心地总结了以上6条软件设计的法则。

特别提醒:最重要的是要牢记软件的目的、软件设计方程式的简化形式以及简洁定律。

如果将书中最重要的事实综合成软件设计时要记得的两句话,就是:

  • 相对降低开发成本,降低维护成本更加重要。
  • 维护成本正比于系统的复杂程度。

一个软件的初始开发成本往往会成为程序员关注的重点,也是一个项目成功的关键问题。而对于软件的维护成本,随着大家后续新增功能越来越多,开发者们也越来越重视这方面的ROI。

书中的1个关键词:简洁设计即是解决降低维护成本这个问题的关键。越简洁的设计,复杂度越低;复杂度越低,越容易进行变更,迭代新功能,进而有效降低维护成本。

从设计的简洁性上来解决维护成本居高不下的问题确实是一种良策。日常工作中,我们也经常这么使用这种技巧。仅为实现单一功能,我们没必要实现大而全的庞大系统,随着业务需求的增长,随带进行局部变更来适应需求变化,这才是正途。而现如今火热的DDD领域驱动设计即是这样的一种思维模式。

软件设计的三大误区

书中另一个观点我印象深刻,即软件设计的三大误区:

  • 编写不必要的代码
  • 代码难以修改
  • 过分追求通用

编写不必要的代码, 一方面,现在就编写这些代码,却不知道该怎么用,等到你真的需要使用时,就得重新设计。另一方面,当前用不到的代码很可能会导致“劣化”,它很可能与系统其他部分脱节,继而产生Bug。

解决方案:

不要编写不是必需的代码,并且要删除没有用到的代码。

代码难以修改,就是僵化设计的代码。产生它们的原因主要有两个:

  • 对未来做太多假设
  • 不仔细设计就编写代码
解决方案:

设计程序时,应当根据你现在确切知道的需求,而不是你认为未来会出现的需求。

过分追求通用,这种做法就叫做:“过度工程”。在设计与构造上花费过多的精力。

解决方案:

仅仅根据目前确知的需求来考虑通用。

避免三大误区,还有一个根本性地办法,那就是:渐进式开发和设计。它要求按照特定顺序,一点一点地设计和构建系统。分步分而治之,即是其中的奥妙所在。但它其实也包含了设计规划,代码实现优化等多方面能力,对个人的软件架构设计,软件开发能力的要求更高。

后记

软件这一行就是这样,书越薄货越干,书越厚越具体与傻瓜。相对其他人读厚书,我更偏好薄书,特别是“图灵程序设计丛书”系列,当年在大学没少借书看。

书只是他人经验的引子,个人品味与应用,在实践中摸索与体会才是关键。幸好最近有代码设计场景可以一试,但愿能擦出火花,形成不一样的结果吧。