Cleve Moler has died
来源:HackerNews
MATLAB 之父 Cleve Moler 辞世:一个改变科学计算世界的时代落幕
2024年,MATLAB 创始人、数值计算领域先驱 Cleve Moler 与世长辞。这位用矩阵改变世界的数学家,留下的不仅是商业软件帝国,更是一套影响几代工程师和科学家的计算范式。
背景与概述
在当代软件开发者的工具箱中,Python 的 NumPy、Julia、R 等语言占据了数据科学的主流舞台。然而鲜为人知的是,这些工具的核心设计理念——矩阵作为一等公民、交互式数值计算、向量化编程——都可以追溯到一位数学家在 1970 年代的一个课堂辅助项目。Cleve Moler,这位新墨西哥大学的数学教授,最初只是为了让学生免于在 Fortran 中编写繁琐的线性代数代码,却意外催生了改变整个技术世界的 MATLAB。
Moler 的离世标志着一个时代的终结。在计算机科学史上,像他这样从学术象牙塔走出、最终塑造整个工业界标准的人物屈指可数。与 Linus Torvalds 创建 Linux、Guido van Rossum 设计 Python 不同,Moler 的贡献更具"跨界"特质:他将深奥的数值分析理论转化为工程师触手可及的工具,让矩阵运算从数学系的黑板走进了汽车厂的仿真车间、华尔街的交易系统和航天器的控制舱。MathWorks 公司由 Moler 与 Jack Little 于 1984 年正式创立,而 MATLAB 这个名称正是 "MATrix LABoratory"(矩阵实验室)的缩写,直白地道出了它的基因。
对于中国开发者而言,MATLAB 的故事尤为特殊。它曾是高校理工科教育的"标配",是无数研究生处理实验数据的第一个工具;同时也因技术封锁成为国产替代浪潮中的焦点符号。理解 Moler 的技术遗产,不仅是向一位先驱致敬,更是审视我们自身技术生态演进的契机。
核心内容
一、从 EISPACK 和 LINPACK 到 MATLAB:站在巨人肩上的创新
Moler 并非从零开始。在 1970 年代,他深度参与了 EISPACK(特征值计算包)和 LINPACK(线性方程求解包)两个 Fortran 数值库的开发。这些库代表了当时数值线性代数的最高水准,但使用门槛极高——用户需要理解复杂的子程序调用约定、内存管理和矩阵存储格式。
Moler 的洞见在于:将底层算法的威力封装在简洁的交互式接口之后。他用大约 70 个 Fortran 子程序编写了一个命令解释器,让用户可以直接输入 A*b 完成矩阵乘法,或用 eig(A) 求解特征值。这种"胶水层"设计,使得顶尖的数值算法首次对普通工程师透明。
二、商业化与生态构建:MathWorks 的独特路径
1983 年,工程师 Jack Little 用 C 语言重写了 MATLAB,并加入了对 PC 的支持。次年两人创立 MathWorks,开启了学术软件商业化的经典案例。与同时代的 Mathematica(Wolfram)走符号计算路线不同,MathWorks 始终坚持数值计算 + 工程仿真的垂直深耕:
| 特性 | MATLAB 策略 | 对比方向 |
| 核心抽象 | 矩阵/数组 | Python 的通用对象 |
| 扩展机制 | 工具箱(Toolbox)专业化 | R 的包生态碎片化 |
| 界面哲学 | 集成开发环境一体化 | Julia 的纯语言路线 |
| 行业渗透 | 汽车、航空航天、金融等垂直领域 | 通用编程语言的广度优先 |
三、技术民主化的双刃剑效应
Moler 的设计哲学深刻影响了后来的科学计算工具。他主张 "计算应该像使用计算器一样自然",这一理念直接体现在 MATLAB 的语法设计中:
% MATLAB 的向量化编程:一行替代循环
x = 0:0.01:2*pi; % 生成向量
y = sin(x) .* exp(-x/3); % 元素级运算,无需显式循环
plot(x, y); % 即时可视化
这种即时反馈(REPL 式)+ 内置可视化的模式,后来被 IPython/Jupyter 笔记本继承。然而批评者指出,MATLAB 也培养了"黑箱式"工程思维——用户熟练调用 fft 却不理解快速傅里叶变换的原理,精通 simulink 搭建系统却忽视数值稳定性分析。
四、中国语境下的特殊遗产
在中国高校,MATLAB 曾长期是研究生入学的"第一课"。2020 年哈工大、哈工程被禁用 MATLAB 的事件,更将其推向技术自主的风口浪尖。Moler 的离世,恰逢国产科学计算软件(如北太天元、MWORKS)加速追赶的历史节点,形成了一种意味深长的时代对照。
技术分析
MATLAB 的核心技术架构体现了 Moler 对计算效率与开发效率平衡的深刻理解:
解释器与 JIT 的混合执行
早期 MATLAB 是纯解释执行,循环性能极差(被戏称"向量化 or 死亡")。2002 年后引入 JIT 加速,对热点循环进行运行时编译:
% 传统向量化写法(始终高效)
result = sum(A .* B, 2);
% JIT 优化后的循环(2002+ 版本可接受)
for i = 1:n
result(i) = A(i,:) * B(:,i); % 内积计算
end
矩阵存储的列优先(Column-Major)传统
继承自 Fortran 的列优先存储,使得按列访问具有更好的缓存局部性:
A = rand(1000, 1000);
% 高效:按列遍历,内存连续访问
for j = 1:1000
col = A(:, j); % 连续内存块
end
% 低效:按行遍历,跨步访问
for i = 1:1000
row = A(i, :); % 分散内存访问
end
这一设计选择与 C/Python(行优先)形成对比,也是 MATLAB 与 NumPy 互操作时需特别注意的细节。
M 文件与工具箱的扩展哲学
Moler 创造的 .m 脚本格式实现了算法透明性——用户可查看大多数内置函数的源码学习实现。工具箱(Toolbox)机制则开创了垂直领域深度封装的商业模式,这一思路被后来的 Salesforce AppExchange、Shopify 应用商店等广泛借鉴。
实践建议
对于当代开发者,Moler 的遗产提供了几条可操作的启示:
1. 向量化思维是性能优化的第一课
无论使用 MATLAB、NumPy 还是 Julia,理解广播机制(broadcasting)和SIMD 向量化都是写出高效代码的基础:
# Python/NumPy 中的向量化实践
import numpy as np
# 反模式:Python 级循环
result = [x**2 + 2*x + 1 for x in data] # 慢
# 正模式:NumPy 向量化
data = np.array(data)
result = data**2 + 2*data + 1 # C 级速度
2. 交互式开发环境的战略价值
Jupyter、MATLAB Live Script、Pluto.jl 等工具延续了 Moler 的"计算即探索"范式。对于数据密集型任务,优先选择支持即时反馈的工具链。
3. 国产替代浪潮中的技术判断
对于受 MATLAB 限制的中国科研团队,建议的迁移路径:
- 短期:Octave(开源兼容)、Python 科学栈(NumPy/SciPy/Matplotlib)
- 中期:Julia(高性能 + 动态语言便利性)
- 长期:关注北太天元、MWORKS 等国产平台的生态成熟度
4. 深入算法底层,避免黑箱依赖
Moler 本人晚年多次强调,用户应理解数值方法的条件数、收敛性和稳定性。建议在使用高层封装时,至少掌握一种算法的数学原理。
总结
Cleve Moler 的离世,让我们失去了一位将数学之美转化为工程之力的桥梁人物。他证明了优秀的技术设计可以跨越数十年保持生命力——MATLAB 的矩阵语法、工具箱生态和交互式范式,至今仍能在现代工具中找到回响。对于中国开发者而言,纪念 Moler 的最佳方式,或许是超越对单一工具的依赖,吸收其"让复杂计算民主化"的设计智慧,在自主可控的技术生态中重建属于这个时代的"矩阵实验室"。毕竟,Moler 留下的最宝贵遗产不是 MATLAB 本身,而是一种信念:数学的力量,应当属于每一个解决问题的人。