首先先来讲讲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 的回答 - 知乎
实话实说,以某些中国企业在程序员35岁以上就准备裁撤的做事风格,我就知道中国企业永远都做不出来类似MATLAB的软件。
22岁本科毕业,25岁研究生毕业参加工作,35岁前,你除了学习和做一些简单重复的东西外,你能有什么创新?
别去追求什么天才,业界的大神好多开始表现也不突出,比如Jim Keller,最高学历电气工程学士学位!只有你的知识储备量大到覆盖一个行业时,你才能颠覆一个行业,纵观IT业的众多大神,哪个不是3、40岁才出些成绩的?反观在中国,这个年纪都在担心被裁员了,能有什么心思专心搞研发,在知识储备最丰富、最全面的时候都去送外卖了。
中国被誉为最有眼光的企业家,只是一心一意去实施所谓的“天才计划”,指望某个“天才”突然大放异彩来引导公司,不得不令人叹息。
(当然做商业除外,比如扎克伯格除外,不在讨论范畴,他们主要是商业路线,FaceBook倒了,你信不信马上就会有另一个企业顶上去。)
偏题说个小故事。
我本科毕业(2000年)选毕业设计时,一方面比较闲,另一方面又比较中二,觉得大部分题目太简单,就挑了一个自己看也看不懂的题目——用高阶矩方法进行多声纳定位什么的,好像是我们系某研究所里一个课题子课题的子课题。想想自己就要开始研究前沿黑科技了,不禁有点小兴奋。
然后在家打游戏打了两个月。
离交论文还有一个多月的时候,我在图书馆里一边啃各种英文文献,一边恨不得回到过去掐死挖了大坑的自己。
大概花了一个多礼拜,我基本明白究竟要解决什么问题后,开始尝试用Matlab写些试验性的代码,顺便读读Matlab里和高阶矩相关的各种tutorial;发现每个tutorial都是宝藏啊,不仅仅讲各个函数怎么用,连背后各种原理都讲了,直接做专业课教材问题都不大。
读着读着,我发现了一件不得了的事情——
我整个毕业设计要做的事情,调用某个库里某一个函数就能实现。
是的没错,要完成我的全部毕设所要写的代码,把加载数据和结果输出这些没营养的部分斩头去尾,Matlab只要写一行。
我把那个函数的源程序和相关Tutorial都再三读了几遍,确认了这真的可以完成我的毕设要求,把参数按照具体应用场景设设好就行。
我纠结了一下该怎么处理这个问题,毕竟总不能真的只交一行代码,后来想了个办法,就是把那个函数的内部实现魔改了一番,总之颠来倒去就是些矩阵运算和微积分的数值算法,原来的实现可以应付更灵活的场景,我就降低适用性但是做点性能优化什么的,总之整出了几百行代码。
我花了三天时间写完了所有程序和论文。
然后又在家打了两个礼拜游戏。
顺利通过毕设答辩毕业^^
虽然不是编程人员,但是我们组常年用有限元软件,简单说两句自己的感受。
我的理解是,如果说一个app的开发相当于小学加减乘除,题主提到的大数据分析人类行为撑死了就是高中解析几何。而matlab这类的工业软件绝对是复变函数,微分方程级别的。
中国的程序员是非常多,大牛也非常多。但是能够开发matlab的也不那么多。不多的大牛会被互联网公司以高薪直接挖走,根本不可能留在开发小众工业软件的公司。
同样的事情在matlab的公司一样存在,华尔街经常会开出十五倍到二十倍的薪资来挖开发matlab的工程师,去写对冲基金的程序。
所以正因为程序员工资高,而matlab的公司不可能给出这么高的工资,才没人去开发呢。
这类东西不能指望商业公司自己去做。
商业公司是要赚钱的,出力不讨好。
这类工具,国家重新投资做一个,意义也不太大。
撕破脸不让用,这种软件破解比开发容易多了。
没有互联网的时候,大家就用盗版了。不卖正版,继续破解用盗版就是了,你告我啊。
中国第一批设计师,大多是用着盗版windows,安装着盗版ps,autocad,盗版ug,学的设计。
没耽误计算机普及啊。
中国程序员工资高?那也是最近十年的事情。
而发展一个MATLAB,需要的不是高工资的程序员。
现在程序员普遍工资高的,大部分在互联网企业。而互联网企业关注点就不在这个领域。
传统软件行业的工资,也是互联网企业工资提升后,被动拉升的。实际上其业务模式并不适应高工资。
中国真正高水平的程序员,还是非常少的。无论是系统架构专家,还是算法框架设计师。
就算是高水平程序员,到了30岁还不能脱离开发,主要做管理,在绝大部分公司,工资也提升不上去。
一帮人看到我文中提到了java就莫名地兴奋。是matlab不用Java?还是说它底层那些C++的代码这些年还要大改?用过matlab的人应该知道matlab的效率有多低,人家本来的卖点就不是算法效率有多高,本来就是一个用于教学,研发,实验的软件平台。核心的竞争力就是,界面友好,文档清晰,功能全面!!不用java实现这个,用C++?你逗我呢?
Java in MATLAB has several different uses, so the benefits depend on what you're trying to do. Java is used for at least 3 distinct reasons:
-- To implement IDE (Integrated Desktop Environment) functionality for folks who want a more modern visual interface for their MATLAB code editing, debugging, workspace navigation and inspection, profiling, user interface creation, etc.
-- To support calling Java code that users or developers write directly from MATLAB.
-- To somewhat simplify the issues involved with deploying the product on several different operating system and platforms.
说这个话的是对MATLAB一无所知。
要开发MATLAB这种工具,需要至少三种人。
第一种是对算法非常熟练,从事过科研和产品研发,懂得实验室,高校,工业界需求的设计人员。这些人有一个是一个起码都是博士。
第二种是对Java编程非常熟练,对matlab性能有着深刻的理解,有多年编程经验的所谓码农。
第三种是市场分析人才,他们负责跟客户沟通,调研当前已经开源的资源库,通过分析决定下个版本里面需要加入什么新功能,以及当某些公司开始涉足matlab领域的时候,把matlab的哪个部分开源,以消灭对手。以及文档要如何写,界面如何设计才能让用户更加方便。
在这三类人里面,只有第二类人是所谓的程序员。第一类,第三类其实根本就不是程序员,他们才是matlab这个软件最核心的竞争力。
像matlab这类工程软件,最重要的从来都不是程序员。matlab本质上可以看作是工程技术经验的一种总结,好比武侠小说里少林寺的藏经阁。少林寺会不学习和消化江湖上的各种武功,并且去伪存真,找出一种可以通用的方法来修炼。而后把这些修炼的法门写成经书,存在藏经阁。如此一来,任何想要修炼某一种武功的人,可以从藏经阁里找到相关秘籍。按照书里的内容修炼,必定能成为高手。当然如果想成为绝顶高手,肯定还要再自己创新和思考。但对于巨大多少人来说,这藏经阁功能已经足够强大,可以避免练功练错,走火入魔,等一系列风险,还能快速成为高手。
而程序员对于matlab来说,相当于少林寺里编撰经书的和尚。对文法修辞要很有研究,同时还要对武功有一点了解这样就不至于在编撰秘籍的时候犯低级错误。然而,本质上,少林寺的藏经阁的强大不是因为这些编撰经书的和尚,而是少林寺多少代高僧对武功的参悟,以及各代少林弟子不断把江湖绝学带回少林寺。
程序员干的活,是用最少的内存,最快的速度,实现某一种功能。而到底用计算机实现何种功能,这个就不是程序员说了算的。matlab这种软件在中国缺位,这个锅是不能甩给程序员的。
不客气地说,就算中国的程序员今天仿照Matlab,搞出一个功能一摸一样的软件。如果没有足够研发人员,全球几乎所有相关领域的业界,学界的客户,以及多年来积累下来的技术储备,就算不涉及侵权官司,它也维系不下去。
中国程序员里,有很多像我一样,只需要时间和全神贯注集中精力全职投入,就能独立做出、或者有能力全职带领团队一个简易版本的Matlab,包括:
如果不考虑Matlab自带的复杂simulink、各种嵌入式工具、各种HDL codegen和testbench、各种debugging工具、各种mexfunction compiler toolchains,还有各种连全知乎最懂matlab的我都说不上来的各种工具——那么作为知乎Matlab资深私生饭+精神CTO,我个人最最保守估计这个项目需要1亿人民币(全部用在发工资+租办公室+给员工买电脑买可乐吃炸鸡),需要至少50个人一起花费1年以上的时间,才能做出一个基本可用的preview版本出来。
那么问题来了:
现在的某些独立领域的计算框架都是直接写个开源的python库,最成功的诸如scikit-learn/tensorflow/pytorch/jax这些某个领域里的计算工具都是靠大厂养活程序员+无数社区贡献者的无偿奉献才能做下去,商业化运营的独立全栈框架只有julia computing——而跟matlab这么一个完整的环境完全无法相提并论,scilab、octave、R studio都是凭信仰和各个NSF、基金会、咨询的钱来工作。
最重要的一个问题:假设你是资本家,你打算1亿人民币搞点事情,请问你会把1亿人民币投给我,让我回国给你当CTO招人制定路线图做国产的Matlab,还是买10套深圳的房子坐等增值?
从这个问题的逻辑就可以看出来问题,因为不懂行的人太多,谁都可以评论一番,真正做事的人却得不到支持。
中国程序员、产品经理、设计师等等职位的工资确实高,但这个高的基础是什么?是他们所在的公司有更高的收益、或者更多的投资。钱不是从天上掉下来的。
只针对提问者,如果现在有中国公司提供这样的软件,你个人(先不说高校)愿意付费么?你为多少软件付过费?
1.不是道德问题,是市场问题
盗版是一把双刃剑,一方面确实可以后发制人,很多人可以以更低成本做事情,另一方面,因为国外的产品往往至少在他们的市场是盈利的,在中国不赚钱也关系不大。但是对于中国本土的软件产业,打击是毁灭性的。
这不只是盗版问题,而是形成了习惯,根深蒂固的,很多人不愿意为软件产品付费,不愿意为软件付费。
并不是说不愿意付费的人们道德有问题,而是一个习惯一旦形成,改变起来比较难。一些人如果把这个变成道德问题,变成相互的指责,就歪了。
这其实是个经济问题和市场问题,需要整体环境的改变。
2.形成良好的土壤,关键是让大家赚到钱
以前我们做一个软件,特地做了大箱子,里面放了各种设备,但其实我们都知道,真正核心的就是里面的软件系统,硬件自己配置一个都很容易。那么为什么要搞这么多东西呢?因为人们不愿意为软件付钱,你搞点硬件,对方就觉得值钱了。很可笑,但是很真实。
倪光南前几年到处演讲,说要做国产的软件,有一次演讲我也在下面听着。但是在网上,太多的冷嘲热讽,觉得这人思维太古老了。结果呢?
最核心的是土壤,要让大家都能赚到钱。
所以如果要让中国的软件产业做起来,需要从土壤开始,培养好的环境,让做这些软件成为有利可图的事情,让做这方面的公司能够给程序员、产品经理、设计师们发的起高工资。
只要让这个市场有利可图,投资、人才,都不是问题。
多年前,我在学校里听雷军讲座,雷军自己来,拿了几箱子金山词霸,一个卖99元(或者59元),我买了一个。当时的感觉就是国产软件不容易,要支持。若干年后,我们还在讨论这样的问题。希望对于国产软件,真正能够获得支持,能够有健康的市场。
3.不要慷他人之慨
最廉价的就是慷他人之慨。整天说为什么这个也做不出来那个也做不出来,其实这么说的人,多半就是希望别人无私奉献,自己指点江山。
有个好玩的事,也是广告:我们自己的知群有产品经理、设计师等互联网的培训业务:我们原本价值几百元的课,为了让更多的人能体验(相当于试听和体验了,有需要的人可以听完后课程),几乎以免费的方式提供给大家,其中还有我这样工作十几年的人来去讲一下,讲两个多小时干货,中间只要为我们自己的课程做一点宣传,就可能会有人说,你怎么能做广告呢?不许你讲,你赶快给我继续讲干货。我……说实话,大家做点事情,都要开心和顺心。做好的产品,提供好的服务,然后大家各得其所,就可以了。这样的人是极少数,不过确实也有,类似这里骂程序员的。大多数人其实都很能理解。
很多国产软件也是,都是程序员、产品经理、设计师们一行一行代码、一个一个需求「手工」做出来的,盈利模式就那么几种,要么是前向收费,要么是后向收费,要么花钱买,要么接受广告。只是很可惜,很多前向付费的模式,都不容易跑通,最终很多商业模式变成了「流氓软件」式的。如果想让这个市场健康起来,土壤还是最重要的。
4.要知道这里面的生产力和生产关系
最后,其实这事和程序员关系不大。
一些人骂程序员,这和程序员有什么关系?程序员是拿工资干活的。就像你买得起房买不起房,去骂辛苦盖房子的人,是不是骂错了对象。
你应该问,为什么程序员的老板们不能去做个 MATLab 呢?老板们是很坏的,多骂。对具体做事的人好点(开玩笑的说)。
最近开始尝试用视频的方式来输出内容,已经在把之前回答的一些上万赞的回答变成视频。邀请大家在B站里关注:「马力在知群」
—
知乎福利:
现在有免费的5天学习机会,帮助你了解阿里、腾讯的工作方法论,更好的入门或者提升。在这里了解详情和报名:
应该是你能接触到的最有干货的免费课程,机会有限。
题主这问题问得太早了,各位答主也答得太早了。
MATLAB这才刚宣布封锁几天呢,就急吼吼地问“为什么做不出来”了?
即便把MATLAB原装团队叫过来,让他们一个月之内做一个替代品,人家也肝不出来吧?
什么?你问以前为什么不做?
市场经济搞了这么多年,“市场”在资源配置中发挥的作用都已经从“基础性”变成“决定性”了,那自然得是有市场才会去做啊!
没有市场,或者市场已经被别人垄断,谁还硬冲进去赔钱送死啊?你难道会指望做个KK去跟QQ刚正面吗?
只要有市场,甭管是做游戏还是做移动端app或者做工程软件,肯定会有人做的。我是搞船的,见识过的国产工程软件虽少但也还是有的,比如东欣软件(沪东中华造船集团的软件开发子公司)的SPD,号称对标TRIBON(哈哈哈哈哈哈哈),不但他们自己用,还有付费用户,甚至还有盗版用户。
现在MATLAB的封锁名单还很短,如果把封锁扩大到整个中国,这么大市场空出来,绝壁够养活一个堪用的替代品了。真封锁个几年,中国自己的MATLAB没准就能打出去跟MATLAB抢市场了。
所以,扩大封锁吧,赶紧的!