在《代码大全2》中5.2节中提到:软件的首要技术使命就是管理复杂度。计算机先驱Edsger Dijkstra指出,软件开发是唯一的一种职业,在其中,人的思维需要从一个字节大幅跨越到几百兆字节——跨越比例为九个数量级。从1989年以来软件变得更为复杂了,Dijkstra所说的九个数量级的跨度今天很可能已经变成了15个数量级。
现在的软件工程中的方法主要目的就是为了控制越来越复杂的软件。
“飘风不终朝,骤雨不终日。孰为此者?天地。天地尚不能久,而况于人乎?”(《道德经》第二十三章)
自然界中很多现象都是以循环的形式出现——昼夜更替、四季变换,以迭代的方式发展——万物生长、社会进步,我们作为人类的个体又怎么能期望一次就成功呢?
人是非常容易犯错误的,就算精明得像”Prison Break”中的男主角Scofield,同样也会一再地出现纰漏:)
随着软件复杂度的增加,系统的缺陷率会指数级地增长。而一个有效地方法就是采用增量式的迭代开发过程。
对于复杂的系统来说,为了不陷入在最后期限前一天由于集成而导致让机器和人同时崩溃的现象出现,迭代过程是一个不错的选择——至少目前来看是这样的。
“道生一,一生二,二生三,三生万物(《道德经第四十二章》)”,说明自然界的产生是一个迭代过程。
软件是自然界中人类智慧的产物,同样也是自然的产物。《大学》中说到“致知在格物”。所谓的“格物”指的就是研究自然界的各种现象,万物的发展,从而触类旁通成为智者。而软件工程本身是一个非常年轻的行业,所以很多的企业机构希望能从传统行业中汲取经验。但越来越多的人现在都发现,传统行业和软件行业存在着很大的差异。其实,从更大的范围看,我们又何尝不能从自然界中学习呢。
至于本段文字上方出现的鲜艳标题“银弹”,其结果可能让大家失望了。只有最终的一句话“人法地,地法天,天法道,道法自然”(《道德经第二十五章》)。
其他的一些说道
上次写了一篇《〈道德经〉中的“自组织团队”》,在网上引起了不少朋友的关注。想起来还是自己的虚荣心得到了极大满足。不过对于“道”的理解,我现在仍然是肤浅得很。
有个朋友对我说:“最好是不要太关注这些古文上的一些东西,更多的还是要实践”。很感谢他对我的直言不讳,事实情况也是这样的,尤其是软件工程这种实用性强的领域。不过关于国学这部分有很多对我们有用的东西,但研究的人还是比较少的。
说起实用性这点,让我想到了以前读的一本书《从道家到道教》(孔令宏 著)。里面提到了道与术的关系。具体讲起来比较复杂,并且随着历史的演化,这里面出现了很多有意思的事情,有兴趣的朋友可以去读一些这方面的资料。
总的说来,道与术是一个相辅相成的关系。单纯论道容易陷入空谈,单纯论术无法达到更高的境界。像目前有的一些茶道、花道、中医、气功等,都是道与术相结合的产物。
软件工程是一种术,怎样将软工这个“术”与“道”相结合,这就是我一直在考虑的问题。也希望能有更多的机会和各位交流,请教。
文章来源于领测软件测试网 https://www.ltesting.net/










