「知识盲区系列」 带你了解 KISS 原则,此 KISS 非彼 KISS 💋啦~

简介: 「知识盲区系列」 带你了解 KISS 原则,此 KISS 非彼 KISS 💋啦~

前言


之前在开发的设计阶段,我经常喜欢把一个组件设计的很复杂:


网络异常,图片无法展示
|


这个时候我的leader和我提出了一个原则:KISS 原则,简单跟我们介绍了一下,大致的意思是就是我们要把组件设计的更简单,也对我年轻的想法表示理解,露出了长辈看待晚辈慈祥的目光。


于是,我打算去了解一下什么是 KISS 原则,就产生了这篇文章。


KISS原则


网络异常,图片无法展示
|


概念


我去搜索 KISS 原则的时候,关于该原则的起源众说纷纭:


  • David Mamet(大卫马梅)的电影理论
  • 美国洛克希臭鼬工厂的凯利.约翰逊(Kelly Johnson)
  • 美国军方的软件开发


但是这个不重要,重要的是领会其精神内核。


KISS 是英文 Keep it Simple and Stupid 首字母的缩写,意思是“保持简单和傻瓜”。


以下内容来自百度百科


KISS 原则是指产品的设计越简单越好,任何没有必要的复杂都是需要避免的。其最完美的案例是傻瓜相机,傻瓜相机操作简单,似乎连傻瓜都能利用它拍摄出曝光准确、影像清晰的照片来。


KISS 是一个描述性的原则,它认识到两件事情:


  • 人们通常喜欢简单的,容易学习和使用的事物。
  • 制造产品或提供服务的公司会发现简单对公司来说也有一个好处,因为这将缩短时间,降低成本。


虽然公司尝试站在用户角度使用这个原则之处的设计时间也许会更长,成本会更高,但其实际效果将会非常有利,因为从长远角度来看,容易学习和使用的产品或服务,其将来的生产和服务的成本将会大大降低。


各个领域的应用


以下内容来自百度百科


广告设计


广告创意必须简单明了、纯真质朴、切中主题,才能使人过目不忘,印象深刻。


广告大师伯恩·巴克认为:“在创意的表现上光是求新求变化、与众不同并不够。”杰出的广告既不是夸大,也不是虚饰,而是要竭尽你的智慧使广告信息单纯化、清晰化、戏剧化,使它在消费者脑海里留下深刻而难以磨灭的记忆。如果过于追求创意表现的情节化,必然使广告信息模糊不清,令人不知所云。


企业管理


  • 较简单的系统更容易构造、运行和维护;
  • 较简单的解决方法总是更具弹性、柔性;
  • 较简单的系统更便宜;
  • 较简单的系统更容易被更快地实现、获得更快的回报;
  • 较简单的方法使用者更喜欢;
  • 较简单的系统更容易分阶段地执行;
  • 较简单的系统更容易被使用者了解。


目标管理


  • 让它简单些,连笨蛋都看得懂
  • 好的目标不是越复杂越好,反而是越简洁越好
  • 符合 KISS 原则的目标都是关键的,而非包罗万象
  • 目标必须确定优先顺序,而关键的目标则是资源和努力的重心


