底层科技的创新,和基础学科的教育,一直是我们的薄弱环节。
看过俄罗斯的数学物理教材之后,再回想自己读书时的国内教材,就知道我们只相当于俄罗斯的高中水平。
我们的教材是培养对数学、物理、计算机、机械、电子等领域有一点点了解的工程师的,而不是培养真正的大牛的。
在工业软件的辅助下可以完成设计工作,就是我们对理工科从业人员的要求。
这个要求可以说是很低。
至于工业软件是怎么做出来的,工业软件的底层需要多深的数学物理思维,这个问题只是在最近5年才稍微受到关注。
既缺乏原创的核心科技,又缺乏实现原创的教育底蕴,就是科技领域的现实情况。
我们的实变函数论只讲前6章,讲到平方可和函数空间[捂脸]
但是俄罗斯的这本实变函数论有18章之多:
不但仔细讲了因为集合上的距离定义而导致的微积分问题,而且讲了因为集合上的顺序定义而引起的数学问题。
都是从数学公理层面进行讲解的。
距离和顺序是集合的两个不同的深层基础特征。
写过C++的都知道,一个类的迭代器只需要重载等于==、不等于!=、单增++这3个运算符,不需要重载大于>和小于<。
为什么?
因为等于和不等于,只是测量的距离,到迭代器末尾的哨兵节点(sentinel)的距离(是否为0)。
迭代器的末尾哨兵节点,可以认为是这个集合的极限点(limit)。
C++的迭代器问题,只需要确定当it++的时候它与sentinel的距离趋向于0就行。
至于it0和it1谁大谁小,这个场景并不需要。
所以for循环里的条件是it != list.end(),而不是it < list.end()。
这两种情况的数学区别在哪里?
就在于集合的距离和顺序是两个东西,不一定需要同时具备。
俄罗斯的实变函数论直到第14章才开始讲这个问题,我们的实变函数论只有前6章。
所以我们的理工从业者很难想出迭代器这种设计模式。
因为我们的数学基础不够,很难注意到代码细微的数学差异。
一旦离开了别人的框架而去完整的做一个东西的时候,你会发现每一个细节背后都有很深的数学道理,
每一个微不足道的设计背后,都是数学的艺术[捂脸]
链表这种数据结构为什么可以运行?
因为数学上确实允许只有==和++这两种运算的集合。
因为链表的元素是不断malloc和free的,他们的内存指针的顺序在这个场景下并不能表示链表元素的顺序。
它没法像数组一样用i < sizeof(a) / sizeof(a[0])去判断内存是否越界,而只能用p != NULL。
最早想出链表这种数据结构的人,我觉得他肯定学过实变函数论的前14章。
这就是创新的数学底蕴。
我们的数学书太浅了,所以新的代码设计模式都是别人想出来的。
其他领域也类似。
文科生们的还是不要一阵子情绪激动,一阵子情绪低落了。
我们确实需要时间来做好数学物理上的准备。
联系客服