Categories
程式開發

代码只能说明它能做什么


本文最初发布于Marc Brooker的个人博客,遵循Creative Commons Attribution 3.0 Unported License协议,经原作者授权由InfoQ中文站翻译并分享。

代码只能说明它能做什么。这对计算机而言很重要,因为我们是通过代码告诉计算机做什么。对人来说,只要我们不需要修改或调试代码,这就没什么问题。不过,如果我们要修改或调试,问题就来了。从根本上说,调试是一种活动,通过修改程序使它的行为与它应该做的事情保持一致。这就需要我们知道程序应该做什么,而这是无法从代码中获得的。有时候这很简单:它崩溃了,它应该做的肯定不是崩溃。除了这种简单的情况外,发现意图就比较困难了。

当应该做什么很微妙时,比如在构建分布式系统协议时,调试就特别困难。我们在论文“数以百万计的微型数据库”中写到:

我们在代码审查、simworld测试和设计会议时经常回顾协议的TLA+模型,以解决Java代码或书面交流中的歧义。

问题在于协议的实现(在Physalia的例子中是Java代码),它既不完美,又过于具体。它过于具体是因为它需要完全确定。计算机需要这样,而协议本身也有一定的回旋余地。它过于具体还因为它必须处理诸如底层性能问题等规范未考虑的问题。

原文链接:【https://www.infoq.cn/article/rFk2PLEiTQTlccr9uZkZ】。未经作者许可,禁止转载。