这两年我一直在思考一个问题,我们辛辛苦苦搞了 20 多年的基础软件,搞了半天呢,怎么跟老美的这个差距是越来越大了呢?芯片赶不上,操作系统呢也赶不上,人工智能呢差了好几条街,更基础的编程语言之类的,那更不用说了。
最近有个院士针对记者“中国 AI 技术为啥越高越落后”的提问,说道:“这不正常嘛,中国足球不也越搞越落后?”我想这位院士说这话的时候,心一定是酸痛的。
回首三十年来的信息技术大发展的各个阶段,我们无数次陷入“起个大早、赶个晚集”的轮回:
-
上个世纪 90 年代的 PC 时代,老美有 Apple 和 DOS、我们有 CCED、WPS,微软一个 Windows、Office 把大家打趴下了。
-
本世纪初的互联网时代,老美有 IE 游览器、开源的 Linux 服务器,我们只是忙着建网站搞游戏,过了十年,云计算来了,我们又落后了。
-
同样是本世纪初,嵌入式操作系统刚刚起步,我们自己有 MiniGUI,国外呢实际上也没有太多的东西,但到了 2010 年的时候,安卓一出来,iOS 一出来,咋就赶不上了呢?
-
就在五年前,还有人高呼中国人发表的 AI 论文论文数量赶上美国指日可待,但仅仅过了几年,老美的大模型就横扫天下。我们又一次落后。
我以前有一个结论:还是我们的底蕴不够啊。毕竟信息技术,还是以老美为主发展起来的。我们的这个底蕴不够,我们就看不准未来,所以呢我们的打法就很差。
就比如说举个例子,当年的时候,国产的山寨功能手机满大街跑,把诺基亚都干趴下了,但好处我们也没捞到多少。我们的目的,就是把功能手机做得越便宜越好,这样量就大嘛,搞得大家都没有钱赚。但老美的思路那就不是这样,把这个手机呀做贵,把软件做复杂,iOS 出来了,安卓出来了,大家都有钱赚。做 App 的能赚钱,后来微信、抖音这类的超级 App 就出现了,于是诞生了很多牛逼的移动互联网公司,开发操作系统的,做基础软件的,做手机的,做芯片的都有钱赚,大家其乐融融,共同分切市场的大蛋糕。
但咱们呢就不行,总是想把产品做便宜,搞得毛利率特别低,最后大家都没有钱赚。
我说我们的底蕴差,其实主要还是因为我们的基础差,基础怎么个差法呢?大家看下面这个信息学的知识体系图。信息学的内容一共分四个板块,分别是数学、算法和数据结构、编程语言、平台及工具。
首先,信息学肯定是建立在数学基础之上的。比如说数论、微积分、离散数学以及编解码技术等等。这些东西都是信息学的数学基础。
再往下是算法和数据结构。这些东西呢,当然跟信息学的关联度就更大了。比如我们学过的什么二分、倍增、各种排序算法、搜索算法、还有什么分治、贪婪的思想等等。还有线性数据结构、树型数据结构、哈希表等等的。老外研究这些东西研究得都很透彻。比如说举个例子,我这两天为了给孩子们教算法和数据结构,就去研究 64 位整数里边最大的那个质数是多少。英文页面里就有答案,一查就出来了。中文的互联网上你查不到。这就意味着,国人基本没有人去做这方面的工作。
大家以为会几个编程语言,会点平台和工具的东西,自己就是个软件工程师了。实际上,你只是掌握了一些最表层的东西,基础的东西呢,是没有掌握的,也无人去研究。就比如我前两天发表的《斐波那契数列的通项公式之推导》的视频,非常透彻地讲解了数学家为什么会想到用幂级数、构造分式之和的形式来推导斐波那契数列的通项公式。可惜啊,没多少人对这些感兴趣,播放量可怜得很啊!
我们的问题,就是行业内的“野生”程序员太多了。很多人会点编程语言,不管是 Python、C/C++,还是 Java、JavaScript,就开始写代码了。大家日常谈论最多的就是各种编程语言的奇技淫巧。这些东西其实没啥大用;真正有价值的代码,关乎算法、数据结构、接口的设计以及可维护性。
在我即将于年底出版的《C 语言最佳实践》一文的后记中提到,一名顶级软件工程师的水平主要体现在如下三个方面:
第一,会有意识地运用一些编程范式(或者称之为“设计模式”)来提升软件的可扩展性和可维护性,解耦代码和数据,消除模块间的耦合。
第二,不再因为追求编码速度或者尽快实现某个功能而使用简化的实现方案或者编写一些“凑合能用”的函数,而会积极寻求以合适的数据结构、算法或者周全的代码来实现相应的功能。简言之便是“将代码一次写到位”。
第三,强制要求自己及团队成员通过便于实现持续集成的单元测试框架以及完备的单元测试用例来保证代码的质量,始终贯彻“程序员是代码质量的第一责任人”这一原则。
我还提到,当一名软件工程师不再依赖调试器来跟踪或调试代码,不再花费大量的时间来解决某个“奇怪的”问题之时,编程工作将成为一种惬意的精神享受而非痛苦的肉体折磨。然而,我们国内有多少软件工程师将编程工作视作一种享受呢?
我们国家信息技术界的从业人员,普遍缺乏这些最基础的信息学素养。软件行业不用说,芯片其实也一样。芯片本质上也是软件,都是拿这个某种可编程的语言定义数字电路的逻辑结构,然后再生成对应的数字电路。所以,软件上不去,芯片也搞不好。
从业者的信息学基础没打牢,行业的整体水平是上不去的。整体水平上不去,那冒出尖儿的领军人物,比如政府领导、企业 CEO/CTO,他们就没有能力也没有远见看到未来,就无法带领一个团队或者一个行业往前走。谈何跟老美的竞争呢?
信息学的基础当中,最重要的当属数学了!君不见,信息学的祖师爷图灵是搞数学的,现代计算机架构的提出者诺依曼是数学家;哪个你身边的编程大拿不是当年的数学学霸?
读到这里的是真爱了!那顺便推荐由本人主讲的《信息学的数学基础之数系及其运算》(¥99.00)线上视频课,其内容涵盖数系的概念及进制、初等数论、微积分基础、微积分初步应用、函数逼近法、黄金分割比及斐波那契数列、圆周率及自然常数等主题,共十讲。本课程旨在帮助软硬件工程师系统地学习信息学的数学基础知识,强化抽象思维和发散思维能力,提升数学素养。提升信息学的底蕴,从数学补起!
在 #微信小店://考鼎学堂 中,还有更多由本人主讲的信息学(计算机科学)系列课程,内容涵盖操作系统、常用开发工具、编程语言(C/C++、Python)、算法、数据结构等,包括《C 语言最佳实践》(¥499.00)、《Linux 环境高级编程》(¥499.00)两门经典课程。
魏永明是我国基础软件领域的知名专家,2013 年度开源软件杰出贡献人物,2023 年度世界开源贡献榜 Top100 榜单人物。魏永明的软件作品有 MiniGUI、HVML 和 HybridOS 等,著作有《MiniGUI 剖析》、《C 语言最佳实践》等,译作有《Linux 设备驱动程序》(第二版、第三版)等。