Kelly Johnson提出了KISS原则。他是一个飞机工程师以及航空发明家,同时也是一个管理天才,他一生中主要设计了40多架飞机,获得的荣誉相当之多,总之,很牛。

这个原则是对Johnson带领的设计工程师团队最好的例证,他们在设计飞机时,必须考虑

到假如飞机在交战情况下出了故障,如何让普通的机械师修理飞机?

这就是这个原则产生的历史背景。

因此,stupid不是愚蠢的意思,而是指普通。

讲一个小故事:日本最大的化妆品公司收到客户抱怨买来的肥皂盒里面是空的,于是他们为了预防生产线再次发生这样的事情,工程师便很"努力辛苦"的发明了一台X-光监视器去透视每一台出货的肥皂盒。

而同样的问题发生在另一家小公司,他们的解决方法是买一台强力工业用电扇去吹每个肥皂盒,被吹走的便是没放肥皂的空盒。

做为IT行业,在平时遇到类似的事件会更多,如架构师做架构时,是以Stupid为原则?还是以需要180的智商才能理解为原则?开发同事写代码时,以其他开发同事很容易理解为原则?还是以程序可以运行就行,除了自己谁都别想看明白为底线?

几乎所有人都明白这个简单的道理,说出来没有人不懂,我们都知道KISS的好处,但为什么我们会做一些不KISS的设计?做一个不KISS的程序呢?

你想因为你的设计没有被很好的理解而半夜被人电话吗?你想因为你写的程序别人无法修改而被周末强制加班吗?当然不想,但为什么我们都这样做了呢?

因为我们没有真正了解我们的需求是什么,目标是什么。

为什么工程师会“努力辛苦”去发明一台X-光监视器,而不考虑使用电扇呢?可能被委派去发明监视器的工程师根本不知道自己发明的监视器是为了透视一个没有肥皂的肥皂盒。

另外一个原因是社会压力大、节骤快,导致时间碎片化,让我们更加需要KISS。想一下,你上次看微博是几小时甚至几分钟之前?而你上一次去看博客是几天甚至几周以前?

微博的到成功是因为运气好,是因为我们没有很长的时间去阅读一篇1000字的文章,大多数情况下我们也没有时间去阅读一个需要1小时才能理解的设计文档或类程序,而如果你这样做了,你的恶梦就开始了,或者已经开始了。

不要让人烦,不要让大家做功课。别指望他们愿意额外花些功夫去折腾你的东西。什么都不要指望,提供一个有用的东西就够了:把你的主要想法用一种方便理解、易于切入的形式呈现出来。如果你的想法很简单,但是描述却弄得十分繁琐、令人失望就不好了。挫折感是吞噬好想法的恶魔。

简单很好,但简单并不是少,比如写代码,3行代码能实现的逻辑如果用10行写肯定不好,不够简单,但如果写成了1行,同样会不够简单。因为这行代码包含了太多的内容,因为几个月以后你自己再看,都有想哭的感觉。这是什么意思!这是另外一种复杂,隐藏的复杂,比直观的复杂更害人。

我理解的KISS就是简单,不需要解释的简单,普通的简单。

SO,让我们开始KISS。

Keep It Simple Stupid!

Keep It Simple Stupid!的更多相关文章

  1. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  2. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  3. WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION

    开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...

  4. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MBSubmit: 1594  Solved: 520[Submit] ...

  5. Le lié à la légèreté semblait être et donc plus simple

    Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...

  6. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  7. 设计模式之简单工厂模式Simple Factory(四创建型)

    工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...

  8. HDU 5795 A Simple Nim 打表求SG函数的规律

    A Simple Nim Problem Description   Two players take turns picking candies from n heaps,the player wh ...

  9. 关于The C compiler "arm-none-eabi-gcc" is not able to compile a simple test program. 的错误自省...

    在 GCC ARM Embedded https://launchpad.net/gcc-arm-embedded/ 上面下载了个arm-none-eabi-gcc 用cmake 编译时 #指定C交叉 ...

  10. A Simple OpenGL Shader Example II

    A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes f ...

随机推荐

  1. C++ 内存的分配方式 (摘选自网络)

    在c++中有三种分配内存的方式: 在许多大大公司在面试的时候很可能考到的内容.在这里和大家分享了!1. 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量.常量.2. 栈上分配 ...

  2. opengl

    基于OpenGL ES的GLfixed类型使用 OpenGL ES中引入了GLfixed类型.这个类型一般被定义为int,32位.高16位表示整数部分,低16位表示小数部分.由于其整数部分和小数部分所 ...

  3. 使用Nginx镜像代理.NET Core MVC

    1.获取microsoft/dotnet镜像 docker pull registry.cn-hangzhou.aliyuncs.com/cjx/tutorial 如果有问题确认已经使用阿里云镜像加速 ...

  4. UVa 1354 天平难题 Mobile Computing

    整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计 ...

  5. sqlserver创建,调用 带返回值存取过程

    <1>create: ALTER  proc [dbo].[common_proc] @sql1 varchar(5000), @sql2 varchar(5000) OUTPUT as ...

  6. mvc Razor 视图中找不到 ViewBag的定义

    在Razor 视图中,我们有时会看到 ViewBag.Title 下会划一个红线,当鼠标放上去的时候会提示这样的一个错误: 找不到编译动态表达式所需的一种或多种类型,是否缺少引用? 但在项目启动运行时 ...

  7. Linux SSH,FTP服务配置

    CentOS-6.4-x86_64-minimal 0.网卡配置 参考:Linux系统\Centos没有网卡eth0配置文件怎么办? - http://jingyan.baidu.com/articl ...

  8. 阿里巴巴Java招聘

    大家好: 我是阿里巴巴B2B的应用架构师,现在大量招聘Java工程师,对自己技术有信心的兄弟姐妹,请联系我吧. 版权声明:本文为博主原创文章,未经博主允许不得转载.

  9. 【Python全栈笔记】07 [模块二] 20 Oct 冒泡排序

    给出一个列表,进行冒泡排序 原理算法: li = [52, 37, 23, 11, 3, 1, ] print(li) # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 # 一共循 ...

  10. UNICODE

    // "; var i,j; var prevPage = -1; var nextPage = -1; beginId = setList[index].begin / 16 * 16 + ...