Keep It Simple,Stupid!

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

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

  • 瞎扯KISS
  • 好文一篇
    • What does KISS stand for? (KISS代表什么?)
    • What does that mean? (KISS是什么意思?)
    • How will I benefit from KISS (我将从KISS原则中受益多少?)
    • How can I apply the KISS principle to my work (如何把KISS原则应用于工作中?)
    • Are there any examples of the KISS principle(有KISS原则成功案例吗?)
    • Does KISS only apply to java coding (KISS只适合于java编码吗?)
  • 总结

瞎扯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原则指导我们把复杂的事情经过分解后变得显然简单 .

转载于:https://www.cnblogs.com/yspworld/p/4029630.html

Keep it simple stupid相关推荐

  1. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  2. Simple NHibernate Architecture[from]

    原文地址:http://www.codeproject.com/aspnet/NHibernateArchitecture.asp Download source - 2,523.7 KB Intro ...

  3. HDU 1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x & ...

  4. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  5. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第六章 深入理解wi-Fi Simple Configuration...

    为什么80%的码农都做不了架构师?>>>    首先感谢各位兄弟姐妹们的耐心等待.本书预计在4月上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑 ...

  6. A simple class to play sound on netcf (part 2)

    在实际测试中发现上一片文章(A simple class to play sound on netcf)中介绍的播放声音的类在pda中运行正常,但却无法在pc中工作,简单分析了一下原因,发现是dll的 ...

  7. Simple Transformer:用BERT、RoBERTa、XLNet、XLM和DistilBERT进行多类文本分类

    作者 | Thilina Rajapakse 译者 | Raku 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]本文将介绍一个简单易操作的Transformers库- ...

  8. Matplotlib可视化散点图、配置X轴为对数坐标、并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib)

    Matplotlib可视化散点图.配置X轴为对数坐标.并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib) 目录

  9. Comprehensive anticancer drug response prediction based on a simple cell line drug complex network m

    Comprehensive anticancer drug response prediction based on a simple cell line drug complex network m ...

  10. Could not fetch URL https://pypi.org/simple/pip/

    Could not fetch URL https://pypi.org/simple/pip/ 解决办法 更换pip安装源头成阿里云或清华的 在Windows%appdata%/pip/pip.in ...

最新文章

  1. CentOS7在防火墙开启与关闭以及端口操作
  2. 初三女生学计算机专业,江西中专初三毕业学计算机专业适宜女生吗
  3. Java如何比较两个字符串(对象)是否相等
  4. spark on yarn 完全分布式_Apache Spark探秘:三种分布式部署方式比较
  5. 【vulnhub】靶机- [DC系列]DC9(附靶机))
  6. java将date类型转成yyyymmdd_java中的Date怎么转换成YYYYMMDD形式?
  7. 【华为云技术分享】当我们在谈论卡片时,我们到底在谈论什么?
  8. 对select标签中的option默认选中后端的数据
  9. 中文论文检索证明怎么开_论文检索证明是什么,如何获得呢?
  10. 关于以太网没有有效的ip配置问题解决方法
  11. 修改RAC中的私网地址导致CRS启动失败
  12. doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件。包含多项功能改进,及Bug修复。...
  13. idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理
  14. 评四女作家的×龙戏凤 (原版)
  15. 计算机组成原理第三章笔记---计算机功能与互联
  16. ColorOS 13流畅吗?看OPPO在系统上做了哪些升级?
  17. 什么是聚合路由器、聚合路由器有什么用
  18. Visitor(访问者)设计模式
  19. 素数总结(包含素数表)
  20. python中整数的长度_Python中正整数的位长度

热门文章

  1. 蓝桥杯知识点(大纲)
  2. 【自然语言处理】【实体匹配】PromptEM:用于低资源广义实体匹配的Prompt-tuning
  3. 未来新型计算机可分为哪三种,未来有可能引起计算机技术革命有哪几种呢
  4. 黑客是怎样入侵你的网站的
  5. Timer和counter
  6. 更多数学趣题:走迷宫
  7. 【Visual C++】游戏开发笔记三十八 浅墨DirectX提高班之六 携手迈向三维世界:四大变换展身手
  8. 推荐几个编程学习网站,你值得拥有!
  9. 【实战】在qgis上查看街景照片( go2streetview谷歌街景、go2mapillary)
  10. 我的世界空岛生存服务器制作,《我的世界》空岛生存地图玩法 教你如何安全度过前期生存下去...