2007年10月18日

徽剑: 汉语编程-汉芯之后的中国软件界大骗局

cnBeta 博文精选

一、闹得沸沸扬扬的汉语编程
二、汉语编程其实是一个大骗局
三.汇编都是英文的,其他变成汉语有什么用
四、其实汉语编程很好创造出来,但是却没什么用
五、中国人编程难的问题和出路在那里

一、闹得沸沸扬扬的汉语编程

这几年以来,特别是最近一段时间,汉语编程闹得沸沸扬扬,大有我中华民族之骄傲,如果不加紧实行汉语编程,中华民族就要消失了。徽剑本对于汉语编程不以为然,一直没有理会。之所以写这篇文章,是因为徽剑前几天接到一电话,是北京一家公司打过来的,大谈推广汉语编程,要跟徽剑的公司合作在深圳推广,于是徽剑查了一下资料,发现这两年所谓的汉语编程这场闹剧居然愈演愈烈,于是徽剑不得不出来揭露下。对比去年的汉芯事件,徽剑认为,所谓的汉语编程只不过是另一场汉芯的重演而已。所以看完本文,特别是程序员朋友,如果您认为徽剑说的有理,请将本文多多转发到各种论坛,揭露这场骗局。

先来看新闻,2007年09月《通信产业报》以“汉语编程异军突起民族产业出黑马”为题发表了一篇文章。开头是这样:

“当今世界,科技突飞猛进。网络改变了人们的生活和思维,成为人们学习和工作不可或缺的一部分。人们点击鼠标进行学习、工作和接收外界信息的时候,计算机程序设计语言在其中起到了至关重要的作用。很多年来,我们一直在使用国外的编程语言,人们已经习惯了用C语言、JAVA等计算机语言编写应用程序,实现人与计算机的完美对话。但是朋友您知道吗,真正属于我们自己的计算机程序设计语言——汉语编程已经问世,而且已经在诸多领域发挥了重要的作用。”

然后文章介绍了汉语编程:

“汉语编程萌发于1984年,1994年获得国家发明专利。汉语程序设计语言,不是对计算机语言的简单汉化,也不是为某种软件制造一个中文环境,而是中国人自已掌握全部源代码,使用汉字信息指令,从计算机底层入手,使计算机的中央处理器(CPU)能够处理存储器中的汉字词典,从而实现计算机对汉字程序的识别,不受现行操作系统控制的技术系统,且完全拥有独立的自主知识产权。”(呵呵,这段话里面的问题就先不说了)

在文章的末尾,还上升到了民族大义的高度:

“我们曾经因为闭关锁国错过了工业革命的巨轮,也曾忙于阶级斗争,而错过战后新技术发展的浪潮。如今,我们有了完全自主知识产权的计算机语言,其核心技术无可挑剔,且优势日益明显,我们不能再错过最好的发展时机。汉语编程是民族的,是国家的,中国这个有着5000年深远文化的泱泱大国,理应把它好好利用起来,发展和振兴我国民族产业,为中国人民所熟知和使用。”

徽剑在收集到的另外的资料还有这样报道:

“近日,用汉语编程实现的数据库开发环境将通过江苏省科技厅的验收。按照进程,汉语程序设计语言数据库开发环境项目完成后一年,项目承担方——南京汉语编程有限公司将以汉语编程数据库教育版为推广重点并进行其他工程开发。项目完成后两年,汉语编程数据库标准版将以OEM方式与国内PC制造商捆绑销售。项目完成后三年,将推出汉语编程数据库企业版参与政府、企业、部队信息化建设,部分替代进口产品。江苏省科技厅将对该项目投资三百万元。同样看好汉语编程的还有重庆市科委,他们的预期投资是上千万。汉语编程作为重大科技发明发现正在申请重庆市的国家级项目。重庆药监局正在应用汉语编程开发的数据库实现对所有下属药店的监管。目前这个项目完成了大部分,6月底将最后完工。”

