实验的方法与计算机技术

    对于一个非计算机科学专业出身的人来说,对计算机这门科学的总体感觉就是不成熟。我是物理学出身的,物理学是一门经过几千年发展出来的一门科学,每个理论都有一个严格的证明,同时有很多实验来验证这个理论。这个理论一旦成为一个物理学的理论,那几乎是可以在任何地方应用的。用计算机的术语来说,它的重用性很高。
    而对计算机来说,更多的是一种技巧性的东西,和物理学不一样的是,计算机研究的是设计一个世界,而不是认识一个世界。所以,有时候,它更多的是一种设计,或者说更像是一种艺术的创作。
    计算机科学从更高的层次上来说,更加的接近于数学,比如我们学的操作系统,他主要研究的是一个资源优化配置的问题,这在数学上和经济学上实际上有很成熟的理论,比如排队论,还有petri网络。这些理论可以从一个抽象与定量的角度来研究,而我们学的操作系统只是从一个定性的角度来研究这个问题。
    像物理学一样,计算机科学很好的利用了数学,但是,实验在计算机科学中并没有受到重视。更多的原因也许是代价的问题,我们要构造一个实验,可能要花费很长的时间。还不如直接写代码了。系统分析人员往往也是利用自己的经验,来设计系统。当是很多时候,经验是不可靠的,弥补这一不足的就是科学的实验。
    举个例子,在设计一个邮件发送系统的时候,邮件列表由不同的服务商提供,如果说每个邮件列表有50w个,一共有20个列表,一共有1000w的数据,这样数据库可能会很庞大,你也许会想到这样一个方案,把不同的列表保存在不同的数据库表中,这样就变成了20个表了,每个表50W,你很有可能会觉得这个注意是不错的,唯一的缺点是操作每个邮件列表可能会稍微变的复杂了一点,首先要找到数据表,然后再找数据,而且这样的数据库的设计也是不规范的,但这表面上看至少是个好主意,因为看来效率能大大的提高。如果你做个实验,就会发现,从1000w的数据里面读取50w的数据和从50W数据里面读取50W的效果是差不多的(当然要建立好索引),只是稍微的速度快了一点。不同的邮件服务商提供的邮件列表里面的邮件可能是有重复的,根据法律,你不能同时给email发送两封邮件,对放在同一个表中的设计,这个实现不是很难,但是对于分表的设计,这个难度就比较大了。这是我遇到的一个真实的问题,因为项目的设计人员想当然的认为更新,插入,查询1000w的表的效率要低很多倍,结果采用了不规范的数据库的设计,结果需求改变了以后,这个系统被做的相当的复杂。实际上,只要有一点点的实验精神,这样的错误就不会犯。当然,我们也可以从数据库的原理来解释这样的现象,但是人的知识都是有盲区的,用实验的方法验证自己的关键的设计,能让我们尽量的减少错误。
    做为一个物理学出身的程序员,我觉得应该把物理学中的一些研究方法,理念用到计算机科学上。在我的blog 中,我也会体现这样的观点:世界上的规律是相似的。
   
原文地址:https://www.cnblogs.com/niniwzw/p/1212525.html