Keep it simple & stupid

Keep It Simple,Stupid!

  • 2010年04月03日21:46:36

KISS---保持简单,并且一目了然

瞎扯KISS

What's KISS, How to KISS. 哇,今天题目很劲爆,你想歪了吧.记得有一次我把K.I.S.S & D.R.Y做为我的QQ签名,有一位同学说这个签名很隐晦,然后给我来了个深入的剖析,没错,他想歪罗.然后呢,我跑题了.

KISS是计算机编程中的一个很有名的原则.全称是Keep It Simple, Stupid,或者是Keep It Stupid Simple,还或者是Keep It Simple And Stupid,又或者是Keep It Short and Simple.反正怎么变也少不了simple.

simple与stupid之间是否存在矛盾呢?简单的就是愚蠢的,愚蠢的就是简单的?那世界不是会乱套了.simple指的就是 *简单* 的意思,但stupid是不是 愚蠢 的意思呢?为了更好的理解stupid的意思,我们需要了解下KISS产生的背景.

Kelly Johnson提出了KISS原则,他是一个飞机工程师以及航空发明家,同时也是一个管理天才,他一生中主要设计了40多架飞机,获得的荣誉相当之多,总之,很牛.这个原则是对Johnson带领的设计工程师团队最好的例证,他们在设计飞机时,必须考虑到假如飞机在交战情况下出了故障,如何让普通的机械师修理飞机?这就是这个原则产生的历史背景.因此,stupid不是愚蠢的意思,而是指出故障的方式与修理故障的熟练程度之间的关系.

所以,我喜欢把KISS翻译为:保持简单,并且一目了然

很多人会说保持简单不就是代表还要一目了然呢?

其实不然,问你"おはようございます"是什么意思,对于日本人来说,这个太一目了然了,而其他国家的人看到这个目瞪口呆.它翻译成中文就是"你好",英语就是"hello",西班牙语是"hola"

.(){.|.&};. 这是一条bash命令,简单吧,命令中都没有一个字母,也就11个字符,不说谁看得懂这是啥东东.它就是fork炸弹,炸弹啊,很危险的,千万不要尝试.否则干脆点,重启电脑吧.

所以,简单不一定代表一目了然.在计算机编程中,就存在很多这种情况,有些coder总是喜欢炫耀自己的聪明才智,喜欢写耍小聪明的代码,也就是代码行数越少越好,最好一个函数一行代码,听起来很简单吧,可是一目了然吗?编写这种程序的家伙过段时间回去看代码会哭笑不得.

与KISS有异曲同工之妙的原则有:

  • "everything should be made as simple as possible, but no simpler"---爱因斯坦
  • "Simplicity is the ultimate sophistication"---达芬奇
  • "It seems that perfection is reached not when there is nothing left to add, but when there is nothing left to take away"---安东尼.德.圣-埃克苏佩里

好文一篇

在网站发现一篇关于KISS的好文,觉得写得很好,所以把它翻译成中文. 链接:Filip Hanik

What does KISS stand for? (KISS代表什么?)

KISS是Keep It Stupid Simple或者Keep It Simple, Stupid的缩写.

What does that mean? (KISS是什么意思?)

这个原则给我多年的软件工程生涯带来重要的,巨大的成功.软件工程师和开发人员的一个通病是他们倾向于高估复杂的问题.

通常当开发人员遇到问题时,他们会把问题分解成更好理解的更小的子问题,但是我敢说开发人员中的十有八九还是会犯错误,他们不能把问题分解成足够小,且易于理解的小问题.这将导致很简单的问题却有较复杂的方案,另外一个副作用是代码的膨胀,就像BASIC语言中到处充满了goto语句,Java语言中一个class有500-1000多行代码,每个class中的method包含好几百行代码.

这些代码块大都是对原始方案的例外情况的处理.如果开发人员把问题分解为更小,这些例外情况将会得到更好的处理.

