最近在读 A Philosophy of Software Design, 即软件规划的哲学,记载下个人的了解吧。

作者 John Ousterhout 以为软件规划的最大目标,便是下降杂乱性。并经过自己的实践经验,沉淀了软件规划的原则以及技巧,然后利用下降杂乱性来指导软件规划的整个生命周期。

全书的总体目标主要有两个:

  • 了解/辨认杂乱性:“杂乱性”是什么意思,为什么重要,以及当程序具有不必要的杂乱性时怎么辨认?
  • 削减杂乱性:介绍可在软件开发进程中运用的技术,以最大程度地削减杂乱性。

一、杂乱性是什么

Complexity is anything related to the structure of a software system that makes it hard to understand and modify the system.

文中指出,杂乱性是指那些让体系难以了解或修正的与体系相关的任何事物

1.1 杂乱性造成的影响

作者以为,杂乱性一般经过三种方式表现出来,而这里的每一个都使得软件开发更为困难。

  • 改变扩大:指的是当需求对体系进行修正时,即使是小的改变也需求在多个当地进行修正,然后扩大了改变的影响。这种情况尽管费事,但只要清晰知道需求修正哪些代码,体系在完结改变后仍然能够正常工作。
  • 认知负载:涉及到了解和修正体系所需的心智本钱。高认知负荷会添加进行更改的本钱,但如果清楚知道需求阅读哪些信息,更改仍然有可能是正确的。这表明,即使体系杂乱,有足够的信息和指引也能够有效地进行修正。
  • 不知道的不知道:指的是在体系中存在的不确定性,使得开发者不清楚怎么进行修正,乃至不确定提出的处理方案是否可行。在这种情况下,仅有确保处理方案正确性的方法可能是阅读体系中的每一行代码,这极大地添加了修正的难度和不确定性。

其间改变扩大和认知负载大多情况下,咱们是能够获取详细的信息,并作出修正决策的。但不知道的不知道是最糟糕的。一个不知道的不知道意味着你需求知道一些事情,可是你没有办法找到它是什么,乃至是否只有一个问题。

1.2 杂乱性是递增的

Complexity isn’t caused by a single catastrophic error;

杂乱性不是由单个灾难性错误引起的。它是由小块堆积而成的。杂乱性的增量性质使其难以控制。能够很容易地压服自己,当前更改所带来的一点点杂乱性没什么大不了的。可是,如果每个开发人员对每种更改都选用这种方法,那么杂乱性就会敏捷累积。一旦积累了杂乱性,就很难消除它,由于修正单个依靠项或含糊性自身不会产生很大的改变。

二、杂乱性的原因

Complexity is caused by two things: **dependencies** and **obscurity**.

作者以为,杂乱性的原因主要有两个:依靠性和含糊性

  • 依靠性:当无法孤立地了解和修正给定的一段代码时,便存在依靠联系。不过,依靠联系是软件的基本组成部分,不能彻底消除。软件规划的目标之一是削减依靠联系的数量,并使依靠联系坚持尽可能简单和显着。
  • 含糊性:当咱们无法获取模块的重要信息时,就会存在含糊。比如:变量命名的不准确,杂乱函数缺乏注释,注释不精准,杂乱的规划不供给文档。

一起,这两个特性可能一起作用,比如,正是由于依靠性不清晰,然后导致含糊性的进一步加深。

杂乱性来自于依靠性和含糊性的积累。跟着杂乱性的添加,它会导致改变扩大,高认知负荷和不知道的不知道数。最重要的是,杂乱性使得修正现有代码库变得困难且冒险

三、怎么下降杂乱性

全文作者也列举了许多规划原则,如战术&战略编程,模块深浅封装、文档注释、变量命名、一致性、笼统等。

由于篇幅问题,这里仅介绍下方几点对我个人形象比较深刻的几点

3.1 战术&战略编程

  • 战术编程:关注于处理眼前的详细问题。
  • 战略编程:考虑整个体系的可保护性和可扩展性

作者强调,优异的软件规划需求平衡这两者,即在日常编程中不仅要注重立即的问题处理(战术),也要从全体上规划和规划(战略),以确保软件随时刻的开展仍能高效运作。

3.2 模块深浅封装

软件规划哲学:了解并下降杂乱性

模块的封装不该仅仅是表面上的,而需求深化考虑怎么躲藏内部完成的细节,一起供给清晰、简练的接口。

深封装强调在模块的规划中寻求“深度”,即经过少量强壮的概念和功能完成丰富的功能,而浅封装可能只是简单地躲藏了完成细节而未真正削减杂乱性。

3.3 一致性

一致性是下降软件杂乱性的要害原则之一。它要求软件的规划、完成及文档在风格和结构上坚持一致,包含编码风格、命名约定和规划模式等。

一致性能够削减学习和了解代码的难度,使得保护和扩展变得愈加容易。

3.4 不同的层,不同的笼统

软件通常被规划为多层结构,每一层都应该基于恰当的笼统等级工作。底层关注于详细完成和性能优化,而高层则应愈加关注业务逻辑和用户界面。经过在不同的层次选用不同等级的笼统,能够清晰地分离关注点,下降全体杂乱性。

当然,里面的一些规划思路和技巧还有许多,如注释早于编码、规划两次、变量命名等都是不错的规划思维

在这里,个人了解下降杂乱度能够总结为三点

  • 封装,削减依靠信息:封装躲藏细节,削减模块间依靠,简化体系杂乱性。
  • 供给准确有用的信息:清晰文档和注释帮助快速了解体系,削减误解。
  • 迭代和重构:经过迭代改进和定时重构保护代码清晰度和体系灵活性。

四、总结

这本书是关于一件事的:杂乱性。处理杂乱性是软件规划中最重要的应战

在本书的进程中,作者试图描绘导致杂乱性的根本原因,依靠性和含糊性,并给了咱们下降杂乱性的一些规划思维。

但知易行难,这个进程还需求咱们在日常中详细实践,咱们才能更好地了解和运用,而且可能咱们也会更新自己的规划哲学。

五、参阅链接