《python之禅》中有一句话:
Simple is better than complex.
Complex is better than complicated.
直接的翻译帮助不大:简单比复杂好,复杂比难懂的复杂好。
我们尝试分析它的内在含义。
第一句的意思相对好理解:如果能够让结构简单一些,就尽量简单一些。
为什么?
因为简单的结构鲁棒性更强。
简单的结构适用性更广,在情况发生变化时,受到的影响也更小。
结构越复杂,说明考虑的具体情况越多,于是也就越难以应对外部情况的改变。
从英文角度来看,两个词都是同一个词根,ple和plex的意思相同,都是折叠的意思。字面分析,simple就是折一次,complex就是都折起来。这就是简单与复杂的区别。能少折几次,就少折几次。
第二句想表达的意思有两层:
- 复杂性是不可避免的。简单的结构可以解决很多非常本质的问题,但最终我们仍然必须解决具体问题。在掌握了第一句原则的基础上,处理复杂性就是编程的必备功课。complex在英文的使用中就是代表不可避免的复杂。
- 复杂性怎样处理。复杂性应当被封装起来,封装的复杂性应当有一个明确的接口。complicated的词根与complex也是一样,的plic与plex,从字面看差不多,全折起来代表复杂。但complicated是一个动词被动式作为形容词,给人一种被弄复杂了、故弄玄虚、故意把问题复杂化的感觉。
怎样把复杂的事物弄得更复杂?
通过把事物纠缠在一起而做到,这就是complicated。
总结一下
第二句的意思,在处理不可避免的复杂结构时,应当将复杂的模块封装起来,提供清晰明确的接口。
让能够简单的事物尽量简单,让不可避免复杂事物尽量减少纠缠,是一种功力的体现。应该说,很大程度上是一种超于编程之外的功力。