23 lines
1.9 KiB
Markdown
23 lines
1.9 KiB
Markdown
# 抽象与隐式前置条件
|
||
|
||
- **期号**: SRE Weekly Issue #239(2020-10-11)
|
||
- **作者**: Lorin Hochstein
|
||
- **链接**: https://surfingcomplexity.blog/2020/08/09/abstractions-and-implicit-preconditions/
|
||
|
||
## 简介
|
||
|
||
> 抽象让我们更高效,而且事实上,没有抽象,我们人类根本无法构建复杂系统。但我们必须在出问题时能够剥开层层抽象,去发现那个被违反的隐式前置条件。
|
||
|
||
## 正文
|
||
|
||
Joel Spolsky 最让我喜欢的一篇文章是[《泄漏抽象法则》](https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/)(The Law of Leaky Abstractions)。他把这条法则表述为:
|
||
|
||
所有非平凡的抽象,在某种程度上都是有漏洞的。
|
||
|
||
抽象面临的挑战之一在于它们依赖于*前置条件*(preconditions):抽象要想成立,外部世界必须处于某种特定状态。有时抽象的消费者明确知道这个前置条件,但有时他们并不知道。毕竟,抽象的好处就在于它隐藏信息。NFS 让用户无需了解网络细节就能访问远程存储的文件——除非出现某种网络问题,用户就会被搞得完全摸不着头脑。不需要了解 NFS 工作原理的好处,就这样变成了一种负担。
|
||
|
||
*隐式前置条件*的问题在复杂系统中无处不在。我们无时无刻不在消费那些带有一整套前置条件的抽象,这些条件必须成立,抽象才能正确工作。去戳一个事故,你几乎总能发现一个隐式前置条件。一些我们甚至都不知道的事,一些必须始终成立的事,一些一直成立着的事——直到现在。
|
||
|
||
抽象让我们更高效,而且事实上,没有抽象,我们人类根本无法构建复杂系统。但我们必须在出问题时能够剥开层层抽象,去发现那个被违反的隐式前置条件。
|
||
|
||
## 关于《抽象与隐式前置条件》的一则评论 |