KISS原理(翻译)

What does KISS stand for?

原文 https://people.apache.org/~fhanik/kiss.html

KISS 是“保持一个东西的简单,用起来傻瓜式的”英文(KEEP IT SIMPLE AND STUPID)缩写。

神马意思?

这个原则让我在做软件工程的这几年里获得了巨大的成功。今天,困扰广大软件工程师和开发人员的一个大问题就是他们要去克服复杂的问题。

通常,当一个开发者遇到一个难题时,他们几乎都会想到将他分解成更小的部分,以便于他们可以理解然后尝试用代码实现解决方案。 我想说的是他们分解的还不够小,对那小部分也理解不够深。这导致他们即使解决最简单的问题,也会使用非常复杂的实现。另一个副作用是产生面条代码(就是那种很乱的代码),我们可能只想到 BASIC 使用了 goto 就是面条代码了,实际上也包括在 Java 里那些包含500到1000行代码的雷。

This code clutter is a result of the developer realizing exception cases to his original solution while he is typing in code. These exception cases would have solved if the developer had broken down the problem further.
这种代码混乱是因为开发者在编写代码实现他们的解决方案的过程中意识到了很多异常情况需要处理。如果研发者分解问题更细,这些异常情况是可以解决的。

我如何从 KISS 原则中获益

  • 能更快地解决更多问题
  • 用更少的代码解决更困难的问题
  • 写出高质量的代码
  • 构建更大的系统,更容易维护
  • 代码更灵活,更容易扩展,当有新需求时更容易满足它们
  • 比想象的实现更多
  • 能在很大的项目中团队中工作

如何在我的工作中应用 KISS 原则

只需要几步, 非常简单,但是某些也是挑战。就像听起来的那样,保持简单,就是耐心的问题,主要是对你自己。

  • 谦逊,不要把自己想象成一个天才,这是第一个错误。谦逊了,你最终就能达到天才的状态,但即使不是,谁又在乎呢。你的代码是简单的,所以没必要是天才。
  • 把任务分解成子任务,足够小,小到你认为自己4到12个小时就能解决它。
  • 把你的问题分解的足够小,每个问题能用1各类或者非常少的类就能实现。
  • 保持方法足够小,小到只有三四十行,每个方法应该解决一些小问题,如果一个方法里有很多条件判断,把他们分解成更小的方法。不仅仅因为这样更容易读,更容易维护,而且也更容易找到bug。别忘了多使用重构功能。
  • 同样的类也要足够小
  • 先解决这个问题,有了方案,在写代码。而不是在写代码的过程中解决问题,这也没有错,事实上,你可以两种方式结合起来做。
    如果你能将一个事情分解的非常小,那就尽量在编码的时候去这样做吧。但是别害怕一遍一遍一遍的去重构你的代码。最终的结果才重要,代码更少当然更好
  • 不要害怕扔掉代码。当遇到不存在的需求,或者发现更好的解决方案时,删掉就代码吧。如果你遵照以上建议,重写的代码比会最少,如果不遵守肯定会有很多重写。
  • 在其他情况下也要尽可能的简单,这是最难的模式,但是一旦你坚持了,当回头看时,你会感叹当时是怎么写出来的呀。

有什么遵循 KISS 原则的例子吗?

有很多,我将会找一些放在这. 但是现在我先告诉你:

世界上最伟大的算法总是那些代码行数最少的一些。很容易理解. 算法的创建着把问题分解的足够小,足够简单,以便于可以用代码实现它们。很多伟大的问题解决者不是开发人员,但是却能写出伟大的代码。

KISS 只能应用于 Java

绝对不是,他可以一个用于各种其他的语言,甚至可以扩展应用到你生活的各个地方。
唯一的不能使用 KISS 原则的地方是:情感, 爱, 最重要的你的婚姻。


这篇文章是2016年写的,实际是直接把英文内容复制过来的,也不知到当时看没看完,一点印象都没有了。现在 2020年3月2日,翻译成了中文,感觉没什么高深了,就当练练翻译吧。

最后的 KISS 不能应用于 情感,爱,婚姻, 直接升华了,很棒。

其实这个就是说的 TDD,或者更先进说法 BDD。或者说 TDD/BDD 遵循了 KISS 原则,试图将问题提前分解,每次只去解决一个很小的问题。当然 TDD/BDD 包含了更多。