问题导出
在编程的过程中总会遇到各种各样的原理性知识,比如:函数调用汇编实现是先push ebp, esp… 这不禁会使一部分人产生这样的思考:我了解这些有什么用吗?(这个问题可能更形象:知道月亮的光是反射太阳的有什么用吗?)我不从人的精神追求等层面讨论这个,我只从现实用处的角度分析这个问题。
科学与宗教的定义
我以科学和宗教教条的区别进行类比分析。在我看来,科学与宗教性质的教条的相似之处是两者都是人们观察了当前的现实,对现实已有或已能观察的各种情况进行归纳总结,进而形成规律性质的东西,两者都不是绝对正确的。而两者本质的区别在于,每当发现新的无法由已知规律解释的情况时,科学采取的办法是寻找更加本质的规律,更新理论从而达到新情况下的100%正确。而宗教性质的教条则用已有理论牵强附和,自圆其说。所以结果是,科学总是能够用不断更新的理论创造发明新的现实,而宗教却不能。
两者优劣的对比
所以,学习编程知识的本质,是因为我们在编程时培养出来的一些类似感觉性质的东西,这些东西实际上是知识本质的信息压缩版本,是有二义性的。而知识的本质是没有二义性的。我们的感觉就像教条一样,绝大多数情况下是可行的,但在一些情况下,会出现我们意想不到的情况,这种时候只有明白一个东西的本质是什么,才能够解决问题,并创造新的解法。
不过,教条也有好处,在于其能降低接受这套知识所需智商门槛,所以能极大的降低人们的接受时间成本、脑容量成本。教条也是值得提倡的,因为编程中的教条是用自然语言描述的,而本质是用二义性无关文法描述的,学过编译原理都知道自然语言描述能力比二义性无关文法强。所以,只要这种编程教条不导致原始信息的流失,那么这种教条是很好的。而这种100%不流失原始信息的教条叫作——抽象。
结论
我们可以先接受一个不精确的教条粗略了解所学知识的大部分,在深入了解本质,获得100%正确版本,最后在脑子里进行合理的抽象。