中文编程,或者汉语编程,不是什么新鲜事物,用“非英语编程语言”来进行编程也并非只有中国才有,这里有个叫“nadeshiko”的日语编程开发工具:https://code.google.com/p/nadesiko/,我相信还有很多其它“非英语”编程语言,有兴趣的可以看看。
没用过中文编程语言可以试试,国内有很多类似的东西,要指出的一点是,中文编程语言的所谓“输入的问题”没有想象中的困难,它们往往自带一个开发环境,只需要输入一个词语的拼音首字母即可完成输入(比如输入b就会弹出一个补全菜单,里面有“播放音乐“、”保存页面”等等选项,和你在常见IDE里按下.看到的一样)。
编程语言计算机本不认识语言,而仅仅认识数字,然后根据一定的规则在存储器之间传输处理好的数字,人类按照机器底层的特性进行编程难度是非常大的,但是按照自然语言指示机器该做什么可以吗?首先是机器无法识别人类的自然语言,其次大部分人类自然语言无法表达清晰的逻辑。所以一些人进行了折中,设计了所谓编程语言的东西。编程语言是一种形式语言,用一系列的符号在计算机识别能力范围内和人类表达逻辑范围内寻找不同的平衡点。根据编程语言所处环境不同、设计目标的不同、编译器实现者能力不同等等因素,不同的变成语言所取的这个平衡点也不同。
以C语言为例,C语言所处的环境是,软件用汇编语言开发无法在各个不同硬件上移植,但是那个时期的硬件往往性能都比较低下,所以出现了刚好计算机编译器(早期是解释器)能识别(编译或解释),同时满足了当时开发操作系统直接操作内存的需求(具备有算术运算能力的指针)。如果你细心点可以发现C语言的很多特征迎合了那个时代的需求,C语言里有register、auto、inline关键字,说明当时的编译器水平很差,还不能做到高效处理寄存器分配和内联。int、short、long、char、unsigned、signed等等也恰恰描述了那个时代寄存器处理的数字常见类型有哪些。
中文编程语言再以某个中文编程语言为例,写一个Hello World程序:
#包含 "某语言系统.接口"
整数类型 主函数()
{
输出("你好世界");
返回 0;
}
其实本质和C语言:
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
外形几乎没有区别,能看得到的区别也就在关键字和标志符被“汉化”了。那么这些汉化到底能对“不懂英语”的人起到多少帮助呢?可以尝试拿上面的“中文版C语言程序”给一个没学过编程的人看,他几乎是不可能看懂的,也不可能立即用这种语言写个其他类似的程序,因为汉化了的那几个关键字和标志符尽管写成了汉字,但还是没有描述他们在实际的计算机程序中表示的是什么。比如#include ,#开头的往往是预处理宏,而预处理宏程序的功能是在编译前对程序进行的所谓预处理,比如include功能就类似与把stdio.h里声明的东西都“复制”到当前文件,使得当前文件可以看到stdio.h里的函数原型等等内容。而int表示的是整数类型,或者说当前计算机系统C语言编译器认为的默认宽度的整数类型,而不是无限精度的任意整数类型。那么把这两个换成“包含”和“整数”类型之后呢?包含的含义和include的含义还是相同,理解了include处理过程的人(或者仅仅理解它有什么作用的人)固然是会毫无顾忌地写下这行代码,而不懂的人还是不会写,其他的标识符和关键字的汉化也是一样,说到底,关于写程序的人,不是因为理解了这些符号在中文或者英文中的含义所以才会用中文或者英文编程语言写程序,而是因为他理解了这些符号在这个计算机系统和编程语言环境里的含义。
不要觉得这两种语句几乎一模一样语言对应起来很搞笑,其实很多所谓“中文编程语言”真的就是在预处理器上改改,把关键字和标准库的一些函数弄成中文,然后做个图形界面的开发环境就发布了,没有什么非常重大的科技含量。它们的底层(尤其是后端)本质还是现有常见编程语言的常见实现(比如GCC或者Mono之类的),有的甚至在不遵循自己引用的开源软件许可证的情况下,闭源还卖钱。
编程语言的目的我们为什么要使用编程语言?因为用机器能识别的机器语言写代码太痛苦、而且没有移植性。我们想用编程语言做到的是什么?是在一个更高层次清晰地描述希望计算机执行的逻辑。而描述逻辑的过程无论是使用“整数”还是“Int”、或者“int”、“Int32”、“Integer”,难度并不会降低,中文编程仅仅是让一些脑子中有定势“我不会英文、所以中文能帮我学会编程”的人第一眼看上去害怕的程度稍微降低一点点,一旦学会了那几个关键字或者业务相关标识符相关的中文,之后的整理和表达逻辑的过程难度丝毫不会减轻,而这个“之后”,也就是学习这几个关键字和标识符的时间可能占整个编程的时间的99.99%,我们可以说中文编程仅仅减轻了这部分人0.01%的负担。
中文编程的害处有人说减轻了一部分人0.01%的负担还不错,还算是改进,但是为了这0.01%的“改进”,又产生了其它更加严重的问题。
(1):编程语言实现的匮乏
这些所谓中文编程语言的实现和维护者往往是个人和非常小的公司,而且以自己的实现来定义语言,他们往往不会开源,一旦这些个人不打算继续维护、或者该公司倒闭,则该语言写出的代码能运行的平台就仅仅被锁定在最后一个实现的发布,而且以后也不会再添加新特性和新功能了,用该语言写的代码几乎没有未来的发展余地。
(2):库和其他支持的匮乏
中文编程语言用户少,而且仅有的用户还往往连那普通编程语言的几个英文关键词都害怕学习,更不可能开发高质量的、尤其是底层的库,于是编程语言的维护者和少量的高级用户只能担起开发库的重担,大部分库来自封装操作系统的API、常见功能的库(比如MP3播放、XML解析)的封装,但是这些库是非常不够的。
(3):交流的困难
就如我们在国际性的论坛和irc交流使用英语一样,这些论坛和irc的用户除了中国人之外还有大量非英语国家的人,我们使用英语不是因为英语这语言非常精确、非常优美,而仅仅是因为英语用户多,已经几乎是国际语言了,大家都多少会点,交流起来非常方便。而使用这些非主流的中文编程语言则会使得自己和大家交流“没有共同语言”。
结语我到这里结论已经很明显了,总结一下就是:所谓“中文编程语言”解决的问题不多,但是带了很多麻烦。如果有读者属于仅仅是因为认为自己不会英文而选择这些“中文编程语言”,请理解“编程语言的目的和编程的真正的难度在于描述逻辑,而不是关键字和标识符字面上所对应的自然语言”,然后尝试一下自己害怕的“英文编程语言”,买一本优质的学习该编程语言的图书,相信会很快发现,英语真的不是问题。
posted on 2014-07-16 02:03
呜呜 阅读(2252)
评论(0) 编辑 收藏 引用