Files
nexus/sreweekly/markdown/239/03-abstractions-and-implicit-preconditions-zh.md

23 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 抽象与隐式前置条件
- **期号**: 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 工作原理的好处,就这样变成了一种负担。
*隐式前置条件*的问题在复杂系统中无处不在。我们无时无刻不在消费那些带有一整套前置条件的抽象,这些条件必须成立,抽象才能正确工作。去戳一个事故,你几乎总能发现一个隐式前置条件。一些我们甚至都不知道的事,一些必须始终成立的事,一些一直成立着的事——直到现在。
抽象让我们更高效,而且事实上,没有抽象,我们人类根本无法构建复杂系统。但我们必须在出问题时能够剥开层层抽象,去发现那个被违反的隐式前置条件。
## 关于《抽象与隐式前置条件》的一则评论