网页设计


  • 网页的下载不要超过 10 秒钟
  • 尽量使用文本链接,而减少大幅图片和动画的使用(寒草理解不能
  • 操作设计尽量简单,并且有明确的操作提示
  • 网站所有的内容和服务都在显眼处向用户予以说明等


产品设计


KISS 原则是DFMA中最重要的一条设计原则和设计思想,几乎贯穿于 DFMA 的每一条设计指南中,减少零件数量是 KISS 原则在 DFMA 的主要体现。


一般来说,产品中的零件数量越多,产品制造和装配就越复杂和越困难,产品制造费用和装配费越高,产品开发周期也就越长,同时产品发生制造和装配质量问题的可能性越高。在确保实现产品功能和质量前提下,简化的设计、更少的零件数量能够降低产品成本,缩短产品开发周期,提高产品开发质量。高水平的机械工程师把复杂的东西设计得很简单,而低水平的机械工程师则把简单的东西设计得很复杂,此时也可以把 KISS 原则应用上。


对于机械工程师来说,减少零件数量、简化产品设计能够大幅减少工作量,一个零件在其开发周期中的任务包括零件设计、生成二维工程图、样品制作、零件试产、零件装配、零件质量和功能验证等等,无一不是繁重的任务。减少零件数量、简化产品设计对于工程师来说是看得见的实惠,能够让工程师把更多的时间和精力放在提高产品设计质量上来。


KISS 原则在编程中的应用


来源于每个程序员都应该了解:KISS:60年前美国军方的编程原则


当今的软件工程师和开发者们有个共同的问题,那就是他们总是慢慢地使得问题复杂化。 正确的做法应该是当开发者遇到一个问题后,把问题拆分成一个个能够明白的小块,然后进入编码阶段。


你需要先想好问题的解决步骤一共分为几步,然后再进入编码


而不是拿到需求后,就开始一边写代码一边去满足需求。这样做的好处就是你的代码会变的足够容易理解和足够清晰。


运用KISS原则,能获取到什么好处?


  • 你可以更好地解决更多问题。
  • 你将可以通过很少的几行代码去解决复杂的问题。
  • 你将可以产出高质量的代码。
  • 你将可以构建更大更易维护的系统。
  • 当新的需求来了后,你的代码将会更加的灵活,易于扩展、易于修改和重构。
  • 你将完成比你想象得更多的事情。
  • 你将能够工作在一个大型开发团队和大型项目中,因为所有的代码都是stupid simple。


如何把KISS原则用到我的工作中? 这里有几个简单的步骤可供执行,但有一定挑战。就像说起来的那么简单,keep it simple,主要是需要耐心,更多的靠你自己。


  • 要谦虚,不要认为自己是个天才。只有谦虚了,你才能真正达到超级天才的水平,即使不行,who cares!你的代码那么stupid simple,所以你不需要是个天才!
  • 将你的任务分解为4-12小时的子任务。
  • 把你的问题拆分成多个小问题。每个问题用一个或者很少的几个类来解决掉。
  • 保持你的方法足够小,每个方法永远不要超过30-40行代码。每个方法都应该只处理一个小小的问题,不要搞太多uses case进去。如果你的方法中有多个分支,尝试把他们拆分成多个小的方法。这样不仅容易阅读和维护,找bug也更快。慢慢的你将学会爱。
  • 让你的类也小点,原则和上面的方法是一样的。
  • 先解决问题,然后开始编码。不要一边编码,一边解决问题。这样做也没什么错,但你有能力提前把事情切分成多个小的块,然后开始编码可能是比较好的。但也请你不要害怕一遍遍重构你的代码。另外行数还不是为了衡量质量的标准,只是有个基本的尺子而已。
  • 不要害怕干掉代码。重构和重做是两个非常重要的方面。如果你遵循上面的建议,重写代码的数量将会最小化,如果你不遵循,那么代码很可能会被重写。
  • 其他的任何场景,都请你尝试尽可能的简单,simple,这也是最难的一步,但一旦你拥有了它,你再回头看,就会说,之前的事情就是一坨屎。


许多伟大的问题解决者(problem solver)都曾不是伟大的程序员,但他们却产出了伟大的代码!编程是为了解决问题,我们不只是程序员,我们不只生产代码,让我们一起成长为伟大的问题解决者。


对于 KISS 原则的感悟


我也是作为一个该原则的学习者,由于我之前喜欢加入一些花活儿使得组件更加复杂,所以不能说对这个原则一窍不通,只能说我啥也不是。但是通过学习其概念,我也会有一些自己的感悟。


我试图思考某些经典的案例得以成功是否也是源于其简单的设计,比如:


  • 苹果公司的产品和操作系统
  • 脑某金的广告
  • ...


可能冥冥之中都符合这个原则,使得他们有着空前的影响力,而我怎么在工作去用好 KISS 原则也是一个大问题,我想到的是几个方面:


  • 开发前准备工作
  • 组件职责设计
  • 工作流程


具体也是要和上面那些结合起来,从现在起我可能会努力不再热衷于一个强大的可以做更多事情的组件或者类,而去做能力的解藕和拆分,使其更简单易用,职责清晰。

我在想是否需要举一个实例:


之前在聊天的时候,说到一个这样的需求,比如一个表单组件,可能就是编辑器和新增器组件会用到它,但是如果查看器说不定也会需要信息展示。


我当时就提议:


给表单组件加一个 type 是 view,当组建的类型是 view 的时候,添加一个 css,把表单项的边框去掉并且 readonly 。


这个想法是不是听上去很诡异~


然而现在看,查看信息并不属于表单能力范畴,现在的我就会去增加一个 xxxLayout 组件了。


结束语


网络异常,图片无法展示
|


前端不只是技术,思想原则亦是软实力。这次结束语不扯有的没的啦,直接求关注,点赞,点赞关注是对我最大的支持。如果有问题或者不同见解欢迎留言讨论✨


资料:

相关文章
|
Linux Shell 网络安全
Debian10.7 自动化安装镜像制作
Debian10.7 自动化安装镜像制作
2173 0
Debian10.7 自动化安装镜像制作
|
1月前
|
人工智能 安全 测试技术
测试圈正在淘汰不懂“智能体插件”的人
2026年,大厂测试岗位正经历范式革命:JD普遍硬性要求AI Agent、MCP协议、Skill封装等能力。测试已从“验证功能”转向“验证智能体能力”,核心不再是写脚本,而是设计可复用的Skill、构建安全可控的Agent测试体系。新能力栈(Agent理解+Skill开发+MCP工程+质量架构)正在定型。
|
缓存 IDE 开发工具
Flutter Demo 的快速编译与运行
Flutter Demo 的快速编译与运行
588 15
|
存储 人工智能 移动开发
HTML5 游戏开发实战 | 五子棋
五子棋是一种家喻户晓的棋类游戏,它的多变吸引了无数的玩家。本章首先实现单机五子棋游戏(两人轮流下),而后改进为人机对战版。整个游戏棋盘格数为 15×15,单击鼠标落子,黑子先落。在每次下棋子前,程序先判断该处有无棋子,有则不能落子,超出边界不能落子。任何一方有横向、竖向、斜向、反斜向连到 5 个棋子则胜利。
24376 8
HTML5 游戏开发实战 | 五子棋
|
架构师 数据库 OceanBase
OceanBase的创始人是阳振坤
【8月更文挑战第8天】OceanBase的创始人是阳振坤
1122 62
|
机器学习/深度学习 数据采集 算法
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
有多种方法可以处理时间序列数据中的噪声。本文将介绍一种在我们的研究项目中表现良好的方法,特别适用于时间序列概况中数据点较少的情况。
810 1
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
|
数据可视化 数据安全/隐私保护 开发者
堪称最优秀的Docker可视化管理工具——Portainer深度解析与应用实践
【8月更文挑战第7天】在容器化技术日益盛行的今天,Docker以其轻量级、可移植性和灵活性的优势,成为了开发者和管理员的首选。然而,随着Docker容器的增多,如何高效地管理和监控这些容器成为了一个挑战。Portainer,作为一款开源的Docker可视化管理工具,凭借其直观的操作界面和强大的功能,赢得了广泛的赞誉。今天,我们就来深入探讨Portainer的使用技巧,看看你是否真的会用它。
882 0
|
消息中间件 Linux 测试技术
【xenomai3内核解析】系列文章大纲
该博客系列详细解析了Linux实时操作系统框架Xenomai,包括实时操作系统的概念、Linux为何非实时、嵌入式实时Linux方案等。内容涵盖Xenomai内核构建、组件结构、源码介绍、实时性测试及接口应用。此外,深入探讨了双核基石IPipe、系统调用、时间子系统、任务管理、同步与互斥、内存管理、信号处理、实时IPC、POSIX IPC、实时驱动模型RTDM、Rtnet、用户态实时库libcobalt和实时性能优化等方面。适合对Linux实时系统感兴趣的读者学习研究。
609 0
【xenomai3内核解析】系列文章大纲
|
Java Linux 数据安全/隐私保护
使用轻量服务器搭建我的世界联机服务器
本文最初版本写于2022-05-05,由于软件版本更新 某些细节可能变化,但本文仍具有参考价值 本文基于centos7系统,搭建的是java纯净版我的世界PC联机服务器,其他系统或者其他版本也可以参考本文 建议服务器最低配置2H4G,且不超过10人同时在线,如使用轻量服务器基本无需考虑带宽问题 本文使用MCSM面板开服
1313 1
使用轻量服务器搭建我的世界联机服务器
|
存储 算法 索引
【数据结构入门精讲 | 第四篇】考研408、企业面试表专项习题
【数据结构入门精讲 | 第四篇】考研408、企业面试表专项习题
964 0