当然徽剑在报道中也找到了不同的声音:“从2001到2002的两年间,北京市科委对汉语编程项目进行了5次评审。评审的结果是,超过50%的专家并不认可汉语编程的可行性,元易达没有能在北京市科委立项。元易达于是坚持“农村包围城市”的市场开发路线。当年对北京元易达公司进行评审的时候,原中国科学院计算机软件研究所研究院员仲萃豪这样评价,“用汉语编程语言开发数据库,这条路是相当艰巨的。汉语编程现在还只是一个小玩意。”

看完这些,有人会问,到底这个汉语编程是怎么回事?到底有多大价值?对未来的发展有如何贡献?那么好,下面就来分析。



二、汉语编程其实是一个大骗局


我们知道一个骗局“汉芯事件”, 2003年2月,在摩托罗拉公司做测试的工程师陈进,将一片从美国买来的MOTO-free scale 56800芯片,雇请民工磨掉原有标志,然后加上自己的“标识”,变成了所谓“完全拥有自主知识产权”的“汉芯一号”,申请了多项专利,并借此当上了上海交大微电子学院院长、博导以及“长江学者”。

汉芯事件一大特点就是拿一块别人的芯片,简单修改一下,然后包装成自己的成果。这种如果是商业上,只要不侵犯别人权益也就无可厚非。但是作为科技开发就不同,讲究的是原创和事实。我们来对比下汉芯和汉语编程,我们会发现他们有惊人的易曲同工之妙。

报道这样说:“汉语程序语言是在1993年由北京百乐航天应用技术公司汉语工控部的沈志斌发布的,最初为PC1.0版,是一个16位版本,只能在MS-DOS环境下运行。2000年,沈志斌组建了北京元易达公司,专门从事汉语编程的产品开发。经过近十年的发展,汉语程序语言目前最新的版本为2.03,能够在WINDOWS9X/NT环境下运行。”

一开始的时候,徽剑也没明白这到底是什么语言,还以为这真是汉语编程的原创,只是觉得有些别扭,一来是觉得“汉语编程”的软件经过这么多年的发展,版本一直不变,是否让人难以理解?而且其开发界面极其难看,用反汇编软件居然发现汉编编译器主程序文件居然使用的是微软的VC运行库,这里让人极其不解,既然汉语编程都到了可以汉语汇编的程度,为什么编译器还要用VC来开发?

最近在铁血社区看到一篇文章,才完全证实了徽剑的猜测。

从词典看某“汉语编程”与Forth语言http://bbs.tiexue.net/post_2304429_1.html
看完了文章上面的图片对比,相信只要有编程基础的人士都可以明白,这完全是彻头彻尾的剽窃。一个把开源代码复制过来,加以简单修改,然后包装成自己的原创。

