2007年10月23日

看汉语编程这趟浑水

作者 非鱼

最近汉语编程似乎在沉寂之后学会了炒作,先是在cnbeta上狂做广告,两三天之内就见到多篇文章,说汉语编程的水平如何之高,实现的效果如何之显著,为国家做了多少的贡献等等。然后,徽剑在无聊之际写了文章把汉语编程给骂了,说它就是拿了国外一个开源编译器的N年前的源代码来改了点东西就当成自己的汉语编程,还拿去骗国家的项目资金,据说有上千万。然后,汉语编程的人开始了反击,于是,一场恶战在cnbeta上演了。

我不敢说我站在徽剑一边,因为这样会遭到另一方的人身攻击,划不来。汉语编程在他们的回应文章中基本上已经承认了自己是拿了别人的开源项目来用的,但是却认为开源项目就是可以自己拿来随便用的,而且还觉得自己是第一个干这种事的人,显得的很聪明很勇敢。汉语编程起的这个名字就足够混淆相当一部分人了,就像开个学校叫中国大学一样,你就代表中国的大学水平了吗?

还是先看看用汉语来编程这件事本身的可行性吧。以我个人的经历来看,只要掌握了C和Java两种语言以及编程的中心思想,再学其它的语言基本上就是熟悉语法的过程而已。学PHP两周以后就开始写网站,一个月完成了一个内部的文档管理系统。Python和Ruby各用了两周学习比较,然后用Python写程序,用了一个月写出了在线记账的网站理财易。学易语言的时候,我已经用过一年多的VB和Delphi了,但是易语言的用法仍然让我相当头大,帮助文档远比PHP的说明要多的多,而且大部分功能都是调用系统API来实现的,而API的名字,则不是那么容易记忆。所以,按照帮助手册上的入门指南写了一个小时钟程序以后就放弃了,我不敢想像用它来调用一个RichEdit写个功能丰富的记事本需要多长时间。

所谓编程,无非就是用程序的语言实现自己心中想要的功能。功能已经摆在这里,不同的语言的区别应该就是语法上的不同,最终实现出来的,应该是一样的结果。当然,对于桌面程序来说,不同的语言写出来的软件界面会有所不同,用Java的Swing和Python的python-win作为界面库,看上去当然会有所差别,但是该有的按钮应该是一个不少的,每个按钮按下去所得到的响应也是完全一致的,唯一的不同,就剩下按钮的模样而已了。当然,这是对最终使用该软件的用户来说的。对于开发人员呢?

如果你是一个熟手,有自己拿手的那一门语言和工具,当然要比你去学一门从来没用过的语言要来的快。退一步讲,如果你精通Java,那么用什么工具来写这个程序速度更快呢?记事本还是JBuilder还是Eclipse?那么,如果你还没有学过任何语言,你现在已经有了一个初步的想法要实现,你要去学哪一门语言来做?C?Java?PHP?VC?C#?VB?易语言?汉语编程?

一门语言的入门难度决定了它是否能够吸引新手加入。如果你想写的是一个Web网站,那么只能选择英语编程了,因为无论是易语言还是汉语编程都没有这个功能。那么我们来看看如果你恰恰只是想做一个Windows上的小软件,应该选哪个来作为你第一门要学习的编程语言。C语言在中国已经基本变成了教科书语言,没有人能够用C写出什么实用的程序(做单片机开发的除外),Java还可以用来写写WEB应用,有谁用Java写Windows应用软件吗?VC的入门难度太高,界面很不友好。剩下的可选的就不是很多了,VB/VB.Net/C#/Delphi/易语言/汉语编程。

如果你打算长久的做下去,那么你需要花不少的时间来学习基本语法,数据结构,面向对象,设计模式,然后才是设计一个界面,把你学到的东西变成最简单的代码放到编辑器里,然后生成它。基本语法方面,所有的语言都是一样的,除了一行行的代码按顺序往下走就是if/else还有for/while,没别的了。如果你是个彻头彻尾的英语文盲(你是不是需要换一个汉语键盘?),你不认为if/else,没关系,你可以跳过英语不学,使用“如果/就/或者”这样的语法,以及“开始循环/结束循环”,相信你还是能看的懂的。接下来的数据结构就没那么容易蒙混过关了。首先,中文里面怎么理解数组这个词?数组[1]这样的用法似乎并不符合中文思维。更不用说链表和树了。接下来的面向对象和设计模式,你……还打算学下去吗?

OK,你现在意识到了问题所在,所以你只打算学会基本语法就够了,跳过后面的深层次的东西,直接进入界面层。打开易语言,拖两个按钮上来,双击开始用你学的那点基本语法写代码,显示一个对话框,从文本框里取到数据,需要对数据做一下加减乘除,然后显示给用户。哇,编译通过,运行正常,生活真美好。现在,你想在界面上显示一个漂亮的图表来表现你的数据,因为你是一名老师,正在写一个学生的成绩管理软件,并准备在全校推广一下,宣传一下自己的知名度。你发现,没有找到显示图表的函数,更不用说在某个软件上看到的那个帅呆了的三维立体的饼图了。找个高手问问吧,来到CSDN论坛,发个帖子问易语言里怎么把数据显示成一个跟人家那个一样的图表,结果没有人理你,大家都在用别的语言,可以很方便的使用某个商业的或者免费的控件,易语言还没有把这些控件包装进来,而你,根本不知道如何去调用它……

为什么日本人写出一个新的语言Ruby能够风靡全球,被那么多世界顶级高手推荐吹捧?Ruby是一门新的语言,而不只是一个打磨翻新了的编译器。它体现的是自己特有的灵活方便优雅,以及Ruby on Rails那为敏捷编程而生的严谨而专业的架构,这一切,都成为Ruby取得成功的关键要素。而我们所谓的汉语编程,搞来搞去,只是拿别人现成的语言,把里面的各个要素变成可以用中文写出来而已,说到底,我们只是做了一个编辑器而已,连编译器都算不上。最基本的一点,如果我写一个代码编辑器,里面可以用中文来写代码,在每次保存的时候自动把里面的“如果”替换成if,那么,这个编辑器的后台想调用哪个语言的编译器都没有问题,难道这就是我们汉语编程的未来吗?

如果将汉语编程作为一个商业软件来研究,那么开发人员自然会去想明白为什么要做,做给谁用,为什么人家会用,如果没有人用,开发人员就没有饭吃。但是如果作为国家科研项目来做,有着充足的经费支持,那么,以中国技术人员的急功近利的本性,它一定会成为一个诈骗国家钱财的项目,像汉芯那样。

我不反对把编程变得平民化,我也不反对做出能够让不懂英语的人写计算机程序的软件,因为这些人,并不会跟专业程序员形成竞争。但是我反对用炒作代替研究,用谎言代替成果,用无知扼杀事实。