>[success] # KISS 原则
1. KISS 原则(`Keep It Simple and Stupid`),翻译过来就是:`保持简单,保持愚蠢`,也有人称**懒人原则**
2. 这个原则应用不仅仅是代码编程在各行各业都可以遵循
* **广告创意**必须简单明了、纯真质朴、切中主题,才能使人过目不忘,印象深刻
* **产品设计**产品中的零件数量越多,产品制造和装配就越复杂和越困难,产品制造费用和装配费越高,产品开发周期也就越长,同时产品发生制造和装配质量问题的可能性越高。在确保实现产品功能和质量前提下,简化的设计、更少的零件数量能够降低产品成本,缩短产品开发周期,提高产品开发质量
* **代码设计**,保持代码可读和可维护,代码足够简单,也就意味着很容易读懂,bug 比较难隐藏。即便出现 bug,修复起来也比较简单可维护性较好
>[info] ## 简单代码
1. 并不是**代码行数越少就越简单**,还要考虑逻辑**复杂度、实现难度、代码的可读性**,但如果问题本身就复杂的问题,用复杂的方法解决,并不违背 KISS 原则
* **防止代码腐坏**,当越来的多人进入项目中,开发和维护随着逻辑越来越复杂,代码逻辑开始变得渐渐难以维护,保持KISS 原则可以防止代码腐坏
* **减少时间成本的投入**,维护代码必然需要花时间修改、调试、理解内在逻辑并让代码正常运行,一旦代码非常复杂,势必会增加时间成本,保持KISS原则可以减少相应的时间成本
2. **简单≠简单设计或简单编程**,为了完成进度而做简单设计甚至不设计,认为只要后期有需要时再重构就行,编码时也就采用简单编程,并美其名曰迭代敏捷开发。但实际上,项目到后期几乎没有时间重构,并频繁出现问题(定位时间变长、逻辑嵌套过深、不断打补丁等),最后项目往往以失败告终。
3. **简单应该是让别人理解代码逻辑时更简单**
>[danger] ##### 编写简单代码
* **不要炫耀编程技巧**,不要使用同事可能不懂的技术来实现代码
* **不要长期进行打补丁式的编码**
* **不要重复造轮子,要善于使用已经有的工具类库**
* **不要简单编程。** 硬编码、一次性编码、复制粘贴编码、面向搜索编程都是简单编程,如果一直习惯性地简单编程,那么带来的可能就是更复杂、更高成本的重构和重写。这不仅不能提升代码扩展性,还会使得代码在后期无法被维护和重构。局部的简单导致整体的更加复杂,这是现在公认的一种得不偿失的做法。
>[success] # YAGNI 原则
**YAGNI** 原则的英文全称是:`You Ain’t Gonna Need It`。直译就是:你不会需要它。这条原则也算是万金油了。当用在软件开发中的时候,它的意思是:不要去设计当前用不到的功能;不要去编写当前用不到的代码。实际上,这条原则的核心思想就是:**不要做过度设计**,**在确定真的有必要的时候再写代码,那时再重构仍然来得及**
>[success] # 参考
[设计模式之美](https://time.geekbang.org/column/article/171771)
[趣学设计模式](https://kaiwu.lagou.com/course/courseInfo.htm?courseId=710#/detail/pc?id=6869)