创造一门伟大的语言是很逆天的事,需要献祭一个伟大的企业的。
创造c和Unix的at&t实验室被献祭了
创造JavaScript的网景被献祭了
创造C# Delphi的anders来自borland,borland已经挂了
创造Java的sun microsystem被献祭了
创造rust的Mozilla也悬了
创造objective-c的苹果已经被献祭过了
以上只是玩笑,但是创造一门流行语言的确是投入非常大,回报周期特别长,甚至根本没回报,风险特别高的事情。
开发编程语言需要有那么一批很有才华又没有生活压力,可以仅仅出于兴趣做事的一群人,社会和行业也能包容他们的项目失败。
目前国内的IT行业没有这样的人,有也很少很少,即使年薪百万以上的,也要发愁年底的KPI,下个月的deadline,手头的bug和需求。
业务增长的时候大家都忙着搞业务赚钱,业务不增长了才会去搞技术和概念,然而这并没有什么卵用,目前还没见过哪个互联网公司靠技术重新实现业务增长的。
国内也快进入这个阶段了。
我想你可能对"厉害"这一词存在一些误解。我拒绝过阿里、做过微信支付的接入,在某老牌互联网公司搬过几年砖,去过几个国家的Google见朋友,聊他们做的事情,包括但不限于Google实时搜索引擎的实现、集群分布式编译器、LLVM编译器、连接器,以及C++适配ARM、MIPS、PowerPC等非x86架构编译器、看过Google的closure compiler一些代码。我很明确地和你说,以Google的技术水平,他一家可以把百度、阿里、腾讯三家同时吊打,也许还可以再把国内的JD、360、PDD和字节当成下酒小菜,Oracle、Intel、微软、Apple只需要站在旁边看着就行了。国内的互联网公司有的只是业务竞争力,而没有技术竞争力,主要是国内赚钱也不需要在技术上投入这些东西。
给你们看看微信支付退款结果用ECB加密的API,AES-ECB这在教科书里已经明确告诉不能使用的加密方式被当成商业加密方法来用了
这是中国一线的大厂,我还要吐槽仓的appId,appid,腾讯微信团队整个一精神分裂,喂开发者吃屎
在一个API文档里我同时见到了无驼峰、小驼峰、下划线三种标准,我工作这么多年,绝无仅有,这是港股市值排名第二的中国互联网公司给的API。业务赚钱多不等于技术厉害,跟阿里几个P8、P9聊下来的唯一感觉,他们总想让自己看上去高高在上,但实际水平烂得要命我的前同事受不了他们工作一年就走了。
再看看代码鵝厂代码文档,简直亮瞎了我的钛合金狗眼了~
别说编程语言了。连云服务的官方 SDK 都做不好,竟然没有可取消异步 API(今年是 2021 年)。就这种设计水平,折腾出来的编程语言能有进步性吗?就算能用的,只怕也是绑架爱国情绪,改关键字和语法细节的国产套壳吧。
一部分答案真是醉了。明明是剥削严重,分配不均(各种方面),导致创新不足的问题。偏要搞得被害妄想一样,扯到什么话语权上面去。
事实就是,在设计编程语言这一领域,国内这些「厉害」的互联网公司一个能打都没有,不如易语言的设计者远甚,更比不上一些非商业力量。
最后我问一句,Microsoft 整 F*(FStar)能获取什么商业利益?
早期中国互联网的核心是啥?C2C . copy to china。
那么他们copy 的都是啥?
2000年左右,4大门户网,抄袭的是门户网站。
博客中国的方兴东,因为大学做实习生给IBM翻译了几篇blog相关的内容,然后抛出来弄了么这一个。
百度也是给谷歌打工,后来发觉可以移植到中国来。
后面携程上市,也是抄袭类似的商业模式。
我们再说电商的阿里系,淘宝早期根本不承担快递,不承担库存,只做信息发布和找流量。甚至后来的聚划算,根本不管你的成本和库存,野蛮要求押金20万,现有零售价降一半。
再看一看,后面脱离BAT体系发展的其它互联网公司。
美团,饿了么什么的,连外卖员都不是他的,得自己成立一家公司和他签约;滴滴也差不多,新一中形态的出租车牌照公司;蜂巢、菜鸟驿站等快递柜与代收业务,都非常会转嫁矛盾与责任。
当然,这里也有一个号称自己是互联网的小米,给雷军一个人的奖金都比每年的研发投入高。
那么,这就有了一个很简单的结论,商业模式决定一切……(这话是马云在央视火爆全国的《赢在中国》里的名句,同期还火的另外一个货是牛根生,蒙牛的老板。)
在业务层的结构上都在抄袭了,自然不会去创新什么基础技术了。
其实吧,说句公道话,阿里有钱了之后,在做阿里云业务的时候,也在做去IOE的工作,算是某种意义上的“基础性”工作,当然与编程语言设计这种还是上层了很多。
计算机技术真的是一门复杂庞大的学科,芯片制造到底层语言、BIOS编写(简单理解为初级管理系统也没错)网络链接与组建、标准化使用,涉及到的方方面面特别复杂。目前实力还不允许我们去领导编程语言的设计。(易语言这么多年了,也没见哪个厂家以这个语言为核心打造产品)
我们的希望是在第三代半导体资料的计算机基础科学领域中慢慢的增加话语权。
原因非常简单:因为焦虑。
我们来看看那些“大部分流行的编程语言”都是什么样的人设计出来的:
java语言之父:詹姆斯·高斯林,40岁左右做出了初代java。
go语言之父Rob Pike,约50岁时开发了go。
go语言的另一位爸爸:Ken Thompson,也是Unix操作系统的创始人,去谷歌造go的时候已经60多了。
python语言之父:Guido van Rossum,35岁发布了初代python。今年64了,头顶依然郁郁葱葱。
ruby语言之父:松本行弘,30岁发布了初代ruby。从中学起一直怀有发明编程语言的执念,27岁时开始搞ruby,在各位语言之父中算是相当年轻了。不过松本哥当年的环境比较特殊:当时日本经济萧条,公司没有业务,但按日本传统不能轻易辞退员工,所以Matz每天在公司悠闲地写ruby,心安理得地拿着工资干私活……
所以你看到了吗?能写出流行世界的编程语言的人,要么年纪大了没事闲的,要么被公司包养吃喝不愁。
总之,我们今天用的大部分编程语言,都是这帮吃饱了撑的中年老男人搞出来的。
那么,中国互联网公司的程序员每天在操心什么呢?
35岁的焦虑怎么转管理岗,否则被公司优化掉怎么办;
30岁的焦虑掉头发找不到女朋友;
25岁的,一半焦虑每天韭韭六能不能活到35岁,另一半已经被韭韭六得没有任何想法了。
啥?听说你小子想搞个编程语言?这个月的KPI完成了没有?还有福报吗?还有狼性吗?
等到知乎上搜不到“35岁程序员”这种话题之时,也许题主的问题自然会有答案。
其实,中国那些“厉害的公司”、甚至“厉害的个人”很可能已经做出了自己的编程语言,只是不对外公开、或者流行度很低而已。
(当然,大概率是基于现有各主流语言特性拼凑出的缝合怪,不敢指望有什么颠覆性的突破)
因为题主问的是“流行的编程语言”,而不是“公司内部关起门来用的编程语言”。
一门编程语言要想全世界流行,那它最起码应该是公开且免费的。
只要设计新语言真能解决问题、提高生产力,就一定会有公司去做,不过没有必要公开;或者,可以对一些企业客户开放,但也不太可能免费。
所以,那些公开且免费的编程语言,背后是什么样的公司在推呢?
有自己操作系统的公司。
比如,微软推自家的c#/.net,是为了让更多码农开发出在windows上运行的应用。显然,这样的应用越多,用户买windows、不买mac的理由就越多。
苹果废掉oc、强推swift,自然也是出于同样的思路,只不过立场相反。
那么请问,中国这么多厉害的互联网公司,哪个有自己的操作系统?
连自己的操作系统都没有,还要去设计自己的编程语言,免费给全世界用,你不想用还要花钱打广告说服你用?
这样的公司又是图个啥呢?
我最近出了两本新书,感兴趣的可以看看:
一本既不吹捧科学家的伟大、也不纠结历史细节、只想让你无废话看懂量子、还吭哧吭哧手绘100多张彩色漫画实验图解的硬核科普:
一本不屑于教Python和调参、只想和你探讨人类命运和智能本质的AI科普:
不要用“国外起跑早”麻痹自己了。
中国IT行业就是存在很严重的问题。
2004年,曾有一篇很著名的文章《Lua让我脸红》。可惜的是,如今16年过去了,看起来依旧没有什么改变。文章链接如下:https://blog.csdn.net/myan/article/details/490。
我们经常说操作系统国外已经形成了垄断,做了几十年,我们即使做了操作系统也不会形成生态,数据库,编程语言也是类似道理。
但是这几年的发展,我对这类回答产生了怀疑。
以10年为单位,从2008年到2020年,IT行业涌现了很多新的技术,新的框架,新的工具,新的概念。
这不能再用国外起跑早麻痹自己,因为我们也是一样出发的。
移动端诞生了Android和IOS两大操作系统,我们没跟上。唯一有点消息的还是尚在构思中的鸿蒙系统。
编程语言中,Kotlin在2011年发布,Go在2009年发布,Swift在2014年发布,Dart语言在2011年发布,Groovy在2007年发布。而国内这10年来,几乎还是零。
数据库中,InfluxDB在2013年发布,MongoDB在2011年发布,Redis在2009年发布。是的,这些看起来“古老”的数据库,其实都诞生于10年内,可是我们还是没有。
大数据,消息队列里,Kafka在2011年发布,Storm在2011年发布,Spark在2009年发布。这些技术构成了现代数据分析的基石,我们还是落下了。
机器学习领域,Deeplearning4J,TensorFlow,Caffe,Keras等等,都是近年来才出现的技术。可惜的是,还是没有我们。
前端,后端框架,开发工具,测试工具,基础库(类似Okhttp,RxJava等等),Docker,几乎都与我们无缘。
更不要提工业软件了,几乎是一片空白,以至于哪怕是华为这样的企业,被禁用工业软件后也步履维艰。
虽然我们也有一些优秀的框架,但还是掩饰不住我们在IT基础领域的缺失,无论影响力还是应用广泛程度都远不如人。论“自主原创程度”,IT行业恐怕可以从倒数名单中找到。
这绝对不是一句“我们起步晚,已经有现成品”就能推辞的。
担心在于,别等到10年后,还有人继续问这个问题,我们回答还是“别人已经做了”。
ReScript 官网可以在国内正常访问了(http://rescript-lang.org)
这也侧面说明了话语权的重要性:网站是由社区志愿者搭建的,之前因为某些原因不能访问,但是在我表达了需要VPN很不方便的事实之后,最终我们保障了国内程序员的正常访问。
我们会继续努力健全Rescript 的生态,打造第一个华人主导的世界流行的通用程序语言。
=============
更新一下:写了第一篇针对中文用户的程序语言设计科普文章 ReScript的特性一: 鲜为人知的Row polymorphism - 知乎 (zhihu.com)
==========================================
作为国内可能是唯一的,真正意义上完整实现过编程语言和整套工具链,并且有相当国外商业用户的人,看到这个问题有点五味杂陈,说说自己的感受。
先说说自己的背景
自己是Rescript的主要作者(github地址),全职从事这门语言的开发已经有7年了,前三年在国外,后四年在国内。使用该语言的大公司有facebook, SAP, 索斯比,ubisoft(育碧)等。我们之前在维也纳和芝加哥等地也开过几百个人的User conferences。
使用这门语言授课的学校有常美国的Ivy League布朗大学,印度的IIT等。
设计一门语言是要来解决一些问题的,如果只是语法上的修饰像木兰甚至coffescript这种,可以作为一个hobby project, 但是很难称其为一门独立的语言。因为切换一门语言的成本是巨大的,需要切换整个生态系统,学习java可能只需要三两天,但是熟悉jvm的生态却可能需要几年的时间。如果使用一门新语言的好处仅仅是语法上好用,这不足以使用户进行迁移。
我当时开始设计这门语言的动机和typescript类似,但是更纯粹一些。设想的卖点主要是reliability, scalability and performance。
Reliability体现在类型系统比typescript更完善,从理论上杜绝了runtime type exception。
Performance主要体现在运行性能上。
Scalability主要体现在编译性能上,我们可以在100ms左右增量编译一个10,000文件的大型项目,这点很符合大公司的胃口,因为大公司的代码库很大,编译性能严重影响程序员的生产力。
做一个prototype的编译器可能只需要几周时间,但是做一个真正能用的确需要几年的时间。因为编译器基本上是所有运行软件的trust base,基本上是很少有bug 的。试想如果你的语言用户写代码出问题了,老是怀疑是不是编译器出了问题,那生产效率可想而知。
我当时用了6个周末做了一个可以demo的编译器,后来填各种坑大概花了两年时间才比较稳定可用了。
光有一个编译器是不够的,用户需要组织自己的代码,导入第三方依赖。这涉及到一个易用的构建系统(build system), 包管理(package manager)。试想如果你写的编译器很快, 但构建系统很慢,那么用户的感觉依然是很慢的。
build system和package manager 涉及到很多设计和人交互的问题,一旦引入了些糟糕的设计,因为后向兼容的问题就很难改正了。一旦牵扯到设计,就需要反复迭代,也是一个耗时耗力的过程。
和二十年前不一样,现在的语言基本上都是 batteries included-- 自带一个厚重的标准库。光是标准库的API设计就要花费很多时间了,还有厚重的文档。在语言没有获得足够的popularity之前,这基本上都需要编程语言团队自己去实现,工作量可想而知。
现在的程序员已经被各种现代IDE惯坏了,如果没有好用的智能感知是很难吸引到用户的。做一个好用的IDE是很难的。不像编译器遇到错误可以直接报错退出,IDE需要一定的fault tolerance: 在错误输入的情况下依然要给出有意义的提示。这一块我比较幸运, 主要由社区的人和瑞士的一个同事来主导。
看到这里,你会知道设计一个真正有人用的语言的工作量比你想象中大太多了。但是最烦心的工作其实是社区推广和人打交道。不像在公司都是熟人关系,社区里各种人都有。 面对asshole不能爆粗口, 因为你写出的东西可能会被其他人巧妙的“摘”出来,然后批判一番。这里面个中心酸, 说多了都是泪。
有钱不是万能的, 没有钱却是万万不能的。按上所述,培养一个成熟的语言及其生态系统需要至少 30 man-year 的投入。团队的人水平按平均水平算,平均一人开支50万美金每年(注意是开支不是员工收入),这个投入大概就是一个小目标。
这么小的投入很可能是不够的,对公司的初期回报 大部分只能是PR方面,国内的公司还面临一个问题:花了钱不一定能找到合适的人。
做自己的语言是个很需要有情怀的事情,困难很多。但是长远意义上是一个国家在基础软件问题上的话语权的问题,还是衷心希望国内有些有情怀的公司能把这个事做起来。
因为贫穷。。。
身体上的穷或许可以通过几顿饭缓解。精神上的穷就需要几代人才能改善。
类似于编程语言这种发明轮子的行为,需要这个社会上出现一大批高学历社会闲散人员。这些人衣食无忧,吊了郎当。随便上上班,还能维持生活。
只有这种人才能吃饱了撑得没事干,有一天晚上突发奇想。干这种自己设计编程语言的工作。
在中国这种严重内卷的社会。他们的生活是这样的。
上完小学上中学,上完中学上大学。
大学毕业忙就业,上班期间生孩子。
生完孩子养孩子,奶粉尿布哺育忙。
学区房,补习班,辅导功课到深夜。
等到孩子上大学,又帮孩子买房子。
等到孩子结了婚,接着帮忙带孙子。
等到孙子长大了,半截身子入土了。
跳上几年广场舞,把腿一蹬挂墙上。
当里个浪!当里个浪!
大部分高学历人员光是活着,就已经耗尽了所有的力量。没有闲工夫做这种事情。
1、设计过
2、与大众直觉完全相悖的是,编程语言特么每天都能被设计出来成千上万个。
3、超过一半的程序设计语言在设计出来之后就被扔在一边了,只有极少数的会有人写解析器。
4、写了解析器的语言里面只有很少一部分会实际拿来用。
5、拿来用的里面只有极少数会拓展成通用目的语言。
6、被拓展成通用目的的语言只有极少数的会被组织内部认同和推广。
7、最终出圈的语言万分之一不到。
8、能够流行起来的再除以一万……
设计程序设计语言压根儿不是什么高大上的事情,你随便找个语言来,把关键词稍微改改就能成一个新的语言,然后把Tokenize改一下就可以编译了(毕竟你只是改了关键词,不涉及到词法分析之后的步骤)。
当然有人会说,你这压根儿没有创造新的语言,你修改后的语言本质上和原来那个语言是同一个。呵呵,而事实上就是,如果http://VB.NET和C#这俩语言都砍掉不超过20%的元素,这俩语言词法分析后就特么是一样的东西……你说这俩是一个语言?
所以说,程序设计语言的本质是什么?
你只需要把键盘上几个键交换一下位置,然后按照原来的键位输入一段程序,这段新的程序就构成了一个新的程序设计语言。譬如说我把p和b交换一下位置,那么public就成了buplic,private就成了brivate。很好理解吧,这样我就完成了一种新的怪异的C#语言。
但是这种变化是没有意义的,没错,但是我们说,用int表示32位的整型和用integer_32表示32位整型有什么区别呢?程序设计语言就是这么个东西,就像qwerty键盘一样,大家已经习惯了,你就很难创造一个新的出来。在原来的基础上修修补补,如果是小修小补的话,大家没有动力去学习新的语法。如果是大开大合的话,大家就难以适应。
一门流行的程序设计语言的诞生需要一个契机,就像键盘布局一样,这个契机过去了,小修小补没人用,大开大合更没人用。
所以,设计一个流行的程序设计语言需要超人的洞察力和对时机极其精准的把握。没有合适的时机,你再牛逼,也没法创造出一个流行的程序设计语言来。