大道曰守,当时曰行¶
本文有三个目的:
- 作为这个专栏的一个引导:软件架构设计 - 知乎专栏
- 作为这个专栏的一个引导:《道德经》直译 - 知乎专栏
- 作为下一篇要写的Blog的一个引导
很多人看道德经有困难,讨论架构设计有困难,都源于对于战略和战术的问题没有认识。 战略是指导一个长远目标达成的所设定的计划和原则,战术是眼前立即要执行的方法和步 骤。如果从一个事后复盘的角度来看这个问题,战略所走过的路线,是所有战术路线的总 和。
但我们对信息的控制是有限的,比如你可以用1000字写下这条路线上一小段的战术,你就 没有办法同样用1000字写下整个战略路线的所有行为。
何况,你根本没有所有的信息。共享单车能不能盈利?没有人去做过,上帝都不见得知道 能不能。
所以,我们描述战略和战术的时候,用词可能一样,但表达的意思是不同的。
《道德经》中经常用“大”,“上”这样的词语表达这个概念。所以上仁不仁,上德不德,大 制不割。制定法律在你杀人的时候要你赔命,大的法律制定战略是希望你不要杀人,不是 希望你赔命。没有战略达不成目标,没有战术生存不下去。所以,大曰逝,逝曰远,远曰 反。谈道德经的时候,很多人动不动就希望拿着道德经说的东西往身上套,连基本问题都 解决不了,然后要不就变成玄之又玄的神来拜,要不就来个“都是些老古董在胡说八道”, 反正损之而益还是益之而损,其实没有什么区别。
同样,谈架构设计的时候,很多人谈“这里不是没有这个函数可以调吗?”,“那个函数不是 static的吗?”,“我这样不是也能跑吗?”,你这是要写这个程序,持续维护这个程序呢? 还是直接就用这个程序啊?
我们面对这样的人的时候,实在没有办法,最后就只能说“Show me the code”,但某些没 脑子的工程师还觉得这句话很酷。他们没有搞明白的是,到了给你说这句话的时候,已经 表示无法用“设计语言”来沟通了,这对沟通的双方都是伤害,如果Coding的成本低到我们 不需要设计,我们何苦要做设计?何苦要做架构?
所以,战略曰守,战术曰行。
让你走到医院去,不是让你中间尿急了不要上厕所。
让你在A,B两层中间加一层抽象C,不是说A,B,C不能有一个公共的库x。
战略不讨论无关紧要的操作细节,构架设计不讨论编码的时候必然会那样写的编码技巧。