为什么中国程序员工资那么高,连一个 MATLAB 的替代品都开发不出来?
链接:https://www.zhihu.com/question/402837414 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删
问题是Matlab的核心竞争力是它集成的那些计算,这个和程序员没关系,你需要一批真正优秀的phd来写这个算法需求,和能理解这套东西的程序员(最好是计算机系phd中途退学的那种)来实现和测试这些算法和集成。正常来说这个世界上99%的编程是不需要啥智商就能干的,但Matlab的算法实现还是略有一点门槛。如果你有预算找一堆程序员,开发一个wps是不难的,但是Matlab是另外一个难度量级的东西。因为关键的瓶颈需要真的不是程序员。
如果你只是找一堆程序员来开发的话,大概率会得到一个有Matlab 5%功能,能满足90%客户需求,很可惜的是这90%客户都是白嫖的需求(真会付费的10%用户需要的不仅仅这5%功能)。所以最后你就会真的得到一个:“我们中国真是太厉害了”的产品。
https://www.zhihu.com/question/402837414/answer/1298220759
其次搞不清楚高工资是怎么来的,是来源于「卖方市场的稀缺性+买方市场的资金供给」,两者缺一不可,说白了就是供需关系决定了工资高低,matlab 就不属于这种类型,开发周期长、变现效率低、人才需求高,在投资的角度看,做中国 matlab 是纯粹赔钱的生意,项目不赚钱、投资人不看好就不可能有高工资,抖音、快手的盈利模式来源于信息流广告+直播打赏抽成,是在商业上被验证过的可持续盈利模式。
还有搞不清楚「中国 matlab」应该由谁来负责,题主上来就把矛头指向抖音、快手这种商业公司应用,似乎他们要为matlab被卡脖子背锅,这种研发周期长、人才需求高、变现效率低的项目不可能有商业公司来开发,因为就算做出来了也不如「真.matlab」好用,最后就是死路一条,企业的目的是盈利不是做慈善(当然,现代社会的慈善本身就是门生意),所以需要政府下场用有形的手来扶持这种从商业上看起来非常差但是又是对中国产、研具有重大意义的项目,然而事实是这类软件长期的扶持力度都不够。
https://www.zhihu.com/question/402837414/answer/1299440292
要做,都是能做的。
所以再开发一个Matlab没有意义。
一个软件有足够多的用户或者足够高的盈利才能分摊掉研发的开销。就是这样。而在很多细分领域其实承担不起资源的浪费。
https://www.zhihu.com/question/402837414/answer/1301944285
Matlab受中国主流的市场欢迎吗?它只是一款研究工具,受众是很小的,也没有那么多人喜欢研究物理、化学、生物学和医学,中国人喜欢追星、喜欢赚钱,却没有人和学校愿意为一款科学研究软件付费,十分惭愧的是,我在数学建模时用的Matlab软件也是破解版的,我愿意花几百块去购物和消费,却不愿意为我的生产力工具花钱,我也是个普通而世俗的人。
那么,中国没有matlab真的可以责怪程序员吗?为什么不责怪明星呢?他们明明最受民众欢迎,而且赚钱最多?那么谁捧着明星上天的呢?如果我们国家全是乐于科学研究的人,愿意花钱在科学研究的软件上,中国何愁不能把世界上全部最牛逼的软件研发出来?
所以,最后我们只能信任国家了,国家如果愿意给这种十几年都赚不到一分钱的软件托底,我相信我们一定能研发出比matlab还好的软件。当然,你一定会反驳,中国不是最近有个Truffer了吗?去看看它的源代码吧,我是不相信这点源代码的体积能有什么惊世骇俗的功能,资本的市场就是,完成了百分之一就能拿出来卖了,这对科研软件百害而无一利。
所以,这么愤怒有什么用呢?中国有个求伯君,独身一人写出了WPS,但WPS赚到什么大钱了吗?扪心自问一下,中国没有matlab难道不是全体中国人的问题吗?
我们喜欢抖音,所以程序员拼了命地完善抖音软件,可是你不知道,那些写抖音软件的程序员可能一辈子都不用抖音,他们内心也是鄙夷的,他们可都是清北名校的学生啊!你说凭借他们的能力,什么软件研发不出来?
最后提一下,Matlab一开始只是一个老师用业余时间开发的,只是为了提高教学质量,一篇论文都没发。试问中国的老师,忙着评职称忙着升官,还有人惦记着学生的教学质量吗?有老师愿意花几十年开发一款发不了论文的软件?
https://www.zhihu.com/question/402837414/answer/1300751365
我碰巧接触过的东西,数值计算有 octave/numpy/R 甚至 tf/pytorch(不完全是开玩笑),统计学有 scipy/SAS/R,流体力学仿真有 OpenFOAM,计算生物学有它自己的一堆开源库。碰巧都不(完全)是 matlab 一家独大的局面。
如果你所在的行业现状就是 “自己行业的核心算法居然主要活在一个商业软件的 toolbox 里”,那么不管有没有贸易战,有没有封锁,你都应该居安思危。人的命运本来就不应该被一个商业软件所掌控。
https://www.zhihu.com/question/402837414/answer/1299341619
至于Simulink这样现在无法替代的Matlab组件,也是92年左右和Matlab4.0一起出现的,也有快30年了。
中国程序员工资高应该是2008年以后的事,而且2012年以前,软件自主化正版化的潮流还都没起来。就用这几年时间去和别人30年打下的基础硬拼,还是很不容易的吧。
而且,工资高的程序员大多就职于在风口上、靠风投吃饭的那些互联网公司。其他地方的程序员,同一条件下的工资不比其他白领高出多少。Matlab这样的软件本身就是应用数学学科领域出来的,开发起来对程序员、产品甚至测试等各岗位人员的要求都相当高;有这种能力的程序员,在当今市场形势下, 更容易被互联网公司的高工资所吸引过去。
Matlab属于专业软件,面向的是已经高度细分的特定市场,潜在用户数有限,不好做成SaaS(很多应用场景下不能或者不总能连接外网),对性能和稳定性要求较高。这样的软件,在风投眼里不属于能长期带来大量热钱的产品。因此,他们对这种软件的替代品进行投资的欲望应该十分有限。
https://www.zhihu.com/question/402837414/answer/1301902986
背景
首先想要理解这个问题,我们需要先了解以MATLAB为代表的科学计算软件的市场,它们的开发需求,以及技术需求。
以最为常用的线性代数算法库为例,这些算法实现不仅需要理解前沿的应用数学知识,此外还需要开发者对计算机体系结构,编译原理有比较好的理解,从而使得开发出来的求解器不仅仅在算法上快,也在实现上快。也只有这样才能解决非常实际的生产/应用/科研问题。比如你知道虽然QR分解,SVD分解等算法原理似乎没有那么的难,但是想把一个实现做到在小尺寸和大尺寸下都非常高效,并且提供硬件加速(比如GPU)和分布式计算,并且能够支持一些非标准类型(非IEEE标准的浮点数)其实是一个很难的事情。它对程序员的要求会很高,比如有时候函数递归实现一些算法比for循环有更好的cache locality,而有时候一些算法对GPU又更加优化等等等等。并且在特定的硬件限制下还有可能会对算法进行修改,比如arnoldi分解在GPU上实现需要在CPU上维护一个小矩阵等等。这些技术知识放在全世界的任何国家都不是多数程序员会愿意学习并且思考的,因为它们不仅很杂,而且可以很难。
而要知道线性代数只是众多功能里最简单的一环。
这一类软件的大部分应用场景都是做原型,算法开发等。所以往往是跑出结果就行,这也决定了它们对相关生态环境有着很大要求。所以实际上在已经成熟的应用里完全替代其中的任何一个都几乎不可能:它们已经成为了各个行业里的标准,它们的应用领域也往往并不完全交叉,仅有少量重叠。我常常会在各种地方说应当去使用Julia来代替MATLAB,但是我也要承认simulink的生态依然是很难替代的。
实际上因为MATLAB的商业特性,以及很多缺点(我们也要承认它是有缺点的),前前后后,从Octave,Python到Julia,开源社区已经出现了很多尝试替代MATLAB的努力。这些努力长则有三四十年,短则也有像Julia开发了十年的工作。即便如此,MATLAB也依然没有被完全替代。足见想要做出一个替代品是非常困难的。
这些特性决定了这类软件的诞生往往开始于某个行业的从业者的个人需要,而之后慢慢演变成一个在一些领域里主要的工具箱。这些项目的发起人以及早起开发者本身都是非常珍贵的人才资源,他们不仅熟悉相关的专业知识,也同时熟悉软件开发,高性能计算等技术知识。而实际上我们是非常匮乏这类人才的。甚至在全世界的范围里,这样的人才都很匮乏。以至于别说中国了,美国的公司也不一定能找到多少。
原因
首先当然要考虑到历史的进程,中国的整体科研实力才刚刚起步,我们不能指望在十年或者二十年前去填这个坑,那个时候有更重要的事情要优先去发展。而我们的博士学位在人口中占有的比例也依然是不够高的。
其次是需求,一方面,虽然都是程序员,但是写前端,网络,数据库,编译器都是非常不同的技能树。而科学计算类的软件则和之前这些传统计算机行业有着更加不同的技能点。实际上如果不是深度学习的大规模应用,计算机行业可能都不会这么关注线性代数和微分方程等以浮点为主的实现。所以一方面,做淘宝,做数据库的程序员在技能上并不容易转向科学计算领域,毕竟隔行隔座山,另一方面,解决大众问题的软件需求更大,短时间内的收益更高,选择去做这类软件也是大部分人很自然的选择。我在上一个部分说过:这类软件往往源自于从业者解决自己问题的代码。
匮乏支持,这也是很重要的一个点。这类软件的开发一直在国内得不到比较有效的支持。一方面是科研的导向是以论文为主的。另一方面,我们完全没有支持这方面开发的基金。而实际上频繁使用此类开源软件的朋友想必一定听说过NumFocus吧?NumFocus这个基金会支持了我们今天耳熟能详的大部分科学计算软件,例如已经成为了几乎所有人标配的两个:numpy和matplotlib。
而我这里所说的支持,并不只是钱,钱很重要,但不能解决所有的问题。而是从社区的运营,软件的宣传,组织开发者之间的合作以及法律援助等一系列支持。而这种支持是需要有目标的,而不是简单的设立一个奖项发了钱了事的。这是我们在国内做的不够好的地方,也是急需改进的地方。
去年我尝试为Julia中文社区以及我们自己的软件寻找一些国内的支持,但是最后发现各方面的手续,流程对这些特定领域的小项目都很不友好。比如如果Julia中文社区去收取企业/个人捐款,并且按照正规流程做帐,税收会占掉整个捐助的大约20%,而申请非盈利组织则需要挂靠政府部门。而作为对比的是,我来到加拿大以后立刻有开源基金愿意资助我们的开源项目。
我们国内现在只有企业在做和业务相关的开源项目,但是对于这些科学软件的支持,真的非常匮乏。而这些科学软件是完全不可能靠着短期的商业变现活下去的。因为即便是领域内非常重要的软件,其用户数量可能也并不是很多。其中一个例子就是qutip,这是一个几乎所有做量子物理实验的组都用过的软件,但是它在GitHub上的star也不过800多。我在上一周和它的核心开发者Nathan交流的过程里了解到,它也是靠着日本RIKEN等实验室和开源基金提供的支持活下来的。
还有很重要的一点是我们国家很多公司的996制度。996制度实际上破坏了大部分程序员的创新性,把他们变成了所谓的“社畜”。。我相信很多已经在上班的同学都有一个感受就是身体被榨干。那就算工资很高,怎么还会有心思去学习和挑战这些更难的东西?
开源运动还有待发展,MATLAB的模式已经是上个世纪遗留的模式了,想要做新的科学计算软件,不可避免地需要开源。因为需求决定了招一整个团队把所有的东西都做出来是不现实的。而开源不仅能够提供更好的生态,更新的算法,也更加方便为整个社会积累人才。但是我们现在的开源运动还不够普及,我们支持开源运动的基础设施还不够完善,我们对知识的获取也还不够开放。这些都是很大的障碍。
解决问题
如果我们能够坚持这样的努力十年,我相信十年以后,有没有替代品这个问题就变得没有那么重要了。
其次是需求,我想既然最近这个问题已经被很多人关注了,想必需求已经在产业升级的过程里开始扩大了。所以这也许已经不再是问题了。
技术层面,我不看好任何尝试用类似模式替代MATLAB的产品,因为想要在2020年复制MATLAB的商业模式是非常困难的。MATLAB实际上也是通过它在一些领域的生态霸权来把软件卖给别人,而想要实现这样的生态壁垒不是一朝一夕就能够形成的。并且在学术界开源共享也是趋势,与其被商业软件牵制,不如做出有我们自己影响力的开源软件,拥抱开源社区,看看Python,Julia,R等开源软件里的功能缺什么,把开源的软件做到更好,让全世界都加入进来 -- 美国政府想要闭关锁国,那么我们就应该做那个更加开放的。MATLAB的繁荣不是靠一个国家,一个公司的人去完成的,而是作为一个有先发优势的软件,在过去几十年的时间里,全世界的人去贡献生态而做到的。
然后就是支持了。我尝试联系过集智俱乐部的朋友去帮忙推进一个用于资助科学计算的开源基金的事情。但是进度非常缓慢,尤其是今年遭遇了疫情之后,打断了很多事情,也许有渠道的朋友可以帮帮我们。亦或者有公司,个人愿意牵头去做一个支持中国开源的科学计算软件发展的基金都会是非常好的开始。
另外一个方面,我其实有注意到大佬@贾扬清在之前一个回答里提到的阿里巴巴的开源运动。现在每年阿里巴巴也有一个编程之夏的活动。如果我们能有更多这样的支持,以及更多孵化开源的科学计算软件的支持,我相信下一个十年我们就能用上更多更好的科学计算基础设施。
https://www.zhihu.com/question/402837414/answer/1300914215
要么我们从头做起开始建模CDL和TDL,要么使用Matlab现成的。区别在哪里呢?建模CDL和TDL会涉及到很多编程内部逻辑bug问题(并非编程报错),我们大概率要耗费掉一个硕士毕设的时间(大概6个月)让她他研究这两种建模以及3GPP文件里的参数。
我们不想做的工作是因为已经有某位或某几位专业人士把这个CDL和TDL写好了,并且我们相信他们应该已经尽可能地debug了。
稍远一些,phased array库,我相信在座的不少是MIMO,beamforming研究人员,各种MRC,ZF还有dirty paper可能已经聊熟于心了, 但是你们愿意徒手算一下16*16URA给定steering angle后的directivity吗?如果天线单元不是isotropic呢?甚至不夸张的说,很多人都不愿意费时费力的去写一个通用性很好的计算directivity的程序,比如适应不同的array pattern,不同的inter-element spacing等等吧。
Matlab究竟是什么呢?单从无线通信领域来说,这叫做站在巨人的肩上。无数同行贡献了classic或state-of-the-art的程序,使得我们不用没完没了地重复0到1,更多的用时间来实现1到∞。
https://www.zhihu.com/question/402837414/answer/1301820579
2.先发企业或者国家耍流氓。为了打击对手,突然采取这个手段,打击对手,同样的事情在IT行业内和其他行业也屡见不鲜。看看IT发展史 ,很多。特别是中兴和华为的事情。国外总说我们专制,其实无论欧美还是日韩对我国的企业都是这样。
3.国家其实有很多研究项目,就是做这些软件的,因为市场等问题,这些研究成果被束之高阁。随着时间的流失,产品失效,人员流失。
4.这类软件,从单纯技术角度不难开发,但如何形成有效的市场机制是需要研究的,否则类似问题会层出不穷。应该对相应的国外企业给予一定的惩罚。
5.目前的软件开发和行业结合会越来越密切。专业软件公司会越来越多。如何让这些细分的专业领域软件公司得以生存和发展。是面临的一个难题。