How will I benefit from KISS (我将从KISS原则中受益多少?)

  • 你将会能够解决更多问题,并且速度更快
  • 你将使用较少的代码解决复杂的问题
  • 你将会写出高质量的代码
  • 你将能够构建易于维护的更大的系统
  • 当新的需要到达的时候,你的代码将会更加灵活,更易于扩展,修改以及重构
  • 你将会完成比你想象中更多的事情
  • 由于所有的代码简单,你将能够在大的开发团队胜任大的项目

How can I apply the KISS principle to my work (如何把KISS原则应用于工作中?)

有许多步骤可以遵循,有些相当简单,有一些具有挑战性.就像听起来那么容易一样,保持简单是耐心的问题,是否能使用该原则大部分取决于你自己.

  • 谦虚.别把自己想成是超级天才,这是最可能犯的第一个错误.保持谦虚,你最终会达到超级天才的状态,即使你没有做到,谁在乎呢.假如你的代码笨拙,简单,那么与它一起工作,你没必要是天才.
  • 分解大任务为一系列的子任务,这些子任务最多不需要你花4-12个小时来编码.
  • 分解大问题为许多小问题.每个问题都能够用一个或很少几个class解决.
  • 保持class中的method尽可能小,每个method不应该超过30-40行代码.每个method仅仅解决一个小小的问题,而不是很多的用例. 如果在method中有大量的条件语句,考虑把他们分解为多个更小的method. 这样做不仅代码易读性强,可维护性好,而且能够更快的查找bugs. 你将会喜欢在你的编辑器里使用右键进行重构.
  • 保持class尽可能小,同样的方法适合于我们这里描述的class中的method.
  • 先解决问题再编码,而不是其他的方式. 许多开发人员喜欢在编码的时候解决问题,这并没有任何错.事实上,你可以这样做并且仍然坚持上面的原则. 如果你在思想上有能力把事情分解成更小,无任如何,在编码的时候这样做吧,但是不要害怕反反复复重构代码.其最终结果是,代码的行数不是衡量质量的标准,当然除非你衡量标准为少代表好.
  • 不要害怕扔掉代码.重构和重新编码是两个非常重要的领域.当你遇到已经不存在的需求,或者你没有意识到你能找到比开始编写的代码更好地解决旧问题和新问题的方案,如果你遵循上面的建议,需要重构的代码已经最小化了.如果你没有遵循上面的建议,你可能需要重新编码.
  • 并且对于所有其他的情况,尝试尽可能保持简单,这是最难的行为模式.可是一旦你形成了KISS行为模式,当你回想时,你可能会说我不可想象我以前是如何工作的.

Are there any examples of the KISS principle(有KISS原则成功案例吗?)

存在很多使用KISS原则的成功案例,我将寻找一个真正很棒的案例张贴出来.同时,我乐意跟大家分享下面的一些想法:

世界上一些最伟大的算法中总是只有那么几行代码.并且当我们走查这些代码时,我们能够轻松理解它.这些算法的发明者对问题进行反复分解直到容易理解,从而使得他/她可以执行它.许多问题的解决者并不是伟大的编码人员,但是他们编写出伟大的代码.

Does KISS only apply to java coding (KISS只适合于java编码吗?)

绝对不是这样的,它适合所有其他编程语言,并且延伸到生活中的一些其他领域,KISS原则不适合于以下领域:情绪,爱情和最重要的婚姻:-)

总结

KISS原则目的:简单

KISS实现方式:逐步分解,直到不能再细分

所以KISS原则中的简单是:

'不需要译码'的简单

不能再简单的简单

一目了然的简单

大众化的简单

正如高中数学证明题中经常使用的显然成立,KISS原则指导我们把复杂的事情经过分解后变得显然简单 .

posted @ 2014-10-16 20:32  我喜欢旅行  阅读(1663)  评论(0编辑  收藏  举报