为什么中国程序员工资那么高，连一个 MATLAB 的替代品都开发不出来？
首先先来讲讲Matlab的故事。 最早在1970年，美国Argonne国家实验室建议美国国家科学基金会(NSF)建立科研项目，研发一套具备研发、调试、教学功能的高质量数学软件，于是成立项目组，做了两个项目： 第一个项目将Algol 60语言（国际代数语言——一种初代编程语言）实现的解决矩阵线性方程和特征值问题的算法重新用Fortran语言写了一遍，并融入了测试和可移植性方面的研究成果，软件取名叫做EISPACK（矩阵特征系统软件包）。 第二个项目则是用Fortran语言写了一个包含44个子程序的新软件，叫做LINPACK（线性方程软件包）。 用项目参与者也是Matlab最初开发者Cleve Moler教授的话说，这两个项目是失败的，因为他们没有输出任何一篇论文甚至是报告，只是开发了两个软件。 这两个软件后续也就作为美国高校教学所用。 在70年代末80年代初，Cleve Moler教授在新墨西哥大学授课线性代数期间，他发现他的学生对于EISPACK及LINPACK的Fortran编程存在很大困扰，因为彼时的Fortran编程要经过编程->编译->链接->加载-执行过程。这个过程非常复杂，要拿着打孔后的一张卡片去学校的IBM大型计算机（简称：大机）去读卡，看运行结果（可能老一辈工科学生体验过，计算机当时是稀缺资源，一个学校可能只有几台大机，大家要排着队去打卡看结果）。 于是Cleve Moler教授自己利用业余时间，阅读了这本书《Algorithms + Data Structures = Programs》（注：这本书的作者是NiklausWirth。这个人是大名鼎鼎的Pascal语言之父。不过，彼时连Pascal语言都还没有诞生，这本书里介绍的是另一种叫做PL/0的语言，NiklausWirth通过精简前面提到的Algol语言，发明了 PL/0语言，而这，就是Pascal语言的前身） Cleve Moler教授通过学习书中的编程语言解析方法，并将书中一些关键的PL/0程序以及在EISPACK及LINPACK项目中积累的成果，用Fortran语言重写，写出了初代的Matlab软件——这次，不用学生再进行编程了，直接输入命令，就可以看到运行结果。Matlab的名字，取自Matrix Laboratory（矩阵实验室）的缩写。因为初代的Matlab，只聚焦矩阵的计算，只有Matrix Data Type一种数据类型。 这里有一些资料，第一版Fortran版Matlab的机读卡： 上面这个机读卡，放在大机里读卡运行，然后就可以展示出Matlab的交互界面了，学生们可以在这个交互界面直接敲命令，进行矩阵计算（再也不用为每一次计算去编写程序了）。 初代Matlab的函数库： 下面这个画面比较珍贵了，是最初Matlab的交互界面及运行效果： 而后，在80年代初期，CleverMoler教授在斯坦福任教，并引入了Matlab辅助教学，受到同学们的追捧。同时，CleverMoler教授同意其他人一起优化他的软件（有点开源的意思），他会把他的源码发给优化软件的人，然后软件的函数库得以不断的丰富。 当时正在斯坦福攻读硕士的Jack Little注意到这个好用的小软件，希望把它商业化。于是在CleverMoler的鼓励下，毕业后的Jack Little辞掉了工作，专心于Matlab的优化，并用C语言编写了Matlab新的扩展版本。同时，Little的另外一个朋友Steve Bangert也花费了大量业余时间研究新版Matlab。在扩展版本中，Little和Bangert对初版Matlab做了许多优化及提升，其中最重要的是函数库、工具箱和图形化。1984年MathWorks公司成立，商用版的Matlab正式面世。 下面是后续Matlab的一些重要的版本： 1985年 Pro-MATLAB Control System Toolbox™ 1987年 Signal Processing Toolbox™ ODEs 1992年 Sparse matrices Simulink® 注：ODE是Matlab专门用于解微分方程的功能函数，是Matlab最著名的函数系列之一。Mathworks公司基于它研发了另一款用于仿真和基于模型设计的软件——Simulink。 1993年 Image Processing Toolbox™ Symbolic Math Toolbox™ 1996年 Single precision Cell arrays Structures 1999年 Objects 2000年 Desktop & LAPACK 注：2000年推出的桌面版，是Matlab最重要的版本之一，用户可以通过图形界面进行交互。LAPACK则是线性代数计算的重要模块，是Fortran语言写的，也是Matlab中为数不多的仍在使用Fortran语言的模块。 2004年 Integer data types & Function handles & Parallel computing 注：Parallel Computing Toolbox™于2004年在超级计算大会上发布。2005年，比尔盖茨在SC05的主题演讲中，高性能计算展示环节，使用MATLAB进行了演示。 2008年 Objects improved 2010年 GPUs 2014年 New graphics system 2016年 Live Editor 2017年 Tall arrays and categorical arrays 目前Matlab的函数库中的函数种类已达到上万个，还有上万页的说明文档。 好了，现在来回答这个问题： 1、Matlab只是你看到的一个结果，但你是否看到了“初心”？ 首先Matlab是从一个免费的小工具软件积累起来的，目的很纯粹，就是为更加方便的教学。它从胚胎（也就是20世纪70年代Moler教授开发的小工具）发展到一个能够卡住别国咽喉的软件，用了超过20年的时间。 我粗浅的认为题目中的高收入程序员是企业员工，因为高校的程序员跟高收入不太能挂钩。而去看一个企业，很少能有高校和研究机构这样，有如此长的研发和积累周期。甚至很多企业的寿命都不到20年，更别说你让它投入20多年去研发一套软件。 有人可能会说，我就不信让鹅场或马爸爸砸钱就开发不出一个数学软件。我想说的是：我相信你能开发得出，但是你赚不了钱。十年一剑和一朝一夕的产品能一样么？这个软件投到市场，谁会买？没有盈利企业为什么要做这个事情？企业的“初心”就是收益，这样才能谋求企业的更长远的发展。 所以中国程序员工资高，我觉得倒不是坏事，也没必要绑架到开发Matlab上面，该做赚钱的产品就去做，企业发展的好，国家经济才有良性循环，才能有更多的资金投入到科研领域，供高校和研究机构去搞“积累”。 另外，就是我一直觉得企业是技术“应用”的平台，而高校才是技术“积累”的温床。 你看到“深度学习”、AlphaGo大放异彩的“他人起高楼宴宾客”，是否也能看到20世纪40年代开始“神经元建模”、“感知机”再到“反向传播算法”及“多层神经网络”的跨世纪的理论发展。 所以，就连题目里提到的：中国高薪程序员忙着分析大数据，研究国民消费规律然后开发一些抖音淘宝等所谓的「智能推送」。这个大数据智能推送，也不是高薪堆出来了，也是数十年积累出来的。 2、咱们现在能做出自己的Matlab么？ 即便是现在的高校或研究机构，给你20年的时间、经费，你能研发出一个Matlab么？ 再回头看看Matlab的发展历史，Matlab的雏形是LINPACK和EISPACK两个科研项目输出的软件，而这两个科研项目却没有发表出任何论文，只是输出了这两个软件。 另外，对于“Cleve Moler教授根据LINPACK和EISPACK软件的教学使用需求，开发出初版Matlab”这件事情来说，更是一个出于自身爱好和工作需要的自发行为，没有项目经费，也不为在学术领域出人头地。要做的只是做好自己的教学和研究。 这也和目前中国的研究环境相差甚远。目前的科研项目很多都还是为了自己发论文和职称晋升，大部分项目的论文发出来了，就完了。其实，就拿深度学习、大数据来举例，很多技术的研究，一篇论文只是一个领域研究的起点，但在国内，这基本就是终点了。 所以即便真的给你时间和科研经费，能不能做出Matlab也是问号。 3、未来呢？ 看到这里，很多人会说要“潜心研究”，要“淡泊名利”，要“打持久战”，但你不知道的是，论文数量不达标，不说职称晋升了，科研经费是不是申请的下来？考核和任教资格能不能保得住？这都是问题。 可能又会有很多人说改善中国的研究环境，可你不知道的是，中国人口多、资源少的特殊国情下，国家如何选择项目？如何判断科研经费投向？又是难题。会哭的孩子有奶吃？好像论文数量这种硬性指标又显得更合理一些。 这是一个复杂的问题，就像之前对于取消高考之争论，应试教育到底是阻碍了学生的自我发展还是铺平了贫苦学生阶级晋升的道路？这是一个没有标准答案的问题。 我们转头去看一看20世纪70、80年代的美国，看看美国人潜心研究Matlab的那个时代。 1970-80年代美国的GDP在全球范围已经是遥遥领先。 而当时的美国人口呢？也就2亿左右。 再往前看100年，1890年代开始美国的工业产量就位全球之首。 丰厚物质基础给了美国一个很宽松的研究环境，不会那么的浮躁和快节奏。 而现在的中国，GDP不说遥遥领先，离第一的位置都还有距离。而我们的人口基数又是巨大的，更加剧了可分配资源的紧缺性。所以现在很多僵化的体制也是没有办法的。 如果翻看美国的历史，可以发现美国的原始财富积累有运气的成分，作为一个远离欧洲大陆的西方国家，在两次世界大战的绝大部分时间中都在“闷声发大财”。而中国作为社会主义国家，在发展到一定程度后很难做到“闷声发大财”了，目前美国对中国企业、贸易的各种打压也是不可避免的。真的能成为超级大国并拥有卡住别人喉咙的产品，则需要比美国更长的“积累”时间，需要更多代人的努力。 现在网上有很多跟美国叫板、开杠的帖子和声音，其实没必要。正视差距，同时也不妄自菲薄。我对中国未来能做出自己的Matlab充满了信心，现在程序员工资高但开发不出Matlab不是什么坏事，这是中国发展的必经之路。 （完）  参考文章：       我的其他一些科普类答案，感兴趣的朋友可以看看： 作为一个非金融从业者怎样才能看懂电影《大空头》？ - GRAYLAMB 的回答 - 知乎 如何通俗易懂地解释「协方差」与「相关系数」的概念？ - GRAYLAMB 的回答 - 知乎 关于外汇标价方法的定义，直接标价法到底是什么？ - GRAYLAMB 的回答 - 知乎 如何浅显易懂地解说 Paxos 的算法？ GRAYLAMB：债券属性「久期」的本质是什么？ GRAYLAMB：假设检验的逻辑是是什么？ 什么是梯度下降法？ 5G 网络和 4G 网络有什么区别？ 《黑客帝国》里的锡安是不是虚拟世界？ kafka解决了什么问题? 比特币 (Bitcoin) 系统是如何运行的？