Blog

为什么我们写不出来精密的软件?

我的记忆力似乎从来就没有非常有效过,因此我不应该把事情寄托在脑力记忆上。前几天我看到周伟明写的文章《程序员的十层楼 第十层(下)》时,从上面对于海森堡的”测不准关系”的讲解让我联想到了那时正在看的《梦断代码 第0章》里面作者对于软件工程业界的发问:

…总共将会有160根这种大管子被打入海底,填上混凝土,支撑新桥的水上部分。整个过程设计精密、执行无误;它分毫不差,完全满足了我们对工程一词的信心。

关于软件缺陷的话题,只要谈上几分钟,必会有人拍案叹道,”为什么就是不能像造桥那样造软件?

当时脑袋里同时想着这两个问题,似乎隐隐约约的感到了一点联系。但总结出来的结论并不是我能完全证明的了或者讲清楚的,因此就没有写下来,打算等过一阵子再仔细思考。结果时间一下子到了今天早上,我洗澡的时候突然想起我有一个问题要思考的,但就是想不起来是什么问题了。我把头顶在浴室墙上,使劲的想才回忆起来。这算是比较幸运的,过去经常发生的情况是无论如何也想不起来,只好等哪一次电波能正好击中我的大脑刺激我在不经意当中想到吧。所以我决定有时间马上把当时的结论记录下来。

结论跟”测不准关系”有关。测不准关系用我的理解来描述就是过去、现在、和未来都是命中注定的。你下一秒钟将要做什么事情,是自宇宙诞生以来分子、原子的运动带来的结果。分子、原子按照一定规律运动,你做的事情也就因此而固定。在科幻作品里,有人可以突破时间的限制,到达过去或者未来。而他在过去或未来做了任何可以改变”现在”的行动,”现在”世界发生的变化也是注定的,因为他跨越时间段本身就是命中注定。因此通过观测未来来预测未来没有任何意义。

测不准关系和时间有关,而软件的运行又确确实实的也与时间有关。后来我学了一点state machine的知识,知道了软件就是随着时间点的变化而进行变化的几种状态。我理解的时间的一个特性,就是”测不准关系”。也就是说,凡是和时间有关的东西,它在不同时间段的状态都是不可预测的。软件就是这样的一种东西。在我们人来的视角来看,软件下一个时间单位会到达什么状态,从宏观上是不可预测的。无法预测,就意味着我们不能100%的控制一个软件的流程。

而造桥则与时间没有太大的关系,纯粹是空间上的部件的组合,而人类的视角基本上可以对空间进行完美的操控。因此,造出100%精密的桥则不是不可能的事情了。

没有评论

Leave a Reply