dq5怪物图鉴:也谈“汉语编程”

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 13:52:21
English
',1)">
主页 |培训
也谈“汉语编程”
我们从事编程语言的研发已经有十多年了。Fuxi语言原来叫“龙井”,起“龙井”这个名字的用意是不言而喻的。作为一个从实践中发展起来的语言,走过了一段和其它实用语言相似的发展道路,就是从“脚本语言”—>“解释语言”—>“编译语言”。
前几年,在“高交会”上展出的时候,就有人和我谈起过“汉语编程”的问题。老实说,作为一个弱小的软件企业开发的一个目前功能尚不强大的编程语言,打一打民族牌是有好处的。但Fuxi语言最终没有走上所谓的“汉语编程”的道路,打开fuxi.org的网站,一进来却是英文的,“Fuxi”原本应写成“伏羲”,却用拼音形式代替,这似乎有些滑稽。
这里我想和大家分享一下编程语言设计和实现的感受,兼谈一下“汉语编程”的问题。

任何一位语言的设计者都不得不回答一个问题:“Why a new language?”。语言的设计体现着设计者的软件理想、编程理念,是对计算机科学最直白的表述。语言学家指出,“Language models thinking”,有人把这句话翻译成“语言决定思维”,我觉得太过了,但我又找不到合适的中文词汇来。那么一个编程语言到底要去建立一个什么样的编程思维呢?
著名的计算机科学家E. Dijkstra指出,“程序设计的艺术是管理复杂性的艺术”。其实,计算机语言发展的历史,正是满足日益增长的系统复杂性要求的历史。主流语言的发展主要经历以下几个阶段:
算法语言 --> 结构化语言 --> 面向对象 --> 面向方面 --> ……
在不同的阶段,语言设计的理念不同,侧重点不同,但有一点是共同的,就是每个语言的设计者都努力地“make programming an enjoyable thing”。现如今,软件环境已经变得异常复杂了,从每秒万亿次的超级计算机到拿在手上的PDA、智能手机;互联网(泛联网也许更恰当些)又使得这些东东联到了一起。我们所设计的语言何以“让程序设计成为一件令人愉快的事”呢?(这里我不赘述Fuxi语言的设计思想。)
这就要求语言的设计者必须深入到这些技术的底层,研究其背后的科学原理,找出满足新技术要求的计算模型。程序设计的本质就是,在计算机中建立外部世界的模型。因此,简化程序设计、降低程序设计的门槛的根本途径是,提高语言的抽象性,增强语言的建模能力,减小语言构件与外部世界之间的“语义鸿沟”,而不是语言的构件是采用汉语还是英语的编码形式问题。
不管你对计算机科学的理解如何,有一点是肯定的,“让程序设计成为一件令人愉快的事”绝不是把一种语言中的一组符号映射到另外一组符号的问题(这种映射理论上称同构,其实还是同一种语言)。
从语言技术的层面上看,对传统过程性语言采用逐词替代的编码转译的所谓“汉语编程”,不可能“降低程序设计的门槛”(如果该程序有用的话),解决所谓“中国程序员稀缺的问题”。(稀缺吗?怎么来我这里面试的人总比录用的人多?)
再说,象JAVA、C#,当然也包括Fuxi这样的以Unicode为字符内码的语言,完全支持中文注释、函数名、变量名(Fuxi的用户好象并不喜欢使用中文函数名)。我不相信,在那些满嘴洋文的年轻80后的眼里,那几个英文关键字会那么碍眼!

1966年,首届图灵奖得主A. Perlis在其图灵奖演讲中提到,Fortran语言是我们计算机界的Lingua Franca (瑞士街头妓女中流行的一种由英文、法文、德文、意大利文等混杂的语言),它使得不同国别、不同民族、不同肤色的人坐到一起进行交流。计算机科学是没有国界的。如果美国人编程用英语、法国人用法语、俄国人用俄语...,我们很难想象现在的计算机会是什么样子。
程序设计语言是一种用来描述计算的符号系统,是一种人和计算机都能读懂的符号体系。前些年,一位网友发来一段程序,没有注释。他在邮件中说,“I think we’re all better at C++ than English”,读后莞尔。现在有人提出所谓“汉语编程”,我不禁要问,连街头的妓女都知道用一种通用的语言来交流,而况我们这些受过教育的程序员呢?
由于多年的计算机教育,Pascal、C所采用的的符号体系已经成为全世界计算机工作者的一种约定俗成的符号系统,已经成为计算机文化的成分,程序设计美学的要素。在这种计算机文化的背景下,语言的设计其实就是计算模型的设计。已经不再有人会去接受一种另类的文本符号系统了,即使你的符号系统更美、更科学。
一种思想、学术、语言必须能够融入主流文化才能获得生存空间,否则就会被视为异端、邪说,是对主流文化正统性的冒犯。

汉语和西语存在着重大的差别。从语言学的角度来说,汉语属于独立语,西语为屈折语。一个人没有文化,用汉语表达叫“不识字”,而在西语中则称“不懂文法”,英国的小学也称“Grammar school”。固然,汉语有着众多的优势,用汉语可以轻松地读出一长串的数字,孩子们都可以进行很大的数值计算。而我和朋友们一起打牌,美国人却最怕算分。
中文的简洁让我们在进行数值计算时承担了最小的心理负担,同时文法机制的缺失又使我们的先人错过了发展代数演算的机会。祖冲之的圆周律领先西方800年,杨辉三角领先 Pascal 500年。但中国古代的数学始终停留在“算术”水平上,没有能够走出有理数的范畴。中国古代的众多发明始终没有能够孕育出科学文明,而被分散地归纳在《经》、《史》、《子》、《集》之中。憾哉!这主要是“Language models thinking”的缘故。
从本质上说,编程语言和代数演算同属于形式语言系统,是建立在文法推导的基础上的。从语言学的角度来看,西语的文法结构更有利于描述计算(数值计算是机器自动实现的)。

中华民族是一个伟大的民族,中华文明的精神就在于“海纳百川,有容乃大”。在我们民族鼎盛的时期,也是大量吸收外来文化的时期。这些“泊来品”融入到我们的文化当中,成为中国文化的一部分,有的甚至成了我们的国粹,如琵琶等。
在互联网使得地球成为一个村庄,经济全球化使得世界变成“平的”的今天,落后了100年的中国更应当以一种宽广的胸怀,虚心的态度向西方先进文化学习,并把其中的精华融进我们的文化当中。如果要把用什么“语”来编程同“民族”、“爱国”等敏感词汇联系到一起的话,那就似乎有些荒唐了!
作为一种软件产品,让那些退了休的老大爷、老大妈们也体验一下编程;找卖点,打打民族牌,是可以理解的,无可厚非的。但是,把手伸向中小学教育,把一个编程理念没有什么建树、和正统计算机文化相抵触的编程语言推给孩子,我认为是不可容忍的,是犯罪!正如前述,“Language models thinking”,这样会妨碍他们对正统计算机文化的认同与接受。教育要“面向世界、面向未来、面向现代化”!为了“奥运”,北京街道上的老大妈都在学英语,为什么我们的孩子在接受IT教育时,就不能多记几个英文词汇呢!