[ PROMPT_NODE_26082 ]
simplicity-vs-easy
[ SKILL_DOCUMENTATION ]
# 简单 vs 容易
## 核心区别
**简单(Simple)**和**容易(Easy)**不是一回事。我们经常混淆它们,这让我们付出了代价。
- **简单**:单一概念,不与其他概念交织。客观衡量标准。
- **容易**:触手可及,熟悉,相对于我们的能力而言。主观衡量标准。
容易会随着你的学习而随时间改变。简单则是绝对的。
## 为什么这很重要
当我们追求“容易”的解决方案——熟悉的模式、我们知道的框架、我们以前用过的抽象——时,我们往往增加了复杂性。容易的路径引入了与其他概念交织的概念。
简单的解决方案可能不熟悉。它可能需要思考。但它不会将应该分开的关注点编织在一起。
## 复杂化(Complecting)
“Complect”的意思是交织或编织在一起。
复杂性来自于将应该分开的概念编织在一起。每次我们将事物耦合在一起,我们就创造了复杂性。每一次耦合都是未来的一次调试会话。
简单意味着:
- 单一角色
- 单一任务
- 单一概念
如果你不能简单地解释它,它就太复杂了。
## 选择
在设计时,问自己:“我选择这个是因为它简单,还是因为它熟悉?”
熟悉让人感觉高效。简单*确实*高效——在代码的整个生命周期中。
**选择简单,而非容易。永远如此。**
## 外部参考
- [Simple Made Easy](https://www.infoq.com/presentations/Simple-Made-Easy/) - Rich Hickey 关于这种区别的经典演讲
- [The Value of Values](https://www.infoq.com/presentations/Value-Values/) - 关于不可变性和简单性的相关演讲