偶然看到一篇博客 Code, Picasso, and Simplicity,说的是他开始为了实现一个特性,写了300行代码,增加了大量功能,并且感觉自己的生产力非凡,当时内心很满足的。
但是,冷静下来发现,里面有一堆的技术债务让他感到焦虑,于是,决定开始重构!
重构是一种能力也是一种经验,重构做出的这些改变显然不是来自用户体验或者产品设想,而是深层次代码级别,细节问题的理解,多种潜在实现方案所展示出来的洞察。
最终,300行的代码实现的这个特性,经过不断的重构迭代只剩下50行,并且完全满足需求。
这个过程使他陷入了思考,
虽然最终的这个非常简洁的实现,看起来也是那么的自然而然,顺理成章,但是这却无法不通过大量的工作,尝试,能够从最开始直接做到!
这是一个很让人苦恼的事情,到底我们需要多少次努力和尝试,付出多少工作,才能足够理解,并能真正的简化它?
让我们的工作始终能从最简洁开始,而不需要反复理解,优化重构迭代,就像写作不需要打草稿一样?
这种方法或人真的存在吗?
像艺术一样简洁
惊讶的发现,这有点像艺术,毕加索曾说:
别人的画作经过不同的阶段最终面向完成,每天画一些新的东西,所以,一幅画是不断的添加的总和。
而我的画是一个破坏的总和,首先画出来一幅画,然后去破坏它,但最终,什么也没有丢失。
毕加索简洁的艺术,他曾用45天,画了11头公牛,最终画一头公牛只需要9条线!
这与我们简洁代码的工作异曲同工。
欣赏一下毕加索的公牛作品,
公牛。 1945年12月5日 - 1946年1月17日,图片来自:http://www.artyfactory.com/art_appreciation/animals_in_art/pablo_picasso/pablo_picasso.htm
作者最后提出了三个问题,我们一起来思考一下
- 你遇到过这样的情况吗?
- 如何缩短早期工作的耗时,有什么想法?
- 这是一种通过努力和经验就能做到,还是一个不断创造的过程,例如只有毕加索能用9条线画出公牛?
小结
你可能认为这是抽象,但其实这里要表达的是简洁的实现,抽象是达到简洁的一种手段,有时候也是具体的。
而简洁是没有止境的,不管是创作,还是熟能生巧,我们都需要尝试进一步深入实现的细节,找到像艺术一样的简洁,且富有想象力的表达!