系统的混乱并非业务本身之复杂,我们并不擅长处理『简单』
前言
一群高智商青年在餐厅吃饭,餐桌上一个瓶盖标识为盐的瓶子里装得是胡椒粉,而标识为胡椒粉的瓶子里装得却是盐,他们想出了一个充满才气的方案来完成对调--仅需要一张餐巾纸、一根吸管和两个空碟子。当他们叫来服务员,准备炫耀他们的天才想法时,只见服务员什么也没说,只是拿起盐瓶和胡椒粉瓶,互换了瓶盖…… 在我们软件工程中,同样一件事情可以有很多种解决方案,我们翻开那继承下来的祖传代码,系统堆叠了太多它不需要或者它不适合的动态扩展、规则引擎、条件分支等等。原本并不复杂的业务最终得到的还是一片混乱,是我们的做法还是太过简单吗,或许本质上是我们并不擅长处理『简单』。本质复杂度与偶然复杂度
All software construction involves essential tasks and accidental tasks.
-- Frederick P.Brooks,Jr 《No Silver Bullet》
译:所有软件构建都包含其本质部分与偶然部分。
Despite all their heroics, overtime, and dedication, they simply aren't getting much of anything done anymore. All their effort is now consumed with managing the mess.我们经常遇到一个简单的业务诉求,但在老系统上支持就异常艰难。“在人离开的时候,自动把门关上”,但你永远不知道这个房间到底有多少门,同样你也莫名其妙会遇到,某些门关上后窗又碎了。 软件工程最大的成本在于维护,系统的混乱并非业务本身之复杂,简单的模块我们同样可能搞砸。为了未来可扩展,为了未来更灵活,我们不断YY着所谓的未来,却让现在越来越糟。
-- Robert C.Martin 《Clean Architecture》
译:不管你们多敬业、加多少班,在面对烂系统时,你仍然会寸步难行,因为你大部分的精力不是在开发需求,而是在应对混乱。
我们以复杂应对简单
诉求有时非常简单,但我们又岂会“甘于做一个执行器”,我们认为这背后一定有更深刻的业务诉求,一定有更本质的商业问题,一定有更底层的层次逻辑。于是我们摆摆手说道:这可没那么简单~‘复杂’的光环与‘简单’的暗淡
Simplicity has been difficult to implement in modern life, because it is against the spirit of a certain brand of people who seek sophistication so they can justify their profession.
-- Nassim Nicholas Taleb 《Antifragile:Things That Gain from Disorder》
译:在现实生活中,简单的做法一直难以实现,因为它有违某些努力寻求复杂化,以证明其工作合理性的人所秉持的精神。
『简单』其实更复杂
Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple。手机的HOME键是极简主义的一个代表,据说小圆点的设计灵感是受到马桶的启发,用一个按钮清除所有。 简单并不代表容易,简单意味着非联接,而非联接并不简单。在降低复杂度上,软件设计有一个核心理念叫“解耦”,核心思想是分离关注点,只有你聚焦的内容少了,你才不会觉得复杂。
-- Steve Jobs
译:简单比复杂更难,你必须尽力理清思路才能做到简单。
Keep it Simple and Stupid
-- Robert S. Kaplan
译:保持简单和笨拙
All the philosophy really boils down to one iron law, the hallowed ‘KISS principle’ of master
engineers everywhere.
-- Eric Steven Raymond 《The Art of Unix Programming》
译:所有的UNIX哲学浓缩为一条铁律,那就是各地编程大师们奉为圭臬的KISS原则。
遗失的奥卡姆剃刀
Entities should not be multiplied beyond necessity.奥卡姆剃刀也称为奥康定律,最先并非在软件界提出而是在哲学界。保持事情的简单性,抓住根本,去掉无关内容,是奥卡姆剃刀的核心观念。在软件设计中,每一次的抽象,都是在放大本质因素,消除无关因素。奥卡姆剃刀的缺失,也让我们的系统越来越复杂,我们总能发现有很多奇奇怪怪可有可无的代码,散落在系统各处,增加这些代码可能只需要几分钟,但移除这些代码花费的精力与承担的风险,却数倍于此。
-- William of Ockham 《Occam's Razor》
译:如无必要,勿增实体。
写在最后
小时候打台球,见到能翻袋,下底,长杆的人真厉害,幻想自己有一天能厉害到怎样难的球都能打进。长大后发现,真正厉害的人,母球永远不会轻易停在难打的地方。有能力解决复杂问题的人,我们给予掌声,而能够持续保持简单保持纯粹,应该得到更高的赞许。1、《Antifragile:Things That Gain from Disorder》:https://book.douban.com/subject/34978407/
2、《The Art of Unix Programming》:https://book.douban.com/subject/1229959/
3、《The Mythical Man-Month》:https://book.douban.com/subject/6039354/
4、《Clean Architecture》:https://book.douban.com/subject/26915970/