炒冷饭之汉语编程
今天要讨论的话题很古老了,关于汉语编程,是自己以前看帖子的一些想法的笔记,整理一下,作为一篇日志进行发布。
首先申明我的观点,汉语编程可实现,但是没有任何现实意义,这和民族自豪感或者计算机在中国发展都没关系,只是没有任何意义那么简单。
下面我会详细介绍我的观点。
计算机的根本
计算机本身就是在英美国家产生的,很多东西和中国的文化并不相似。汉语编程的实现不是汉化不汉化那么简单。要让编程中汉语成为主流,除非中文成为主流,并且从根上改变计算机产业。
这里说个计算机编码的例子,ACSII ,其实就是128 个字符加128 个扩展字符。这是现行的计算机都包含的编码,用256 个字符,可以表示编程语言的全部,表示出所有的代码,表示出英文所有的表达。但是换成汉字,码表是多大?
类似的问题很多,汉语编程不是一个简单的中文化的问题。“if”方便还是“如果”方便,不管从输入的便利性还是存储空间性还是计算机处理的速度上来说,都是“if” 更加好一些。现在的计算机语言表示就是基于码表的,这一点你没法改变,这已经不是编程语言这个层面的问题,而是计算机设计的根源上的问题。就算微软所有的API 都汉化了,放到linux 下,它还能蹦跶吗?过几年这些API 还是不是有意义呢?
英语编程太难?
有一些汉语编程的簇拥者认为应该实现汉语编程的理由是英文表示的编程语言难于理解。
其实就算编程是基于英语的,其实关键词并不多,没有英语基础学编程也不是什么难事。当然,有英语的基础更好,很多好的东西其实在国外,你英语好,学起来很方便。编程难不在于是不是汉字上,就算全部是汉字,还是会有很多国人学不好,而编程厉害的国人,未必英语就很强。
编程难在什么地方?难的不是语言本身,而是编程背后巨大的知识背景。数学、逻辑、创新,这些无一不重要。越往深了走,你越会发现编程这东西限制你的不是变成语言而是其他一些东西。
究其根本,人学不好编程,不在于他的英语烂,而在于其他的相关的东西没有掌握好,或者说,过于浮躁。
汉语使用者的民族自豪感
是的,当人们发现编程难不在于语言本身之后,一些人仍旧还在是狂热的支持汉语编程,为什么呢?
民族自豪感。放在这里,就是一种中文自豪感。这大概是汉语编程簇拥者嘴上不说,但是事实上他们最认可汉语编程的一个理由。
中文的确是博大精深,所以,有人认为编程语言要是使用中文会表示出更加丰富的内容。
就比如说有人说,“看”在中文里面有着丰富的表达,但是英语“看”这个表示很少,不会超过10 个(甚至大言不惭地说可以连古英语的“看”的表示也算上),以此证明中文比起英语其实完全不是这样。我可以明确的说10 个绝对是少了,汉语固然博大,但是完全没必要夜郎自大,觉得别的语言真的有那么些个劣势。有机会你可以问问学英语的同学,甚至专门请教别人英语有多少“看”。
语言都很复杂,一个人终其一生研究一门语言也不够,take 这个单词够简单吧,你看看词典上它的解释有多少。每门语言都博大精深,这个说法一点都不为过,没法比较出真正的优劣来,除非是放在一个很小的环境里面来说,比如说限定了数字,那自然大家都会选择阿拉伯语,而不是选汉语,也不是英语,但是放开来说,阿拉伯语有多少人觉得好学?
也有人说,函数和变量命名的时候,汉语更有优势。英语可能会很长,但是汉语两个字就可以表示出大部分的内容。这个问题很简单。比如有一个函数名叫getMessage();汉语可以用“获取信息()”,你说太复杂,那叫“获信()”。从两点上来说:
- 汉语的输入是基于输入法的,不管用什么输入法,汉语的一个字的击键数量并不占据优势。
- 虽然两个汉字的组合就可以变化万千,但是真正要让别人看源代码的时候一看就知道意思,是不是真的就两个汉字组合就行?
归根结底,汉语的确是博大精深,但是不要认为其他语言就真的那么不堪。而且放在计算机上来说,汉语未必就拥有什么优势(大多数键盘上直接敲击出现的就是英文,而汉语必须经过一次转换)。
数学的重要性
有人为了鼓吹汉语编程对国人的重要性,而说编程最大的障碍就是语言,而不是数学之类的东西。
我只能说,你说的是看懂汉语和英语的hello world 吧。
小学生也有学好编程,编出一些不错的程序的。但是真的推动计算机发展的人谁是数学不好的,很多归根结底就是数学家。那些人鼓吹的小学生不懂太多数学而编出的东西,你仔细去看,还原下来,全部都是数学。
数学是根本,这是建立在现行的计算机的基础上,如果计算机业界整个被颠覆了,那可能会不一样。这个也是个哲学课题,现在还有很多人研究,要是中国人的思维模式成为主导,现在的文明会是什么样。就像中医和西医的论战一样,其实归根结底,说中医不行的,是在分解中医用药的元素,认为什么什么元素超标了,他们不理会五行相克,以毒攻毒,他们觉得穴位就一定是要能看见的。这就是中西思维模式碰撞的一个点,这些基础丢在这,计算机是现在这样,编程语言是现在这样,就没什么不好解释的了,现行的,就是一个数学的世界。
如果计算机不是数学,这样的命题,已经不是我能讨论的了,留给哲学家和计算机科学家去吧。当然,按照现在的思维基础,可能证明这个问题本身就是一个数学过程。
国际化
英文编程比汉语更适合国家化。
首先,即便实现汉语编程,从根本上来讲,编程语言易用是建立在易记的基础上。但是英语比汉语更加适合国际化。
对本身不是说汉语的人来说,学汉语绝对比学英语难很多,这个是毋庸置疑的。关键词可能还没什么,外国程序员大不了死记硬背,就算背下来了,int 效率还是比“整数”要高,这是计算机本身限制的。再涉及到变量和函数,那就更加复杂了,要是是字母的,我还可以胡编个完全没意义的dspdw,这是计算机完全可以处理的,而且我下次要使用这个变量的时候绝对可以很方便的可以打出来,但是想一下要是个老外,使用的是汉语他胡编一个变量“魑魅魍魉”,他下次是不是还可以打出来?
假定有一个不懂英语也不懂汉语的人来说,他有一定的计算机基础。学习英语的编程语言,他只需要记忆关键词和语法即可;但是要是是汉语编程,我不得不说,他起码要掌握一门输入法,但是掌握一门汉语输入法的前提是什么呢?现行的汉语输入法是基于音或者形的,要掌握汉语一定量的音或者形,并不是一件简单的事情。
而不得不提醒大家的是,现在还是没有任何一款中文输入法真的叫人完全满意。毕竟键盘是在英语的基础上构造的。
也有人鼓吹,可以写一个无缝翻译机,让外国人也可以轻松使用汉语编程。无缝翻译,这个涉及很多人工智能的东西,语言处理包括文字处理,语义处理,语义处理相当的困难,现在基本是靠人工完成的。这个东西比操作系统还难很多,不光解决这个问题上,还包括这个平台后期计算的资源消耗上。就算实现了,个人计算机需要多少年才能真的可以高效的对语言的语义进行处理?这些时间已经完全足够自造很好的操作系统了。哈哈,不说别的,汉语分词这个最简单的问题就能让你崩溃,还建立无缝翻译机再推广语言。真有了高效无缝翻译机,中国计算机早就走在世界前列了,完全没必要折腾什么汉语编程之类的问题。
中国文化在计算机界的体现
这一段要讲的是一些个人的看法,计算机在中国如何发展。
首先是基于现行的计算机模式。我想说最重要的就是文档和资料。
- 出现更多的简单入门书籍。打好基础,千万不要浮躁。
- 出现更多的衔接性书籍,比如C ,C 语言入门的书很多,之后讲专门讲C 的进阶的书也很多,但是入门和进阶之间空白很大。
- 良好文档的建立。比如Intel 手册,厚厚的几本,其实就是讲汇编和指令,但是文档那么多。
现行的计算机模式,玩计算机玩到后来就是玩数学,对于国人来说,玩到后来就是玩英语和数学。是的,这个不是最开始,是后来。
要想走在计算机的前列,好啊,踏踏实实往深处走,在这条路上也可以走很远,到时候写中文文档,让全世界其他人去翻译就好了。
而如果改变计算机模式呢?说白了,从根上改变计算机的离散本质,变为中国习惯的连续性,那你牛。当然,这个还处在科幻阶段。
版权说明
无特殊说明均为原创文章,转载请注明。
本文链接地址: http://sunxun.info/2009/10/china_coding/
汉语的复杂性决定编程会更难~~
最终导致中国人不会编程!
精辟,呵呵
反对
汉语不需要变单数,复数和时态,我要表示复数,只需要加功能词就可以了,不会影响单词本身,比如一只鸟,一些鸟,但是在英语中就要影响所有的几万个单词,相应的“是”在英语中也要变成is are were be等等,但是我们在很多情况下不需要关心时态和数量,这与使用面象对象是一个道理。
汉语可以表达“树上有鸟”的相对抽象概念,而用英语表达类似“树上有鸟”时,每次都要指定具体数量和时态以及单词的变化,只能表达“一棵树上有只鸟”“一棵树上有一些鸟”“一棵树上曾经有一些鸟”“一些树上有些鸟”“一些树上曾经有一些鸟”等等,就是无法表达“树上有鸟”。汉语中这个函数“()树上有()鸟”是不变的,变的只是不同的参数,而英语却要连单词和整句一起变,相关于是重写一段,无法直接调用函数。
汉语基本字库GB2312,只需要掌握2312个常用汉字,就可以了,而在新的词汇,比如类似计算机,互联网,飞机,电视这样的新词汇根本就不需要学习就会,但是在英语就是两个新的单词,要重新读会和背会拼写方法,所以即使背了2万个英语单词远远不够,我们还是觉得很困难。汉字是主表意的,并且具有组合和继承性、派生性,所以我们只需要掌握2千个字汉而不是要学5万个完全不一样的新单词。所以我们称汉字是智能语言,属高级语言,而英语就是密码语言,类似于二进制的机器语言。
汉语不因数或时态等等而作词尾变化,用C++(一种计算机语言)的概念来讲,实际上就是一种重载(Overload)。重载是C++的两大主要特点之一(另一个特点是类(Class))。所谓重载就是一个函数或算符具有一个以上的不同含义,而计算机根据执行函数或算符时的环境来确定其含义。这里的“环境”,在C++中,包括变量的类型,个数,顺序等等。在本文先前提到的“树上有鸟”的例子中,这个“有”字,当指一只鸟时,就相当于“is”;当指许多鸟时,就相当于“are”。若再包括时态,那么,“有”字实际上重载了4种含义,即“is”,“are”,“was”和“were”。这样的重载的好处和C++中的重载的好处是一样的,都使语言的适应性更强,效率更高。没有重载的计算机语言在调用函数前,必须将变量的类型,个数一一查明以便调用所对应的函数。与此类似,未重载的英语必须先把鸟数清楚后才能造出逻辑和语法都正确的句子来。而重载的汉语不必预先数鸟就能造出正确的句子来。这正是汉语语法优越的地方。C++中的重载是狭义的,而人们的语言包含更广义的重载,因为上面所述的“环境”在人类语言中远较C++中的多样化。可以这样认为:同样一句话在不同的时间、场合、地点等等可能具有不同的含义,实际上就是广义的重载。正是因为有了重载,人们的语言才显得生动、活泼、富有内涵。顺便提一下,C++的另一特点――类,其实也正是汉语的特点。以英语看汉语的“是”确实属于重载(Overload)的。
汉语还有个好处就是面向对象。
金-所有金属的虚的祖先类铁,铜,银等等都是由金派生的。所以看到金字旁就知道是金属石-所有非金属的虚的祖先类碳,碘,硒看到石字旁就知道是非金属
气-气体的虚的祖先类等等所以用汉语学习自然科学(包括物理、化学等等)最方便了。否则给你一个S(硫)。谁知道是什么东西呢。
还有中国的一些哲学思想也和计算机有关
道家认为世界都是由阴阳两种东西构成的。按不同组合可以构成万物。这不就是现在的二进制么,计算机里面的世界在复杂也是由二进制数构成的.道家还说道生一,一生二,二生三,三生万物。比较符合现代计算机语言的单根继承。一二三都是虚的祖先类。比较新的语言例如 Delphi、Java、.Net都是单根继承的。
以上都是抄来的,但我很支持,
最后说一句,楼主的:汉语的输入是基于输入法的,不管用什么输入法,汉语的一个字的击键数量并不占据优势。你这句说的不对,单个字可能汉语的一个字的击键数量并不占据优势一篇文章就不一样了,不信楼主找一篇中英文对照的文件,比一比输入速度,你看那一个快.其实现在汉语编程的易语言就很不错,用它我写了不少自用的软件,比其它语言做起来快多了
既然是讨论,那我就认真回复你。我不知道你看了你觉得有道理的那个人写的东西有没有看过我写得东西也很有道理。
回应。
第一段落和第二段。
时态问题,汉语并不是不在语言中处理时间的问题,我在打字,我曾打字,我打字很久了,我要打字,我在你来之前打字打了一个小时。很多时候无须关心,不代表不用处理。汉语只是作为单个词的时候无须讲究时态,在具体语言中是不可能不讲的。比如:我是一个小孩子,当我还是小孩的时候,如果你不在语言中辨别这种时间关系,是没法区分开的。I am a child, when I was a child。区别是什么?
复数的问题,在看单个的词的时候,汉语同样不用关心复数的问题(有一些例外,比如我,我们之类),比如,人,可以表示一个人,也可以表示一些人,但是在具体的语言环境里面,同样是需要说清的,一个人(person),一些人(people)。你举例的函数在英语里面的确是要考虑trees 和birds 的问题,处理起来英语是要麻烦些。不过事无绝对,也同样有英语处理起来很方便的东西,但是汉语相当的难。我给出一句话,要删除这句话的第三个词,英语很容易处理,汉语不行,当然,这跟汉语编程没有关系。
那我要打印动物园里面有什么什么动物,一个函数,“There is a”变量, 我同样只要换变量,汉语却要区分一头牛,一只鸡,要写多少函数呢?如果找准某个目标去举例子,肯定是会有某种语言稍微有优势。但是你必须考虑全局。
第三段。
首先我要纠正你一点,拿汉语的字来和英语的单词来比并不恰当。他们不是一个级别的,你挑一个英语单词,对应他的是汉语的一个词,你就知道我为什么说不对等了。
你看的那篇文章说汉语只要掌握那么多字是因为他本身就是一个使用汉语的中国人。我还可以说英语只有26 个字母,所有变化都是用这个26 个字母组成的。我们假设是既不会英语,也不会汉语。
1. 学汉字,我必须一个一个记下来,包括读音和各种用法。要不然,我认识上,认识街,但是上街是什么意思;认识厕,认识所,但是厕所是什么意思?不会英语的人学英语要记忆一定量的单词,不会汉语的人,同样还是一样。
2. 你学英语学了英标,很多单词你听到你可以读出来,可以写出来,因为它的音和形有对应的关系。至少可以肯定,只要你学的好,大部分你是可以写出来的。好吧,换你学汉语,你学好了拼音,你听到也只是能写出拼音,还是写不出汉字。
3. 任何一门语言都有他的规律性,同样英语很多词是根据一定的构词法造出来的,和汉语一样。
很多人觉得汉语只是要认识几个字就好了,这个是个很大的误区,因为我们身在汉语国家。我文中同样解释了对于同样不懂英语和汉语的人,英语编程有它极大的优越性。而你学英语编程实际上也同样不用那么多单词,就像你上面树上有鸟那个函数,用英语编程你一样可以编,那是对用户显示出来的文本,实际上和编程的算法没有多大关系。
第四段。
英语的时态变化是有规律的,汉语是加一定的副词来限定;英语的复数也同样是+s 这样规律,汉语要加不同的形容词。我现在假定那个人说的汉语是重载的,但是这和编程有什么关系?为什么英语编程同样有重载。
他说英语麻烦,汉语的树上有鸟,表达了很多意思,但是他举例的英语里面有更多的意思,我们可以从他举例的英语里面看到树上是不是有多于一直鸟,什么时候有,他所举例的汉语里面没有这个意思,这本身就是一个不对等的比较。真要表达不同的概念,汉语同样要加不同的限定,即便是重载的时候再加,但是这个时候效率没有体现出来。
第五段。
金和气的例子,英语中同样有词根。而且并不是所有的汉语都和这样的规律有关系,英语也是。举特例说明了什么问题了吗?那我也举两个特例,“先”字作为字根的时候,但不分的词都是读xian。可是选偏偏念xuan,这有什么规律?秘鲁的秘字只是在这个一个地方念bi ,有什么规律?
道家思想那一段。
《道德经》我看过很多遍,你也看到三生万物了,可是只有二(0,1),那个三在哪里?道德经里面说的所有的东西其实都是道生成的,道是什么?道其实无可形,无可状。你怎么说道就是二。当然,道德经里面描述了很对互相对立的东西在构成这些,但是不代表西方哲学里面没有,事实上,世界上每个国家都有这样的东西,只是道德经的确是很深入,很玄妙。
你自己的话。
我们每天都打汉语,肯定是相当快,但是我必须说,即便放在一篇文章里面汉语同样击键数更多,你可以看外国电影里面老外打英语有多快。
我之前也说了汉语输入法同样需要学习成本。
如果你不先入为主,你就会发现其实英语打起来速度更快。
你想象找个越南人,让他每种输入练习一个月,哪个更快?
而且即便是我们自己编程的时候,并不需要输入太长的英语句子,哪个更快?
至于你说的易语言,我看过,和VB 很像,但是你学习VB 真的会比易语言难?而且后续要做更多的东西的时候,其他语言有很多较好的库,有别的一些开源的东西很好的做参考。易语言呢?
有没有想过跨平台的问题?有没有想过如果开源会是什么景象?有没有国际化的问题?
当然,这些你都不在乎,别人也可以用其他语言写很多自己应用的软件,也同样快,当做一些更大的软件的时候,速度可能还更快,为什么?
易语言,本身也就没有什么技术含量,我上文中讲过这个东西,根本上还是原有的英语编程外加数学。
不要先如未主。不要用特殊的点来概括全部。