简单与简洁

单是我们程序员经常说的一个词,前辈看到新手写的代码总会觉得臃肿复杂,而新手看到前辈写的代码又总觉得抽象复杂。当我们说「简单」的时候,我们想要表达的究竟是什么?极简又是什么呢?

机器语言是简单的,它的组成就是 1 和 0,它的内容就是高低电平的组合;自然语言是简单的,一个路人无论职业年龄性别,我们都可以交谈理解;物理实物是简单的,一颗苹果树,无论是什么语言的使用者,都看到树上的是苹果。但是,这三者之间彼此却是相互复杂的,以任何一者为主体,其它两者的「简单」都是复杂,因为这是一个试图自己去描述解释对方的过程。

前辈觉得新手写的代码复杂,是因为重复是复杂的,简洁是简单的;新手觉得前辈写的代码复杂,是因为抽象是复杂的,直接是简单的。简洁指的是什么呢?最小重复性,比如我们说「A 的问题;B 的问题;C 的问题」,这写在代码中就不够简洁,很明显我们有三个重复「的问题」,怎么写简洁呢?「X 的 Y」,X 是对象 A/B/C 的归类,Y 是对象的属性。归类是个抽象过程。

以人为主体,想要将代码写简洁,就必须归类抽象,将对象中的重复对称部分抽象出来。简洁一定是抽象的,而抽象是简单的吗?以人为主体,物理实物是物象,我们可以直接看到,它最简单;自然语言是具象,我们可以直接理解,它也简单;机器语言是抽象,它是我们的创造产物,我们无法直接理解,它最复杂。——简洁的流程。最先最简,简洁是抽象复杂不简单的。

为什么前辈会认为简洁是简单的呢?因为前辈以抽象(或者逻辑)为主体,所以前辈认为有重复的代码是复杂的。那什么是极简呢?人生活在物象,存在于具象与抽象之中。(物象?)抽象来说,机器都是简单的,人类是复杂的;但是具象来说,机器是抽象复杂的,人类是简单的。极简是基于物象的具象与抽象之平衡,也即简单与简洁的平衡。物理化一下,最小作用量原理。