昨天公司的软件被报告了一个bug, 我一查, 原来是由添加一个新的功能引起的. 新的功能解决了问题A, 但是在一个很隐秘的地方带来了问题B. 在我解决问题A的时候, 我是完全没有想到竟然会出现问题B, 而且测试也没有测出来. 但是问题B出现之后, 这一切又是如此地显而易见.
于是我手到病除地解决了问题B, 然后软件继续愉快地运行了.
作为一个有zhi青年, 当然不会只停留在这. 于是我想是不是之前的框架设计的不够好呢. 但是我发现, 很多时候, 你为了解决一个问题, 从而引发了另一个问题. 而系统就在不断解决问题的时候, 变得复杂, 甚至是难以维护.
这样做有问题吗? 有没有一个完美的解决方案?
...
以我现在的理解, 我认为是没有. 完美之所以称为完美, 就是说达不到那种状态, 我们只能去追求完美.
我想到了前几天看到的一篇文章: 人类身体里面的十个设计缺陷 Top 10 Design Flaws in the Human Body
它副标题是这样的: "From our knees to our eyeballs, our bodies are full of hack solutions."
里面提到了各种由于进化的原因, 人体自然产生的为了适应环境或生存而不得不产生的有缺陷的设计以及各种专家提出的解决方案. 文章很有意思, 解决方案更有意思. 比如说为了让脊椎更强更不容易受损疼痛, 专家建议我们可以借鉴狗的脊椎的设计, 并且回到爬行状态.
文中有句话我印象比较深刻, 大意是, 进化, 不会产生完美, 而只会产生实用的设计.
那么, 实用的设计算不算好的设计? 什么才是好的设计呢?
我认为, 设计, 首先是一个解决方案. 是要解决一个问题的.
而由于问题其实是一直在变的, 设计应该也是一直在变化, 在进化.
好的设计, 就是适应当前需求的优雅简单的解决方案.
最近在学习UX设计, 那么就以UX设计为例子, 好的UX设计, 其实也是cover了这些点的:
- useful (解决方案)
- usable (简单)
- desirable (优雅)
- findable (简单)
- accessible (适应)
- credible (好吧, 这个我是没想出来)
- valuable (解决了一个问题)
![](https://img.haomeiwen.com/i54194/324bcd4749c29c4c.jpg)
那么, 现在问题来了, 怎么才能产生一个好的设计呢?
反观人类身体的进化过程 (我认为人类的身体这么复杂, 能做这么多事情, 当然是一个很好的设计), 你会发现, 一个好的设计, 简化出来是这样来的:
- 试错: 通过交配来基因重组或者是基因突变来创新, 然后在环境中试错
- 反馈: 被环境选择, 得到反馈, 要么适应这个环境, 要么就是被环境淘汰
- 迭代: 重复1-2
其实, 大到物种进化, 小到自我发展, 都可以看成这样一种思路.
平时我们讲的软件工程, UX process里面的快速迭代, 精简创业等, 也是同样的道理.
当然, 这不是说随便创造一个东西出来, 让它去适应然后加各种hack, 各种补丁.
在我们设计的时候, 是要站在前人的基础上, 通过总结和反思, 去创新的.
而且, 一个好的设计, 比如软件的构架, 是可以在一定程度上去应对变化的. 软件工程里面不是有一句话么, 牢记唯一不变的就是变化
.
好的设计, 都是进化出来的, 而不是设计出来的.
而进化过程中, 必然会有那种野蛮残酷的淘汰.
就如功夫一样, 什么才是最强最好的功夫? 叶问做了解答: 功夫,两个字,一横一竖,错的倒下,对的站着。
就是这么简单, 粗暴, 野蛮, 有效.
万物, 野蛮生长.
网友评论