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

1.9 KiB
Raw Blame History

抽象与隐式前置条件

简介

抽象让我们更高效,而且事实上,没有抽象,我们人类根本无法构建复杂系统。但我们必须在出问题时能够剥开层层抽象,去发现那个被违反的隐式前置条件。

正文

Joel Spolsky 最让我喜欢的一篇文章是《泄漏抽象法则》(The Law of Leaky Abstractions)。他把这条法则表述为:

所有非平凡的抽象,在某种程度上都是有漏洞的。

抽象面临的挑战之一在于它们依赖于前置条件(preconditions):抽象要想成立,外部世界必须处于某种特定状态。有时抽象的消费者明确知道这个前置条件,但有时他们并不知道。毕竟,抽象的好处就在于它隐藏信息。NFS 让用户无需了解网络细节就能访问远程存储的文件——除非出现某种网络问题,用户就会被搞得完全摸不着头脑。不需要了解 NFS 工作原理的好处,就这样变成了一种负担。

隐式前置条件的问题在复杂系统中无处不在。我们无时无刻不在消费那些带有一整套前置条件的抽象,这些条件必须成立,抽象才能正确工作。去戳一个事故,你几乎总能发现一个隐式前置条件。一些我们甚至都不知道的事,一些必须始终成立的事,一些一直成立着的事——直到现在。

抽象让我们更高效,而且事实上,没有抽象,我们人类根本无法构建复杂系统。但我们必须在出问题时能够剥开层层抽象,去发现那个被违反的隐式前置条件。

关于《抽象与隐式前置条件》的一则评论