“尽早失败”是什么意思,在什么情况下这种方法最有用,你什么时候避免这种方法?
5 回答
“Fail Early”意味着如果出现问题,程序应该引发异常并停止工作。(在实用程序员的提示列表中描述为Crash Early)
在我的生物信息学工作中,我倾向于使用“早期失败”的方法,因为我最关心的是确保正确性。相比之下,Rails 允许您隐藏故障。例如,Railstry
允许您在对象上调用某些东西,如果该对象是nil
. 我想这是因为对于网站,确保程序继续运行比正确性更重要。
早期失败体现了这样一种想法,即在构建软件时,您越早失败或测试失败,或者您发现错误就越容易纠正(而且成本也更低)。它也适用于您的商业模式。最好尽早发现(例如,在测试版中)而不是在发布之后。
我曾经有一个初级甲骨文程序员为我工作,他在他的所有代码周围放置了一个“忽略一切”异常块,因此永远不会出现错误。这最初使他的代码看起来令人印象深刻,但是: A)错误需要更长的时间才能找到;B)在那之后,我对他的能力失去了所有(嗯,80%)的信心。
从那以后,我告诉人们这是一件非常糟糕的事情,因为它隐藏了错误。
不要将此与能够处理低质量输入的代码模块混淆(例如 HTML,它在浏览器中也不是有效的 XHTML)——这些根本不需要导致失败。更有可能的是,它们在多年前确实导致了故障,但解决它的方法是让系统对如何恢复做出合理的假设。
这意味着:“尽早发现错误”。如果可能的话,你想知道他们一到那里就知道他们在那里=)。
越早发现错误,删除它的成本就越低。如果您能在编写错误行的时候就知道错误,那就太棒了。您将确切地知道您打算做什么,并且最有能力快速删除该错误。
另一方面,如果你只是在一个月后发现错误,或者在它发布之后,损失会大很多。用户已经不得不处理它,你不会记得你在想什么(或者你可能不再为公司工作,所以需要有人找出你的想法)。