KISS理论不是一个感情方面的娱乐节目,而是编程领域里面很重要的设计思想。 电脑编程与其它方面的科学相比,总差了一些严谨性或者理论不是那么完善,很多理论都是基于猜想说话,而没有数据支持。不过KISS这个理论我是认同的,从某种程度上讲,KISS很像是奥卡姆剃刀原理,越简单越正确。
KISS是什么意思?这个就众说纷纭,也可见电脑编程之不科学。有人说是Keep it simple, Stupid!翻译过来就是,“简单点,傻瓜!”很有一些Nerd傲视群雄的气派,但是我喜欢翻译成“要简单,要尽量傻!”(也就是stupid翻译为形容词),理由后面会解释。在维基百科上http://en.wikipedia.org/wiki/KISS_principle介绍了KISS理论的一些相关概念,还有一些人名、链接什么的让你可以跑题。
为何KISS理论很有趣很重要?我个人感觉,KISS理论让人时刻牢记,人是傻的、或者说大部分都是傻的,而编程代码是给人看的,所以复杂代码复杂算法复杂函数都会导致后续维护的困难,从软件工程角度上说,编码阶段与后期维护阶段时间基本上是1:N的关系,越复杂的软件N值越大。
以前一个编程书籍阅读小组,想用UML来描述一个网页游戏的架构,结果对于一个类应该属于这个还是那个争吵不休,看了让人觉得很好笑。一个类属于A 还是属于B是不是很重要的事情?depends on,但是对于五五开的问题来说,真的没必要争论几天时间,还不如选一个简单的方案先实现出来。
还有常见的简单问题复杂化的例子是代码重用以及接口扩展。有些人觉得自己编程水平高,言必称重用。比如C语言没有类如何重用代码?都是似是而非的一些问题,连重用是什么这样基本概念都不知道,就敢张嘴乱讲,真真是2B了耶哥哥。接口扩展复杂化的例子在windows api里比比皆是,很多函数就在文档里指明,这个参数应该用NULL,这不扯么,都没有用的参数,当初怎么加进去的?!
程序员为什么喜欢把代码复杂化?当然是有原因的,首先一个就是让人看不懂,而未知的东西都让人有一种神秘感恐惧感,这样程序员就感觉自己对代码有掌控力,你们都不行就我知道怎么改,你敢让我走路么?!另外一个原因是,复杂化的概念让人觉得有价值,比如你看最近《程序员》上关于云计算的文章,国内这些砖家穴者都纷纷出来推崇云计算,但是文章内容毫无价值臭的跟狗屎一般,都是一些大词(big word)的堆砌繁衍。我在twitter上与程序员主编问过,他无奈回答是”商业需要“。另外一说数据库,一定是Oracle最好,开源的不可靠,为何?因为Oracle那多复杂,连调优都能整成一个赚钱的职业。
一个程序员要时刻牢记“简单化、傻瓜化”编程,代码要一目了然;长的函数要变短,要不怎么称得上简单;复杂的条件判断要分解,要不怎么称得上傻瓜化,太复杂还得用笔算是不是;至于变量名字,就越直白越好,比如bool IsThisGirlBeautiful(),这种函数一看就懂,连文档都不用写。