国内程序员那么多,为什么不开发一个属于自己的编程语言?主要原因是:中文编程技术上不然,但做生态太难了!
先说说纯技术上的难度。看到很多回答说操作系统、CPU、芯片、指令集等是英美语系的人发明的,所以中文编程水土不服,开发难度大于英语编程。其实这种说法是完全错误的!
编程语言分很多类型。第一种是像C、C++、Go这样的直接编译成本地机器码。第二种是像C#、JAVA这样的依赖虚拟机,编译成中间语言(字节码)。第三种是像JavaScript、Python这样的依赖解释器,不需要编译。不论哪一种类型,都不存在制约中文成为优秀编程语言的技术瓶颈。
对于第一种类型,不论中文英文,最终统统编译成基于特定CPU芯片指令集的指令。在操作系统看来,它们是完全无差别的。性能上没有任何区别。对于第二种类型,编译成中间语言,在虚拟机看来,同样是无差别的。这里所谓编译,说通俗点就是“翻译”,将中文或英文写成的代码翻译成机器指令或中间语言(字节码)。
对于第三种类型,解释器作为进程运行于操作系统,由它直接解释我们写的程序代码。比如JavaScript,解释器就是浏览器。离开了浏览器,JavaScript是运行不了的(这里不考虑特殊手段,其本质也是其他解释器)。很明显,解释器既可以解释英文代码,也可以解释中文代码,甚至未来还可以解释人类自然语言或语音。比方你用普通话向一个智能家居说“开空调”,然后内置的解释器就会将空调打开。说明就连中文语音都可以编程了,更不用说中文文字!
总之,技术上看来,中文编程相比英文编程没有任何更难的地方。这与中文输入法比英文输入法难做没有任何可比性。
下面讨论另一个重点,生态问题。
正如同工业化一样,现在越来越提倡合作开发,从*造起的汽车厂已经不复存在。编程语言也是如此。现在没有任何一个流行的编程语言开发团队可以开发出所有的相关库函数和框架。早些年,似乎微软具备这个能力。微软能开发出从操作系统,编译器,数据库,图形界面框架,显卡加速动画,浏览器支持库,web开发框架等等一系列“配套设施”。但是,现在已经明显力不从心。
怎么办?那就需要借助全世界的力量去共同维护,维护这个生态。
说通俗点,假如用中文开发出一个编程语言,单从编译器(或解释器)来说,难度并不大。但是还有很多工作要做。因为还需要开发很多很多的库函数给其他开发者用。随便举一些栗子。XML和json解析,主流数据库连接,http客户端和服务器支持,主流加密算法支持,图形界面支持。这些工作量非常大。它们不是必须的,但是如果支持的太少,该中文编程的使用者就会要什么没有什么,什么都得自己写,会很累。比如想解析一个json,居然发现官方不支持,怎么办?网上搜,资料又少,也没有搜索到第三方库,只好自己写了。这就叫生态做的差。
我们还可以往大了说,该编程语言是否有现成的2D/3D动画库,是否有现成的科学技术、数据挖掘、深度学习库,是否有现成的web mvc框架,是否可以支持Windows、Linux、安卓等多个操作系统的跨平台开发。很多很多!这都需要无数的高手共同去开发完善,绝对不是几十人、几千人团队可以搞定的!
生态这种问题还有马太效应,即强者更强。试想,一个编程语言,如果本来生态就差(配套的各种库函数,框架太少),那么就吸引不了开发者。开发者不愿意帮着开发各种开源库和框架,那么生态就好不了……当年微软的手机操作系统就是这样,其技术上非常优秀,但是WP手机上能安装的APP实在太少,连微信都没有,最终用户就不愿意买,都去买安卓和iOS了。WP用的少,开发者自然就没有激情去学习这么一套开发技术。就更没有优秀APP被开发出来。而指望凭着微软那区区几十万人去开发APP显然不现实,它甚至连微信是个啥可能都没有搞明白。就算知道微信,那滴滴、京东、淘宝、王者农药、抖音呢……
总之,生态需要动用全世界的牛人一起去完善!
好了,回到主题,如果开发一个中文编程语言,那就只有懂中文的人才能完善这个生态,而IT发达的其他国家基本不会过问。不是涨别人威风,就我们这点程序员,真做不成像样的成熟大型库。我们就说火的一塌糊涂的Python,它是荷兰人发明的,荷兰人说话用荷兰语。但是如果当初真的限制于用荷兰语来实现Python,今天就没有这个地位了。Python的成功得益于它的生态。连Alpha Go这样的围棋大师,都是用了Python,底层深度学习是谷歌的tensorflow,其接口是Python。没有这些大佬的“推波助澜”,就凭那帮荷兰人自己玩,会有今天吗?
我们现有的中文编程语言,像易语言,习语言,为什么没有成功?毫无疑问嘛,生态差!如果用的人多,就会开发出很多开源的库,同时也会有很多人提出修改建议,有了建议,易语言习语言就会不断版本迭代,不断完善。怕的不是技术,怕的是没有人提意见建议,没有人帮着一起改(假设开源)。
另外再说一个原因,做中文编程语言的必要性不大,远远不如开发芯片的必要性。世界上的开源的,优秀的编程语言很多,我们开箱即用,不存在付费、版权的问题。
总结一下,国人没有开发中文编程语言,不是因为技术上难以实现,而是生态太难做了。
熟悉编译原理的工程师,很容易开发出一门属于自己的编程语言。但是实用性强不强这个就得待市场验证了。我曾针对工控环境,开发过一门脚本语言。我用过易语言,但是不好用。用中文编程,不如用符号编程,用符号编,如int i;完全可以写@ i;类似这样。只是取决于编译器或解释器怎么处理这句话而已。要想开发出一门多人用的语言,必须合乎多人的语言习惯。像中文编程的语言,本人觉得必须得从编译器底层搞起,指令集跟中文语法适配,且兼容cisc,risc指令集。像这样的工作,一般公司不会搞,不盈利难以持久开发,且可能纰漏很多。我们还是继续用c,c++,java吧……
Python语言不是美国发明的;
Ruby语言也不是美国的
C#,Delphi的发明者同样也不是美国的。
但他们的关键字都是英文。
并不是我们不想发展中文编程,而是在当下,中文编程的市场实在是不怎么乐观。
客观来讲,汉语编程确实有一定的好处,更加适合国人的编程习惯。但不可否认的是,汉语编程存在的弊端,也不在少数。
汉语编程要复杂很多相对于简洁的英文编程,汉字要复杂太多了。而且在输入方面上也没有英语快。并且汉字在意思的表述上容易有歧义,不太严谨。有的时候一字多义,一词多义就会导致机器难以识别。此外,有些相近的含义词如何去划分也是个令人头疼的问题。写长句子吧,又太浪费时间。大大加深了开发的成本。
大环境使然,汉语编程注定只适用于小范围先说明一点:使用汉语的开发语言是有的,比方说易语言,已经有将近20年的历史了。
但问题是,易语言这些年一直没有流行起来,大多数情况下都是圈友们自娱自乐,甚至有一些人用易语言来写外挂,主流依旧是Java,python,C++等。
究其根本,就在于计算机本事就是由国外开发,底层的东西都是拿英语做的,一个汉语的编译器实在没有多大意义,汉字编程只是一个表皮。众所周知,开发的过程中是很容易出BUG的,假设我是用汉语编程的,由于体量太小我根本就找不到参考的文案。这就直接导致了汉语言编程无法大范围的推广开来。语言最终是要落实到产品上,然后面向市场面向客户的,这些产品有电脑,手机,穿戴设备,智能家居……难道全部都要搞成中文的?
所以综上所述,汉语编程完全可以实现,但是根本做不大,更别提做到Java,C++那种级别。因为汉语确实不适用于编程本身,归根到底还在于国人在计算机发展时的落后。当然了我们也完全不用自卑,可以把功夫花在别的技术上不是更好吗?
很多个以为编程要高深的英语,其实这是一种错觉。编程的实质是将解决问题的方法告诉计算机,而要构建这些方法就会产生一些基本的结构,如:顺序结构,这是基本的,只需将过程一步一步地写出来就行了;还有分枝结构,在什么条件下执行某些操作;还有循环结构,重复地执行某些操作等等。为了实现这些,每种编程语言都有一套自己的关键字并且关键字不多比起英语数以万记的单词来说少得可怜,这些关键字和一些语法规则构成了编程语言基本框架,然后是一常常见功能组成的内置函数丰富了语言的功能。如果一定要汉化,不是不行,将关键字改成中文,内置函数名改成中文,但是改了之后,你会发现使用起来更麻烦了。比如(ⅠF i>10 THEN a=a+1)这是一简单的BASⅠC语言写的一行代码,功能是当i的值大于10,让变量a增加1。如果汉化写成(如果i>10 那么a=a+1)虽然有汉字好理解一点,但输入方便吗?(题外话:也许有些人说汉语拼音化就好输入了,但有英语简单吗?要拼音化那你不如就直接说英语写英语算了。)
所以编程还是用英语表示关键字简单方便,没学过英语也能掌握,如果连这几个关键字都掌握不了,别说学编程,学语文、数学都成问题,还学什么编程!
当发展到超高级脚本语言时,汉字的高熵值就开始有优势了!因此,超高级脚本语言以上时,可以采用汉语编程,更有优势!
汉语编程不等于全汉字,必然会英汉混用,因为低熵值精准的低层语句必须用英语。汉语程序更适合超高级型脚本语言或半自然语或自然语言尤其适合语音指令,这是英语程序难于企及的,但向下兼容英语程序也是必须的!
如下图:
作为一枚资深程序员,有必要来回答一下这个问题,其实对于熟悉编译原理的工程师,如果想要开发一门语言,并不是什么难事,而且目前国内是有自己的编程语言的,易语言和习语言(C语言中文版),但为什么没有大规模普及呢,其实就是一个实用性强不强,普通用户能不能接受的问题了。
举个浅显的例子,比如我们的文字,我们的文化,都是几千年流传下来的,都是我们的老祖宗积累下来的,而没有积累的东西在国内是很难流行起来的,就跟编程语言一样,当C++,Java,PHP这些语言在国内已经扎根几十年的情况下,主流网站和各种应用都在使用这些语言的情况下,如果现在有中文编程语言的话,还会有人用麽。
在国内开发一门语言并不难,难的是由语言建立起来的各种基础设施和应用,个人认为最主要的还是计算机的生态圈,现在计算机的生态圈已经构建的差不多了,我们使用的编程语言只是这个生态圈中的一环而已,因此,编程最大的问题就是跟整个计算机生态圈相兼容,随着现在科技的发展,在国内开发出一个操作系统或者编程语言根本就不是什么问题,问题是开发出来了谁会用,在国内,除了骗取经费,基本没什么市场。
好了,仅仅浅显的聊这么多吧,希望能帮到作者。
直接给出结论:因为没必要。
1.我们有人做过一套所谓的“我们自己的编程语言”,出名的有易语言,不出名的还有其他一些语言。简单来说,也就是汉语编程。不过讲真,易语言说白了就是给C++套个汉语的壳子,把关键字翻译成了汉语,而即使你学C++这样的大杂烩级别的编程语言,所需要记忆的关键词也不过几百个而已。
2.假定我们需要一个汉语编程的语言(就假设我们认定用汉语做的编程语言会更加好理解吧),或者说的更夸张一点,编程直接是我们中国人发明的,那么会是怎样的呢?
众所周知,编程最根本的是机器码,也就是二进制,用开关来输出/输出指令。外国人用“0”和“1”来表示,那么中国人呢?
有可能是阴阳,或者是借用八卦的“—”和“--”来表示。
那么写成机器语言可能就会变成:
阴阴阴阴阳阳阳阳阳阴阳阴阳阴阳阴阳阴阳阳阳阳阳阳
或者——----—--————------————--之类的吧……
然后假设它会像现在这样,出现各种高级语言,那么写出来代码:
高级一点:甲 加一平五后出之 乙三 又丁六之于丙五入栈三 反丁六加甲 末阳杀之 末阴入栈四 乙三与甲或丙一补之入栈三 栈三出之 栈三出之 栈四出之……
再直观一点: 先圣标准库云 出入通畅
实函数 主 无参
言 你好 世界 你好 言叶
回禀 零
再直观一点:
马者
机密
整数 眼睛 鼻子 嘴 蹄子
阴阳 钉掌了没 健康与否
实数 日食青草 日食干草 日食黑豆
公开
实函数 吃草量
实函数 钉掌
子类 騩者 马者 字 毛色 浅黑
子类 骊者 马者 字 毛色 深黑
子类 雒者 骊者 字 鬃色 白
子类 驔者 骊者 字 脊色 黄
……
你可能大概其能看懂它是在讨论那个方面的东西了,但显然你仍然不知道这个函数是什么意思。
甚至,我们的老祖先为了工作方便,在行业内部,就好像《易经》一样,往往会发明自己的一套表意符号。
比如过去的减字谱
你可能会以为这是喃文,但这确实是我国古代的古琴减字谱,如果你看过《笑傲江湖》,或许还会记得里面有江湖人士因不认得减字谱而认定令狐冲手里的笑傲江湖谱是辟邪剑法的桥段。
还有工尺谱:
这是《玉簪记》的谱子,可能对古典文学或者戏曲有所了解的朋友,还能把正常的大字读出来,
长清短清,那管人离恨?
云心水心,有甚闲愁闷?
一度春来,一番花褪,怎生上我眉痕?
云掩柴门,钟儿磬儿在枕上听。
柏子座中焚,梅花帐绝尘,
果然是冰清玉润……
但是旁边标注的唱腔调门儿,只怕完全抓瞎,一点儿看不懂了。
我说这些,重点是想说什么呢?
你以为编程语言是英语吗?不是。编程语言就是一门语言,语法完全不同于英文,只是标识用了英文单词,这个可以理解为自然语言中的借词现象。而事实上,这种标识完全能用中文代替,火星文也可以。
你以为编程语言的标记是英文,所以英语母语的人,学编程很有优势?是,但没你想象的大。他们的优势在于,介绍语言特性的资料,一手的都是英文。中文的都是二手,时间上会晚于国外,还有要是翻译功力不强,曲解原作意思,或未表达好(比如“句柄”、“鲁棒性”这种词),我们读者,就只能掉入深渊了。
大家好,我是王小编。
首先想说一句,你能想到的问题其实程序员早就已经想到了。国内程序员那么多,为什么不开发一个属于自己的编程语言,其实中文的编程语言也有,只不过不普及,现在国内的大部分的编程语言已经被JAVA、Python、HTML、PHP等编程语言占领了99.9%以上,只不过很少人去用而已。
首先来说一说编程不用中文的原因?
众所周知,开始计算机技术的国家是美国,美国不仅仅占有大量的计算机资源,就连编程语言也被美国统治,我们现在使用的操作系统都是国外的,比如Windows、iOS、Linux等等,编程软件大多数是基于他们的操作系统,而且字节编码采用的都是国外的标准,要想做到使用中文编程,必须要做到自己开发出一个操作系统,这才是关键,才能做到计算机软硬件结合,有一个属于自己的知识产权。
中文编程语言有哪些?
(1)易语言
易语言是一门以中文编程的计算机编程语言,以“易”著称,其创始人问吴涛,起初,易语言名字称为E语言,最早的版本是在2000年9月11日发布,创造易语言的初衷也是未来让国内程序员不再跟随国外的思想走,有一套属于中国人自己的编程语言。十八年的时间告诉我们,这并没有成功。
(2)习语言
习语言被称为国内的“C语言”,它拥有一套完备的编程语言和与其相配套的工具组成,主要初衷是将编程大众化、普及化、中文化,至少可以减少初学者因为语言障碍而被阻碍,习语言完全支持汇编和c语言,并且向Windows图形化界面发展,但是也并没有成为世界上最好的语言。
总之,作为一名JAVA程序员,也很想希望有一天国内人拥有一套属于自己的全套中文编程语言,而且被国外程序员争论为世界上最好的语言,能够推广到全世界,希望这一天快点到来。
因为,王小编等着一天等的太久了……
(默默问一下,现在有人用习语言或者易语言吗做开发编程语言吗?)我准备去看看。
你不知道,不意味着没人这么做。
早的有中蟒周蟒,十几年前Python还远未到现在的热度时,就汉化了它的关键字和部分标准接口,可惜有点生不逢时。
近一两年随着全面编程热潮,中文编程工具也开始兴起。屡见报端的少儿Scratch编程就有不止一家使用了中文关键字和API,比如下面的斐波那契算法演示:
碰到的同道更有对各种商业常用的英文编程语言进行汉化的努力,包括C++、Python、TypeScript等等不一而足。
而原创的中文编程语言,包括各种无空格的语法设计等等接近中文语法的特色,都有各方有志之士积极投身。
因此,也许你更想问的是,为何汉化的编程语言至今还没有发展壮大。
这里要先提到易语言,因为它作为中文编程的标杆,在普及度上,至今没有超越的。它即使在语言本身开发不温不火已经很多年的情况下,仍有活跃的社区和大量开发者用户。这就是中文编程语言开发工具存在硬需求的明证。
那么为何没有后来者复制这一模式呢?在我看来,一个大原因在于有志于创建中文编程语言的开发者往往忽视了API建设以及相关的生态圈发展。
相对于语言本身有限的语法,API往往是真正实现功能时更倚靠,也是开发者更需要熟悉的。简单例子,下面是JavaScript一个图形库的演示例程:
JavaScript本身的语法相关单词就只有 fuction 和 for 两个。其他函数体内的单词几乎全是API(也就是应用程序接口)。而这恰恰是英文编程的一大门槛。
相较以下将API中文化后的例程,能够完成完全一样的功能,但读起来是不是一目了然呢?
现今的英文API在大规模商业项目领域几乎处于垄断地位,无论是开源还是闭源,Java Spring,Python Django,MFC等等,几乎覆盖了所有应用领域。正是因为这样,在设计中文编程语言时就要更加重视中文API的积累方式,以及社区培育。
说来话长,就先写到这里。关注本号,敬请期待后续。