2007年10月30日

什么是真正的中文编程

作者 非鱼

最近cnbeta上面汉语编程和徵剑的对抗已经成了07年另一大娱乐事件,互相批评的文章加起来已经有15篇了。谁对谁错我没有资格去评判,所以仅从中文编程(我不想提汉语编程这个词,以免被人利用)本身说一下。我的上一篇谈中文编程的文章在Sohu博客上遇到了一个较真的博友,似乎在力图向我证明易语言的确是中文编程未来的方向,而且通过cnbeta的评论,不少网友也比较认同易语言的实现方式,只是一味的在批判汉语编程的抄袭行为和炒作行为。那么,我就从易语言的角度来看看,中文编程应该做成什么样?

从程序员的角度来讲,易语言实现了很多个突破,比如全编译,还有可以在Windows平台下编译成Linux下的执行程序,这些都是易语言自己宣传的重点。(其它的特点比如操作COM,操作数据库,那都是一门编程语言必须具备的功能,就不用说了)。据我所知,目前只有Delphi做到了全编译,不管你引用到了多少个VCL类库,最后都可以编译成一个独立的exe文件,并且能够在一台全新安装的计算机上跑起来。VC和VB都需要一个很大的dll,后来微软把这些dll打包在了Windows里面,才算解决了问题,过了许多年,人们都几乎以为它们不需要别的支持了。

假如我现在有一个伟大的理想,要做一个让中国人都会用的编程工具,能够最大程度的降低学习成本,最快的写出自己所需要的软件,那么,我需要做什么?

根据这个目标,我假设我的用户是这样一个人:年纪50岁左右,对英语一窍不通,有正常的思维习惯,已经有了良好的电脑使用习惯,知道什么叫操作系统,什么叫软件,一个软件里面什么叫窗口,什么叫按钮,什么叫文本框,什么叫输入,什么叫输出。会打字(当然,仅限拼音)。有正常的数学能力(不包括高等数学)。假如我自己经营了一个小杂货店,自行管理进销存,现在准备写一个软件来管理我的进货和销售,以便计算我一年能赚多少钱。(以我的父亲为样本)。

为了方便起见,以下的第一人称改为该用户身份。

首先,在我准备写软件之前,我需要做一些准备,我当然不会指望打开软件马上就能开始写软件了,我需要知道一些写软件的基本概念,知道程序是按钮怎样的逻辑来运行的,知道我的代码应该按照什么样的逻辑写出来。既然要大大降低学习成本,那么,应该尽量的向我的真实思维靠近,我才能最容易的接受这样的写软件的过程。

通常学习一门语言的顺序是先学习基本语法,程序结构,然后是高级语法。

从基本语法开始看:程序代码是一行一行的往下走的,你写了什么样的代码,它就会执行它并产生你所希望的结果。(OK,这个规则我很容易理解)。首先遇到的第一个问题是:什么叫变量,什么叫值?我无法理解这两个词的意思,那好吧,变量就是一个代名词,它可以等于任何实际的内容(数字或者文本),这些内容就叫做值。虽然不太容易理解,但是我能记的住。算法比较容易理解,就是加减乘除。除了单个的变量,还有数组,就是一组变量,分别可以等于不同的值。于是呢?我的第一段代码大概是这个样子:

定义几个变量 进货数量,进货单价,进货总金额
进货数量=第一个文本框里输入的数字
进货单价=第二个文本框里输入的数字
进货总金额=进货数量 乘以 进货单价
第三个文本框 显示 进货总金额

嗯,相当简单嘛。继续往下看,程序结构。原来刚才写出来的叫做顺序结构,还有分支结构,这个也比较简单:

如果 进货总金额 小于 1000
 第三个文本框 变成红色
否则
 第三个文本框 变成绿色

嗯。这个也很简单。继续往下看吧,循环结构,理解起来容易,想写出来却很难。实际的应用大概应该是这个样子的:当我要在程序里输入本次进货的商品的时候,我可以按一下进货的按钮,然后跳出来一个窗口,里面可以输入商品的名字,数量,和单价,下面有一个保存的按钮和一个关闭的按钮,如果我按保存,那么这三个文本框里的东西保存下来,然后我可以接着输入下一个商品的数字,如果我全部输入完了,那么我可以按关闭,然后这个窗口就关闭了,同时程序就可以告诉我我这次进货一共用了多少钱。那么程序应该是这个样子:

定义几个变量 商品名称,进货数量,进货单价,进货总金额
弹出输入窗口
如果我点的是保存按钮:
 商品名称=第一个文本框里输入的数字
 进货数量=第二个文本框里输入的数字
 进货单价=第三个文本框里输入的数字
 进货总金额=进货总金额 加上 (进货数量 乘以 进货单价)
 保存 商品名称,进货数量,进货单价
否则:
 关闭输入窗口
 总和文本框 显示 进货总金额
 
现在可以写出完整的程序了吗?应该说,如果弹出窗口和保存变量这些功能是可以自动执行的,那么,我已经可以写出程序来了。嗯,相当简单。那我可以接着看看高级语法了,到底是怎么个高级法。

类,好奇怪的名字啊。什么叫类?一类东西的统称?对象,比类更奇怪的一个名字。这可如何是好?好吧,看看别人写的示例代码:

定义一个类 商品
 包括 名字,进货价,销售价,重量
 定义一个功能 计算进货金额 需要参数 进货数量
  进货金额=进货价 乘以 进货数量
  
定义一个子类 啤酒 作为一种 商品
 还包括 品牌,容量
 
定义一个对象 一瓶啤酒 作为一个 啤酒
 名字=一瓶青岛啤酒
 品牌=青岛啤酒
 容量=650ml
 进货价=2元
 销售价=2.5元
 重量=1.5斤

保存 一瓶啤酒
读取 一瓶啤酒
显示 一瓶啤酒 的 进货金额 参数 进货数量=10

嗯,还好,想了半小时算是明白了一点。(真正的计算机系的学生,在学习了C语言和数据结构以后,理解类和对象这两个概念需要多长时间?反正我是已经忘记了。当初学了几个月的C,用了半年的VB,还是不明白类和对象是什么东西,直到最后学了两个月的Java,看了N许多Java代码以后,才在某一天突然开窍了。要不是Java里面的main函数,可能我理解的还要快一些。)

如果我的中文编程能够做到这个样子,那么我感觉我的父亲也许还是可能理解的。那么易语言是如何实现的呢?顺序执行就不用说了,看看分支结构:
如果真 (已经进了啤酒=假){
 啤酒需要进货
}
循环结构:
.计次循环首 (取数组成员数 (所有的啤酒), i)
 所有的啤酒 [i].销售价= 所有的啤酒 [i].销售价 乘以 1.1
.计次循环尾 ()

我的天啊,这种话好意思说是符合中国人的中文思维的吗?要不是生搬硬套的拿国外的编程工具来翻译,怎么会写出“如果真 (已经进了啤酒=假)”这样的语句?为什么不是“如果 不是 已经进了啤酒”?

罢了,我写不出我理想中的中文编程语句,所以请读者不要说“有本事你做一个,没本事就别乱叫”,我只是想说,请大家在做宣传的时候实事求是一点,不要说出类似“可以用蜡烛光给手机充电”这样不着调的话来。