【博文翻译】怎样让程序和社会更简单?
我们经常听到“KISS”原则,原意是说“坚持简单,傻瓜”(Keep It Simple, Stupid),但是说起来简单做起来难。从这么多年我学习程序语言课程、逻辑学、程序分析的基础上,我对保持程序的简单有了一些见解,下面我将分享一些我学到的重要经验。
什么让程序变得复杂
要明白什么让程序变得简单,从理解什么让程序变得复杂是一个好的主意。
复杂性意思是“熵”,而熵的大意可理解为“可供选择的数量”。如果你写一个函数去处理太多类型的输入,你很有可能让它变得复杂。
复杂性的一个很大来源是试图让不合理的东西变得合理。举个例子,比如你写一个函数返回字符串的第一个字符,但是有人用空指针去调用它,你怎么办?如果你“优雅地”处理了空指针,你将很有可能使你的程序变得复杂。空指针的第一个字符是什么?这根本就不合理。如果你坚持产生一些输出,你就可能返回一些其他不合理的东西(可能是其他的空指针)给你的调用者。这些不合理东西开始扩散和积累。
许多现代的编程语言提供一种“异常处理” 机制,让你能够从异常条件下“恢复”,比如空指针等等。在使用这些恢复机制的时候要小心。任何不确定的时候,不要尝试去恢复。因为如果恢复那些不合理的东西,你将允许更多的不合理情况发生。
严格坚持你的原则,违背原则直接崩溃
那么什么才是处理这种不合理输入的好方法呢? 崩溃!什么事情也不要做,崩溃的越彻底越好。在我们的例子中,崩溃可能使调用者(可能是你自己)明白永远不可以接受空指针作为输入,这将有效减少不合理输入的可能性。
你的函数应该坚持它的“原则” ,并且仅仅接受那些合理的东西。你没有义务去为调用者的错误负责。
真的这样吗?是的,这是我从多年的经验中学到的保持程序简单的最重要的方法。
捕获异常并停止
你怎么处理Java IOException之类的异常?我拥有一个叫做abort的工具函数,下面就是我怎么运用它来“捕获”JAVA异常的例子。
try {
// do something which may throw exceptions
} catch (Exception e) {
abort("Failed to ...") ;
}
我通常不去做任何事情去恢复执行,只是简单的给出一条信息并退出, 因为没有正确执行操作,所以做任何事情都是无意义的。跳过异常仅仅会使调用者增加更多不合理的东西到程序中使得程序变得更加复杂。因为JAVA混乱的设计,所以才有了一些异常的来历。我将用另外一篇博文去解释它们的来历。
程序之于社会
上面这个编程的方法同样对如何使得社会变得简单和和谐有同样的作用。
作为社会功能的部分,我们坚持原则很重要。一些社会因为人们试图去宽容他们不合理的“输入” 而变得复杂。结果就是这个社会没有人遵守交通法则并且法律难以得到执行。
编程中的方法同样适用与社会。通过勇敢的坚持自己的原则并且拒绝和违背原则的人合作,你将会让社会变得更简单也更好。

浙公网安备 33010602011771号