“天下皆知美之为美,斯恶已;皆知善之为善,斯不善已。故有无相生,难易相成,长短相形,高下相倾,音声相和,前后相随。是以圣人处无为之事,行不言之教。万物作焉而不辞,生而不有,为而不恃,功成而弗居。夫唯弗居,是以不去” ———《道德经》


小时候,常被人教诲,要扬长避短,于是就形成了一种思维定势:长处永远是好的,短处就永远见不得人。长大后读《道德经》,才有所明悟:长短相形,长无恒长,短无恒短。

屈原在《卜居》中说:“夫尺有所短,寸有所长,物有所不足,智有所不明,数有所不逮,神有所不通,用君之心,行君之意”。说的也是同一个道理,长和短是会相互转化的,做人做事,遵循你的内心就好了,如果要无所不用其极的想做好一件事,反而可能会取得相反的效果。

成为一名程序员是我从高中时代就有的兴趣和理想,经过各种曲折,终于是得偿所愿了,写代码确实给我带来了很多快乐和心灵的充实。随着时间的推移,我逐渐收获了编程带给我的另一种快乐:以编程悟道修心。我知道我说的这话玄而又玄的,很容易被人误解成一名「神棍」。当然,如果是跟我有相同感受的有缘人,能明白我说什么。不明白的也不用急,可以跟着我的思绪一起思考一下。

江湖中有一句流传已久的话:“PHP是最好的语言”。 绝大部分人是把这句话当作一句笑料,一种嘲讽,经常在各种场合来使用,当然也包括曾经的我。但是也有小部分人会问:“为什么PHP技术群里很少有人去探讨语法特性呢?” 。但是反观其他语言的技术群,比如C++,比如Haskell,聊的最多的就是语法。喷子请不要误会,我并没有要黑哪个的意思。

这其实是我思考的一个点:“PHP语法简单,是事实,没有那么多高大上的语法特性,可能相比于C++/Haskell/Ruby/Python等语言没有那么多思想内涵,从这个角度来看,这一点正是PHP的短板。可恰恰是这个短板,成就了PHP”。恰恰是因为PHP语法简单,没有那么多复杂的概念,没什么好讨论的,捋起袖子就是干,反而会更加聚焦于业务和领域层面的问题。

反观Golang语言也是类似,见过很多人吐槽Golang,也就那么一句:“if err != nil”, 或者说“golang怎么没有泛型?“,但实际Golang技术群里也很少有人讨论具体的语法,因为没什么好讨论的,就是那么点内容。Golang简洁的设计,是很多人眼里的短处,但其实也是它自身的长处。君不见,Golang社区生产力多么强?喷子请不要误会,我不是Golang社区派来的,目前我也没用Golang。

有一段时间,我对软件架构比较上心,还经常把软件和建筑去类比,甚至还找我做建筑行业的朋友去咨询,有哪些建筑方面的书可以阅读。朋友跟我说了一句话:”我们建筑行业,是绝不能出bug的,如果出了bug,付出的就是生命的代价。软件和建筑还是不一样的”。 我当时并没有对这句话有过多的考虑,只是觉得,不都是架构吗?我学习的是架构的「神」,又不是要学建筑,就没有进行深入的思考。

后来机缘巧合,又让我回到了这个问题上,这一次的思考让我有所明悟。建筑行业,正是因为要避免付出生命的代价,所以会在项目实施之前会做好非常详细的规划,艺术性和工程性都需要保证,然后还需要严格的监督才能交付一个完整的工程。而软件架构不一样,软件需求是经常变化的,软件架构在保证稳定的同时,还需要有一定的灵活性和可扩展性,这和建筑行业有本质的不同。

所以,瀑布模型在建筑行业,是极具优势的,因为它安全,但是拿来软件行业,就不一定了,除非是对安全有严格要求的项目。尺有所短,寸有所长,要看它所处的环境或领域去取舍,所以我们需要敏捷。

这种哲学性的思考,正如我前面所说的「悟道修心」,也是现阶段,编程所带给我的另一种乐趣。其实再往大了思考,整个人类的发展不也是这样吗? 人类的大脑计算速度比不过计算机,行动也只是线性的,从物理学方面考虑,人类简直就是渣渣,但是为什么能发展出高度发达的文明呢?正是因为这种限制,让人类拥有了抽象的能力,这种能力可以让人类简化万物从而对宇宙有更进一步的认知。宇宙有多少颗星星?我们不需要一颗一颗数,我们只需要找到规律做出预估就可以了。

再反观生活,又何尝不是如此?当你想做点事,但资源有限怎么办?其实没必要担忧,用有限的资源也许能做出更伟大的事呢?故有无相生,难易相成,长短相形,高下相倾,音声相和,前后相随。

永远不要给自己设限,永远不要害怕限制,与君共勉。