「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

60 年前美国军方的这个编程原则,造就了多少伟大的框架

2020 年 6 月 20 日

60年前美国军方的这个编程原则,造就了多少伟大的框架

大约在 60 年前,美国军方的软件开发开始遵循一个原则,叫 KISS 原则。他们希望武器系统中所用的每个指令都是极其简单和傻瓜式的。这个原则后来在编程领域中被广泛采用,如今好多著名的开源框架都是遵循这一原则来开发,并最终取得了巨大的成功。


在上一文中《Apache的架构师们遵循的30条设计原则》,第一个原则便是 KISS 原则,几年前简单的了解过这个原则,前几日又翻出来,仔细查看后,倍感震惊,这篇原文可以说道破了编程的天机。以下原文的翻译(原文链接请点击文末“原文阅读”):


KISS 表示的是什么?

KISS 是 Keep It Stupid Simple 或 Keep It Simple,Stupid 的缩写。


KISS 的含义

该原则在我的多年的软件工程生涯中取得关键、巨大的成功。当今的软件工程师和开发者们有个共同的问题,那就是他们总是慢慢地使得问题复杂化。正确的做法应该是当开发者遇到一个问题后,把问题拆分成一个个能够明白的小块,然后进入编码阶段。但我会说,10 个开发者中有 8 个或 9 个都没有把问题分解成足够小或可以理解的足够小的部分。这就导致了即使是一个非常简单的问题最后也变成了非常复杂的实现,另外一个副作用就是意大利面代码,在 BASIC 里只是一个 goto 语句的事情,在 Java 中却需要 500 到 1000 行代码,每个方法都有几百行代码。


你需要先想好问题的解决步骤一共分为几步,然后再进入编码。而不是拿到需求后,就开始一边写代码一边去满足需求。这样做的好处就是你的代码会变的足够容易理解和足够清晰。


我们能从 KISS 中获取到什么好处?

  1. 你可以更好地解决更多问题。

  2. 你将可以通过很少的几行代码去解决复杂的问题。

  3. 你将可以产出高质量的代码。

  4. 你将可以构建更大更易维护的系统。

  5. 当新的需求来了后,你的代码将会更加的灵活,易于扩展、易于修改和重构。

  6. 你将完成比你想象得更多的事情。

  7. 你将能够工作在一个大型开发团队和大型项目中,因为所有的代码都是 stupid simple。


我如何把 KISS 原则用到我的工作中?

这里有几个简单的步骤可供执行,但有一定挑战。就像说起来的那么简单,keep it simple,主要是需要耐心,更多的靠你自己。


  • 要谦虚,不要认为自己是个天才,这是你第一个误解。只有谦虚了,你才能真正达到超级天才的水平,即使不行,who cares!你的代码那么 stupid simple,所以你不需要是个天才!

  • 将你的任务分解为 4-12 小时的子任务。

  • 把你的问题拆分成多个小问题。每个问题用一个或者很少的几个类来解决掉。

  • 保持你的方法足够小,每个方法永远不要超过 30-40 行代码 。每个方法都应该只处理一个小小的问题,不要搞太多 uses case 进去。如果你的方法中有多个分支,尝试把他们拆分成多个小的方法。这样不仅容易阅读和维护,找 bug 也更快。慢慢的你将学会爱。

  • 让你的类也小点,原则和上面的方法是一样的。

  • 先解决问题,然后开始编码。不要一边编码,一边解决问题。这样做也没什么错,但你有能力提前把事情切分成多个小的块,然后开始编码可能是比较好的。但也请你不要害怕一遍遍重构你的代码。另外行数还不是为了衡量质量的标准,只是有个基本的尺子而已。

  • 不要害怕干掉代码。重构和重做是两个非常重要的方面。如果你遵循上面的建议,重写代码的数量将会最小化,如果你不遵循,那么代码很可能会被重写。

  • 其他的任何场景,都请你尝试尽可能的简单,simple,这也是最难的一步,但一旦你拥有了它,你再回头看,就会说,之前的事情就是一坨屎。


有没有一些 KISS 原则的例子

太多了,以后我会把一些不错的案例 po 到这里。但现在我想先给你一些我的观点和想法:


世界上的很多伟大的算法几乎总是有很少的数行代码。当我们去看这些的时候,会发现很容易理解。这些算法发明者,他们把问题拆分,直到容易理解的程度,然后去实现它。


Many great problem solvers were not great coders, but yet they produced great code!


许多伟大的问题解决者(problem solver)都曾不是伟大的程序员,但他们却产出了伟大的代码!


KISS 只能用于 java 代码?

显然不是,它可以用于很多编程语言,并且甚至可用于你生活的其他的领域。当然不能用于你的感情、爱,更重要的是,不能用在你的婚姻上。


2020 年 6 月 20 日 18:37560

评论

发布
暂无评论
发现更多内容

28天瞎写的第二百三十二天:转角遇到蚵仔煎

树上

28天写作

h-index

lidaobing

28天写作 h-index

提词器来了 | 视频号28天(23)

赵新龙

28天写作

Soul 源码阅读 06|Nacos 同步数据分析

哼干嘛

CSS(八)——CSS盒模型

程序员的时光

程序员 前端 七日更 28天写作

字节跳动:“挖”出来的技术战斗力

李忠良

28天写作

GTX1060安装TF2-GPU

IT蜗壳-Tango

七日更

回到过去就能无憾了吗?「幻想短篇 22/28」

道伟

28天写作

Cisco路由器调试命令大全,看完就全部学会!

【Node.js】事件触发器 - 基础篇

学习委员

Node 28天写作

程序员面试时一定要注意这五个陷阱!你记住了吗?

Java架构师迁哥

开发质量提升系列:系统建起来就能解决项目的困难?

罗小龙

最佳实践 方法论 28天写作

webpack | plugin机制详解

梁龙先森

前端 前端工程化 webpack 28天写作

《程序员修炼之道》- 务实的方法(4)

石云升

28天写作 程序员修炼之道 程序员的务实

管理笔记[1]:成为管理者的开端“以人文本“

俊毅

创业失败启示录|神奇的茶学

青城

28天写作 创业失败启示录 青城

老同学遭遇电信诈骗纪实

石君

28天写作 电信诈骗

机器学习·笔记之:Gradient Descent

Nydia

资本市场两极分化将是新常态

JiangX

28天写作

使用nodejs构建Docker image最佳实践

程序那些事

Docker nodejs 程序那些事 docker image nodejs和docker

不做负面情绪的奴隶,活成自己的小太阳

Ian哥

28天写作

Elasticsearch 是分布式文件存储么 ?

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

浅说 SQLite 的许可证模式

Justin

版权保护 开源代码 28天写作

苹果设备电池及充电周期

张老蔫

28天写作

架构解读丨Volcano作业资源预留设计原理

华为云开发者社区

批处理 Volcano 资源预留 作业资源预留

JS 防抖与节流

旗袍码农

团队建设,凝聚人心打胜战

一笑

管理 团队建设 28天写作

半导体芯片小白基础知识(1) (28天写作 Day22/28)

mtfelix

芯片 半导体 集成电路 28天写作

MapReduce练习案例4 -求共同好友

小马哥

大数据 hadoop mapreduce 七日更

14天1000+大集群滚动升级,银行柜台竟然毫无感觉

华为云开发者社区

大数据 金融 FusionInsight 华为云 集群

架构师训练营第 2 期 第 6 周 作业一:CAP原理.md

老坛酸菜

架构师训练营第2期

60年前美国军方的这个编程原则,造就了多少伟大的框架-InfoQ