这里很抱歉一开始的时候,徽剑对于这种叫Forth语言确实孤陋寡闻,徽剑正想自己动手比较的时候,有一位网友做了好事,先比较了下:
原帖链接(http://www.xycq.net/forum/thread-152078-1-1.html),作者来个分析:

“汉语编程目前能够下载到的版本为2.03.1920,由于只使用一个版本的汉语编程,后面的描述中就省掉版本了。在铁血网中的帖子有一个简单的比较,用的是一个叫win32forth的forth实现,在其主页Download's中可以得到两个不同的版本,一个是4.2build671,另一个是6.12.00是目前最新的稳定版。在铁血帖中提到过wincon.dll这个文件,我也是从这个文件入手的。”

于是该网友用VC6中的Depends查看三了个wincon.dll的结果。发现入口非常相似,也就是有可能是差不多的文件。于是该网友考虑了将三个DLL进行互换。

“将三个dll文件复制到一起,先将三个文件复制到win32forth4.2中,分别使用三个dll后启动WIN32FOR.EXE的结果发现“汉语编程的wincon.dll文件能够被win32forth4.2正常使用,而且读出来的数值与汉语编程环境下一致,都是10895。由于接口改变,4.2和汉语编程的wincon.dll都不能在6.12中使用了。而win32forth4.2版与6.12版的wincon.dll文件都能够在汉语编程环境下使用,而且读出的值都与原环境下一致。综上情况,汉语编程与win32forth在wincon.dll文件上保持了相当好的兼容性,如果说二者一点关系都没有,形成这种结果的几率不知道能有多大。”

更为搞笑的是,当该网友试着将汉语编程程序和win32forth4.2目录下的这个同名文件WINCON.DLL删除时居然发现汉语编程与4.2的提示基本一致(徽剑测试时除了标题的两个字母大小写不同外其他一致)。该网友不禁问:“这也是巧合吗?一个号称汉语的居然冒出一句英文的提示而且还跟别人的如此相似,而且是"Missing procedures!"这种计算机程序中少见的用词以及少见的标题栏中用标点。”

“将汉语编程的win32chp.dll文件复制到win32forth4.2文件夹下并命名为win32for.img,当然之前要备份好原来的win32for.img文件;将汉语编程的ckernel.ovl复制到win32forth4.2文件夹下。然后找一个16进制编辑器,打开win32for.img文件,从偏移4(也就是第5个字节)开始,连续4个字节修改为D5 11 92 01,保存。双击win32for.exe,”

徽剑看到的是居然看到的是带着win32forth 4.2图标的汉语编程。

最后该网友总结到:“说到底,汉语编程应该是这么来的,由于win32forth的源码是公开的,汉语编程利用其源代码将win32forth字样抹去,并且修改了识别词库文件的标志(将win32forth的D5 11 92 01修改为DA B7 6E EF),编译出可执行程序。然后又根据需要,汉化及添加、修改了词库形成了现在用汉字和一堆全角符号编程的汉语编程语言。可以说汉语编程为了掩盖其与win32forth的关系,将符号修改的很彻底,也不管那一堆全角符号用起来多么古怪。”

“如果继续研究下去,我想还会掌握更多的证据,甚至有希望根据wincon.dll和winapi词数找到汉语编程使用的那个版本的win32forth,不过目前我觉得这些证据已经足够了,已经不需要再浪费时间了。”

最后作者得出结论:

“其实汉语编程就是win32forth的一个修改版,实现的功能基本上都是win32forth实现的。把这个东西吹嘘为民族的希望,汉语编程需要带的ckernel.ovl和win32forth 4.2需要带的kernel.bin文件都是词库(其实就是编译过一次的字节码)的要求,比如要是用汉语编程的编辑器winedit.dll替换成win32for.img的话就不需要带ckernel.ovl了。注意观察一下汉语编程的各个程序,都是由同名的一个exe文件和一个dll文件组成的,那个dll文件并不是真正的win32格式的dll文件,而是与win32forth 4.2的img仅差一个标志的一种格式;而那个exe文件其实都是可以互换使用的,当然跟win32forth 4.2互换都没有问题。”

看到没有,一个骗子。一个跟汉芯一样的骗子。

三.汇编都是英文的,其他变成汉语有什么用

下面来介绍下语言的基础,(这部分主要是给对编程不是很了解的人士看的,有些地方不严谨,但是只要说明意思就可以了)

我们先看语言基础,我们平时看到的电脑每做的一次动作,一个步骤,都是按照以经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。

计算机所能识别的语言只有机器语言,即由0和1构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。目前通用的编程语言有两种形式:汇编语言和高级语言。

作为机器语言,其核心是如何控制内部运算,对于不同的CPU架构体系,其机器语言也会不同。表现出来的就是指令集,CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。

汇编语言的实质和机器语言是相同的,只不过指令采用了英文缩写的标识符,更容易识别和记忆。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,由于汇编语言只是机器语言的符号化,虽说相对简单了,但是还是得要求人们学习相应的内部结构,对于复杂的内部结构,有很大一部分人还是无从着手的.所以就出现了高级语言,当程序员用高级语言指令写完源程序后,只需用编译器编译就可运行了.此时编译器所做的工作就是把高级语言指令翻译成汇编语言(机器语言。.

对于软件开发者来说,他需要考虑的是CPU的指令集,也就是CUP指令集的汇编指令,只有针对这些指令才能开发出相应的程序来,举例来说,你在基于英特尔CUP的汇编指令上开发的程序,就不能在苹果电脑上运行。而这些汇编指令集都是CUP等硬件厂商开发提供的,目前我们知道CUP的大部分厂商都是海外公司,他们的指令集(都是汇编语言写成)都是英文的。

高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,这样就大大简化了程序中的指令。高级语言如目前流行的VB、VC、FoxPro、Delphi等,高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。

通常而言,人们写程序有两种方式,
一是直接用汇编语言写,然后翻译成机器语言。
二是用高级语言写,然后编译器翻译成汇编,最后翻译成机器语言。

也就是说,程序语言的编写分为三个层次。

第一层次(最低层次)是机器语言 其语言都是01.
第二层次是汇编语言(使用不同的CUP指令集)其语言都是英文
第三层次是高级语言

我们会发现一点,不过你采用什么语言编写,最终的都是要编译成汇编语言然后到机器语言,最终都是要调用CUP指令集。(这里需要指出的是,任何汇编指令集,都是硬件开发厂商开发的,而不是什么程序语言公司开发的。)就目前而言,这块都是英语,目前国内有人推出的汉语汇编编程,徽剑觉得啼笑皆非,就汇编语言而言,是直接对CPU等硬件操作的,必须依赖各种指令集,而这些厂商,有几个提供汉语指令集?

在没有硬件厂商提供的汉语指令集前提下,所谓的汉语汇编是不是“鸡对鸭讲”?这么一来是不是要有人把英文指令集翻译成汉语?那跟汉化有什么区别?

这样一来任何人都可以开发出一套汉语汇编来,很简单,找一套汇编编译器,增加一个翻译过程,当输入汉语时,将其翻译成对应的英文汇编程序,然后再翻译成机器语言,或者直接采用替换方式,当输入英文的时候,将其翻译成(英文对应)的机器语言。

任何汇编指令集,都是硬件开发厂商开发的,而不是什么程序语言公司开发的。让程序开发者利用汇编语言来操作他们的硬件。除非硬件厂商提供直接针对汉语的指令集,否则任何所谓的汉语汇编都是,翻译器加汇编编译器。

也就是说,在汇编领域,目前并未有任何厂商提供汉语指令的指令集,那么意味我们所谓的“先进的汉语汇编”就不是什么自主开发的东西。那么这里有一点就可以明了,就是目前的真正的汇编都是英文的。汉语汇编其实只是“假汇编”。

四、其实汉语编程很好创造出来,但是却没什么用

前面谈到的那个“汉编”事实上是个骗子,下面徽剑要说说不是骗子的汉语编程,以易语言为例。

易语言是曾经和朱崇君一起开发CCED的吴涛于 2000年初开始开发的,这是一款Windows下全中文可视化编程语言,最新版本为 4.0。易语言自发布后,以其类似于VB的风格和彻底中文化的特点赢得了不少电脑爱好者的青睐,

易语言的特点就是用汉语来写,原来编写程序输入的是英文,现在改成输入汉字了,我们来看段易语言程序:

引入 apr;
公开 类 启动类
{
公开 静态 启动()
{
整数 数量;
控制台.输出行("请输入将要生成的随机数个数:");
数量= 控制台.输入整数();

随机数集合.显示(数量);

随机数集合.显示();
}
}
公开 类 随机数集合
{
公开 静态 显示(整数 生成个数=10)
字节集 临时字节集;
整数 I,J;
内存池 局内存池 = 创建 内存池;
控制台.输出行("下面开始生成"+生成个数.到文本+"个随机数====>");

计次循环(生成个数,J)
{
临时字节集=随机数.生成随机数(1,局内存池);
I=字节集类.到整数(临时字节集);
控制台.输出行(整数类.到文本(I));
}
控制台.输出行("<========随机数已生成");
控制台.输入文本();//暂停屏幕滚动用
}
}

事实上,徽剑看不出这里有什么优势,懂中文的人似乎也没几个能明白。有人说易语言似乎对于英语不好的人有帮助,其实很荒谬,因为如果但是写程序部分所使用的英文数量是很少的,常用的也就几十个英文单词,一般情况下也就几百个英文单词。也就是说,如果仅仅考虑到“写程序”这块而言,会个三五百单词足够,这点数量的单词相信没有几个人学不会。

我们必须看到而真正出问题的在于“接口”上面,前面说了,目前的操作系统、几乎所有的各种应用程序都是英文编写的,所谓的中文版只是在用户界面做了汉化,这样一来,用汉语编写的程序如果要在操作系统上运行、或者与其他程序交换数据,不可避免的遇到英文代码,特别是操作系统,比如windows下的API等而这些接口又是成千上万,如果没有很好的英文是很头疼的。

更为甚者,这些接口的文档大多都是英文编写,没有好的英文水平是阅读不了的。也就是说如果你想成为程序高手,英文是必须解决的拦路虎。也许有一天有了全中文的硬件指令集、全中文代码的操作系统,那时候我们就可以说用中文编程了。就目前而言对于专业程序员而言,汉语作为程序设计的描述语言并没有什么实际意义。

如果仅仅是考虑普通用户不懂英文,不会“写程序”,那么徽剑提出一个更为简单的方法:“汉化”,我们可以分为这么几步走:

第一步,对汇编编程器进行汉化,使其在输入汉语汇编指令时自动对应相应的机器语言。

第二步,对诸如C、C++等编译器进行汉化,将其内部对应的英文指令替换成汉语,这样一来在输入汉语C、C++程序时可以直接编译。

第三步,编译C、C++等的教材,将其中英文描述换成规范的汉语程序词汇。同时大量翻译各种英文指令书籍,便于中文编程人员查找。

第四步,创立汉语操作系统,找一套开放源码的LINUX,修改其编译器,将编译器输入对应的英文换成汉语,然后将全部源代码翻译成汉语,再用编译器编译一下。当然个别地方要考虑到汉语的编码特点修正一下。徽剑计算,依照几十名翻译人员,差不多一年可以完成,看看一套全面的汉语代码操作系统出来了,

看到没有,就这么几步,连强大的C、C++等都成了汉语编程语言了。如果想傻瓜点,也可以啊,跟微软合作、跟SUN合作,可以把.net、JAVA全部汉化了,想来他们也没有什么反对的。

有人说:“汉语编程的优点概括为以下几个方面:首先是安全系数高。汉语编程是我们用汉语实现的人机对话,我们掌握所有的源代码,目前尚未发展能与之对抗的病毒,非常有利于保证计算机内的机密安全。”

这纯粹胡扯,目前的计算机语言,特别是诸如C、C++语言本身都是免费的、开放的,任何人都可以学习、使用。就像相对论不是中国人发现的,但是我们一样用,这只是一种知识而已,如何在这种知识上开发成果来,那是另外一回事。一种知识是谈不上安全的。我们并不因为飞机是外国人发明的,我们自己造飞机就泄露了什么机密。假如我们完全用自己的汉语编程,难道国外特工就不会学吗?难道国外的信息部队就不会针对这个开发病毒吗?而且还是一开一个准,因为你是单独的,与众不同,开发针对你的不用担心自己受影响。


有人说:“汉语编程是效率高。汉语编程的原理是建立在汉字的本身优势上,汉字看起来很复杂,但表达的意义却很丰富。且在键盘上输入汉字远比输入英文快,用汉语编程写出的程序远比其他语言篇幅要短很多。”

这里同样也是胡说,请问一下,当你在键盘上输入“if”快还是“如果”快,是输入“end”快还是“结束”快?要知道在编程的英语不是日常的英语,完全可以说是一种新的人类语言,在键盘上输入汉字只是在总的信息量上比英文多,而不是单位数量汉字敲击键盘的次数比英文少。徽剑做过简单测试,发现以C++为例,如果把C++翻译成汉语输入,单位时间内的击键次数是英文的很多倍。


有人说:“汉语编程是简单易学,便于普及。只要认识汉字,上到九十九下到刚会走,都可以学习和使用。”

这更是胡说八道,如同前面分析的那样,用汉语“写程序”是方便了,可是还有那么多英文接口、英文文档怎么办?再说了,有必要来个全民编程吗?美国普通人也没几个会编程的。而且我们看看上面的易语言代码,光是认识汉字的人明白吗?


我们还是看一段评论:“从理论上讲,汉语编程应当是一种以汉语为描述语言的计算机程序设计语言,在程序设计中体现了汉语语法和逻辑,符合中国人的语言习惯和思维方式,而不是英文程序设计语言的简单汉化,或者是简单地营造一个汉语编程环境。很遗憾的是,目前我们所能见到的汉语编程语言,就只不过停留这个层次上,并没有取得任何实质性的突破。事实上,从2001年到2002年间,北京市科委对汉语编程项目进行了5次评审,评审的结果是超过50%的专家并不认可汉语编程的可行性。”

五、中国人编程难的问题和出路在那里

下面我们看看中国人编程难难在那里?

徽剑以一个拿到(说混到也可以)的系统分析员证书的编程者的亲身体验,中国人编程难难在难在接口语言和技术资料语言上,而不是“写程序”的语言上。学过编程的朋友都知道,程序中绝大部分都是逻辑和数学表达式,与采用英语还是汉语来描述的关系实质并不大。

就程序而言,不管学习编程的是谁,是中国人,还是美国人,有一个共同的难点。那就是计算机语言不是我们人类日常交流的语言,越是效率高的编程语言,越是离人们日常生活交流语言较远。这点上是共同的。

而中国人真正不利之处就是如果英文不熟练,无法阅读技术文档(诸如C++、Java中上万个用英文的库函数也不是需要编程者都得记住的东西),无法理解大量的接口等英文信息。而这一点就不是简单用汉语编程那么简单了。世界上最著名的软件公司,大多是母语为英语的国家。印度现在之所以成为世界第二软件大国,因其母语是英语,这样一来在阅读和学习过程中接触相关技术就没有什么障碍。

依照我们目前的发展条件,短期内不大可能出现诸如硬件、操作系统等的全国产化,这样一来如果我们还是热衷于所谓的用“汉语写”程序的话,就未免搞笑了。其实我们来看看编程的发展历史:

最早期,直接对硬件编程,使用机器语言和汇编语言。
后来,出现高级语言,在一定程度便于人们的理解了。
再后来,出现面向对象的程序开发,使得程序开发进一步容易理解和实施。
现在流行的是面向对象的可视化程序开发,每个语言本身都是“不可视”的,仅仅是语言而已;所谓“可视化”不过是编程工具所提供的功能,让你在编窗口等一些“看到着”的程序时可以使用拖拽等可视化操作。如同C++是门语言,而vc++只是一个可视化编程工具,vc++实现了C++的可视化编程。

有过较长期编程经验的老程序员都会有这演感受,在十年前写C++语言程序是很累的(那时国内还很少大家都是用C较多),现在用C++的话,可以用VS2005多方便啊。诸如.NET代码生成器有助于快速应用程序开发。

现在甚至不用写代码就可以生成很多小点的程序,这在十年前、二十年前是不可想象的,同样再过十年,不写代码生成很多今天看来是很大的程序也不是难事。所以徽剑以为在未来,程序员编程“写”的代码数量将会越来越少,程序员更多的考虑的是程序的结构和性能,然后动动鼠标,输入几个数据,一套程序就编好了。

在这种情况下,更多的内容被封装了,到那时,才可以说不懂英文也照样编程。这才是发展的趋势。

至于底层部分,那就只有等到国产的硬件出来了,推出大量中文指令集,才有实现真正汉语底层开发的可能。

没有评论: