模型观

Robert Sedgewick/Kevin Wayne的《算法》一书中,

强调了科学方法,


细致的观察真实世界的特点。

根据观察结果提出假设模型

根据模型预测未来的事件。

继续观察并核实预测的准确性。

如此反复直到确认预测和观察一致。


可是,

我们永远也没法知道某个假设是否永远正确

我们只能验证它和我们的观察的一致性。


爱因斯坦说,

再多的实验也不一定能够证明我是对的,

但只需要一个实验就能证明我是错的。


科学方法可能大家都很清楚,

但是遇到具体问题,

人们却容易忽视它。


实践是检验真理的唯一标准,

大胆假设,小心求证,

建立正确的模型观

可以少走很多弯路。


模型与目标系统

我们经常混淆模型目标系统的区别,

把符号“1”,“2”,“3”,...

当做数学对象中的自然数本身。


这只是用印刷符号对自然数进行建模,

实际上还有不同的模型,

除了阿拉伯数字,还有罗马数字,中国筹,等等,

甚至还有Church number。


这个世界上并没有本质的道理

因为,我们无法验证什么是绝对正确的。


我们只能拿着模型来进行假设

然后通过实验验证它的准确性。


使用模型,我们可以从不同侧面,

对目标系统进行研究。


模型的发展与多样性

对观察结果提出的模型,

是一直在发展的,

并没有哪一个是终极的。


当我们问“到底是什么”的时候,

其实是以静态的观点,分析动态发展中的事物


模型在不断修正和演进中,

对目标系统做出更精确的解释


例如,lambda calculus,

是一种计算模型,

一开始是无类型的,

但是同样也得不到类型系统的种种好处。


因此lambda calculus就被扩展了,

变成了typed lambda calculus的一个特例


对计算建模的方法也并不唯一

图灵机,combinatory logic,形式语言,等等,

都是和lambda calculus具有相同计算能力的模型。


编程语言

编程语言是一种形式语言,

不同的编程语言,只是用不同的一堆符号

按着不同的文法规则

对计算进行建模。


根据形式语言理论,

不受限文法,与图灵机等价。


可以把不同的编程语言,

看做计算过程的多样化模型。


同样,它们的建模方式也在演化,

语言的规范在发展。


遇到具体问题,

我们需要选择合适的编程语言


而编程范型,

是语义上的一种分类,

并没有明确的界线。


我们也没必要成见太深,

强行把语言用在不适用的场景中。


毕竟,语言是用来沟通和表达的。


结语

当我还是孩子的时候,

对大自然,就喜欢问“到底是什么”,

它指引我沿着科学之路越走越远。


随着学习的深入,

让我开始懂得反思问题本身

站在更高的角度。


从模型角度来看,

物理学就是对大自然现实世界的建模,

耳熟能详的物理学理论,也只是可行的模型之一


例如:

牛顿的万有引力理论,

爱因斯坦的广义相对论,

都是引力理论。


当然还有其他的引力理论,

他们都是数学模型,用来解释目标系统

并不是大自然本身。


终极理论之梦,

可能会随着认识的提高,

不再成为问题了。


就像“没有银弹”一样,

任何领域都没有一劳永逸的事情