Menu:

2010年2月4日初稿
2010年2月7日(重新定义为附录A)

附录A:语言和计算机语言


A.1 语言

      我们这里所说的语言当然是指人类的语言。人类的语言是一种特殊的符号系统,它包括了语音和文字。语音和文字的作用基本相同(表现形式不同)都是用来表达我们的思想(意念)实现人际间相互沟通与交流的一种手段,或者说它是一种工具。语音和文字相比,语音更能表达出情感(喜怒哀乐),而文字则更具有严肃性和公正性。人们常说的:空口无凭,立此为证,就表示出这样的境地。

      我相信,人类语言的起源应该和人类的起源一样久远。尽管无法确定人类开始说话的时期(这是语言学家无休止的争论话题),但是书写至今已有大约6000年的历史了。而文字的出现极大的增强和放大了语言的沟通能力和传播距离,人们借助文字保存和传递人类文明的成果,使人类的发明和创造可以的到更广泛的传播和传承。

      应该讲,语言是人类智慧的具体体现。语言是人类创造的,人类也创造了一些没有语音的语言系统,比如:手语、旗语、网络语言等等。其实无论是那种语言,最核心的作用就是起着相互交流和沟通的作用。


小插曲——网络语言的趣事
     上个世纪末(或者是本世纪初),家里由播号上网升级为宽带ADSL上网(包月)。在此后的那段时间里,我渐渐演变为“网虫”。我不使用风靡一时的QQ(没有QQ号)从不“聊天”,即不听歌、也不看电影。上网主要是资料收集和查看最新电子资讯。偶尔去“联众”下下象棋,打打桥牌。

      我是一个网络新手,网络上的许多语言我都不认识、不清楚其含义。最初我只晓得88网络语言的含义,甚至THX都是寻问网友才知道它的含义的。那时我只知道的THX是一种家庭影院标准的名称,在我《LabVIEW学习札记》专栏中有过记述。

      有一次在联众打桥牌,网络上的桥牌搭挡都是临时自由组合的,通常很难遇到十分和手的搭挡。可是哪天真的是一帆风顺,搭挡十分和手,牌运也甚佳,积分一直不断地攀升。我的桥牌技艺很一般,主要目的是以娱乐为主,所以一般都是通过叫牌的机会尽可能的使搭挡来坐庄打牌。可是有一付大满贯的牌恰好叫到由我来坐庄打牌,那付牌应该说铁打不宕,只是挤掉或飞掉一张黑桃Q既可,可能是由于心里紧张的原因,一付铁打不宕的牌竟被我给打宕了!由于我们的牌点很高,这把损失惨重,积分巨跌。
      沮丧、无奈、自责,我竟不知所措,还来不及向搭挡道歉,他确发来了信息:SB。
      我不清楚SB的含义,然后赶快回发:SB?????还没有等到搭挡的回音,我突然想起是黑桃Q出了问题。我开始用科研的思维来猜想,S=黑桃?B=Q?
      愤怒的搭挡不语,退出合作,转身进入了其它的桥牌室。我象个“跟屁虫”似的赶紧也进入哪个房间,并敲打出:SB是什么意思?向他询问道。
      他回复:SB=DSB,然后转身退出该房间。
      此时我一脸茫然,打黑桃Q?
      赶快向该室的其他人请教,
      SB是什么意思?
      此人回道:你不会拼音吗?

      我呆若木鸡,无言以对,幸好网络中都互不相识,否则真是无地自容。
      尴尬中我赶紧退出桥牌室,退出了联众。


      对任何人而言,掌握一门语言的语音和文字同等重要,假如你仅熟悉某种语言的语音而忽略了文字的学习,将会被视为文盲。

      人类的语言具有广泛的地域性和种族性,尽管世界上存在着5000多种人类的语言,但是对于某一地域或种族的人来说,母语则是他们的第一语言。如果除母语外你还学会其它的语言,无疑将大大的增强你的沟通能力和学习能力。

      母语的学习是以一种潜移默化、近乎自然的方式学会语音(学习说话)正常人似乎在这方面无更大的学习障碍。而文字的学习通常是以规范的强制手段来开始(学习语文)。文字的学习过程通常是先学习“字”,然后学习“词组”,并利用字和词组进行造句,最后阶段则是作文。
      而母语以外的语言(外语)学习,通常是采取单词(字或词组)和语音一起同时来学习的,但是更注重语言的阅读能力,至少我的外语学习过程是这样的。在我们哪个年代工科院校的学生中,口语好的人寥寥无几、屈指可数。

      母语以外的语言学习,对工程技术人员或科技工作者来讲极为重要,它增强了你与世界的沟通能力并开阔了你的视野。

      无论那种语言的学习,良好的学习环境是相当重要的,甚至是可以达到事半功倍的学习效果。当然学习的态度和毅力也是不可忽视的主要因素。

      本节核心的概念就是:语言,最核心的作用就是起着相互交流和沟通的作用。

A.2 计算机语言

     正如人类语言的作用一样,计算机语言也是起到巨大的沟通作用,所不同的是它担负的是人与计算机之间沟通。计算机语言的出现是因为目前的人类语言无法与计算机直接进行交流和沟通,这样的行为只有当语音识别技术发展到高级阶段才可能得以实现。计算机只能识别以CPU体系架构为目标的、以“字”或“字节”为单位的、特定的一组0和1序列的组合,人们通常称其为:计算机的指令或数据。
      与人类语言不同的是计算机语言没有语音,但制定了涩腻、严格的语法规则。它并不存在着什么母语之说,它使用的词汇也很有限。

      让计算机为你工作,必须用它所能理解的语言和方式进行编程,也就是人们常说的程序设计过程。
      在大学期间(1978-1982),我学习了60学时的BASIC语言(非考试课程)。在计算机机房将设计完成后的程序(解释通过后的文本)输入给穿孔机,穿孔机自动将程序代码转换为纸带上的孔洞(指令),然后输入给体积巨大的计算机进行处理,那时的计算机存储器还是体积巨大的磁心存储器。不管什么人都无法独自占用计算机,因为它是按小时来分配给大家使用的。

       毕业几年后,我完成了有生以来的第一个应用程序设计。在IBM PC使用BASICA编写了通过GPIB接口控制DMM的自动测试系统。程序设计没有遇到更多的困难,当然也就不会有什么成就感。计算机程序设计也不过如此,一切似乎都顺其自然。现在回想起来主要是硬件是现成的、专用的(GPIB卡),并提供了BASIC语言的专用驱动软件。我们只不过是按测试要求做个应用软件框架。

       后来做51系列单片机的汇编语言开发,那时确感到了困难重重,特别是在做浮点计算程序时这种感受特别强烈。这就是我对计算机语言的简单认识和了解,此后我基本上从事的都是硬件电路设计工作。

       其实在这期间,无论计算机的硬件和软件都有了飞速的发展,只是我已经开始沦为计算机的奴隶,而无法窥其全貌。

A.2.1 计算机语言的发展阶段

      计算机语言可以简单的分成低级语言和高级语言,但是这样的分类无法清晰地表示出计算机的发展阶段,根据计算机的实际发展过程,实际上还是采用以“代”来化分为最好。

1、第一代编程语言(机器语言——Machine language)
      计算机诞生之初的程序语言(直接面对物理层的程序语言,与处理器有关)被称之为:机器语言。
      机器语言,也就是人们通常所说的:机器码。 机器码是可被中央处理器(CPU)加载并执行的由0和1组成的序列。
      由于硬件处理器的不同,所以机器码序列也会是不一样的。可以讲,机器码是处理器 (CPU)可识别的唯一语言,并且是执行速度最高的语言。它也是与计算机的硬件(CPU)有着最为直接的关系的一种语言。

       但是,当人们看到机器码,由0和1组成的序列(程序),实在是感到毫无任何规律、枯燥无味,并且无法理解和记忆。特别是,当计算机处理器的性能不断提高时(位数增加),机器语言可能被视为世界上最无法读懂和难以记忆的语言。试想一下,由64位0和1组成代码,如何记忆和理解它们。

      在我的记忆中记得,在八十年代初,北京工业大学推出过一款单板机(TP-801),可以使用机器码进行简单的程序设计,主要是用来学习、了解计算机的原理。

      尽管机器语言仍然驻留和使用在当代计算机中,可是很少有程序员直接使用它来编写计算机程序。

      在处理复杂事物时,采用抽象处理的方法是降低事物复杂度的最好方法。 为了解决机器语言所带来不便的问题,人们对机器语言进行了抽象处理,从而导致了更高一级的汇编语言的诞生。

2、第二代编程语言(汇编语言——Assembly language)
      汇编语言,是从机器语言中抽象提炼出来的使用缩写或助记符进行编程的低级计算机编程语言,所谓低级是指它提供了较少的控制指令和数据类型,其中的每一条语句都对应于一条相应的机器指令(代码),通过汇编程序开发环境中的编译器可以将汇编语言翻译成机器语言,与机器语言一样,汇编语言同样与给定的处理器相关。

       早期,包括操作系统在内的许多系统软件都是用汇编语言编写的(比如:UNXI操作系统)。使用汇编语言的好处在于可以提高执行速度,并且程序员还可以直接访问系统硬件。但是,汇编语言由于其开发环境和汇编程序都依赖于给定的处理器,并且其指令和数据类型很少,同时程序的可读性和可移植性都很差无法广泛使用。

       于是人们再次对汇编语言进行抽象处理,从而导致了更高一级计算机程序语言的诞生。

3、第三代编程语言(高级语言——High-Level Programming language)
       高级语言,是从低级的汇编语言抽象而来的更高级计算机程序语言。高级语言通常使用和英文单词类似的关键词,这些关键词可以被翻译成多条机器指令。事实上,比汇编语言高级的计算机语言都可以看成是高级语言。

       C语言大概是目前最为广泛使用的高级语言。它既具有一般高级语言的特性,同时又具备了一些低级语言特性(某些汇编语言的特点)。
       当然,高级语言还有很多种比如像我们所熟悉的:面向对象的C++、Java及具有可视化编程环境的VC、VB、Delphi等等。这些高级编程语言的存在和发展说明,除了各自的特点不相同,应用领域不同外,还有编程方式的不断改进的推动。
       比如:Basic演变到Quick Basic然后又演变到Visual Basic。
                C演变到C++然后又演变到Java(号称没有指针和头文件的C++)及后来的VC。
       每种高级语言都具备属于自己的编译器(Compiler)或解释器(Interpreter)。使计算机的程序设计更加简单、有效。

4、第四代编程语言(面向问题语言——Problem-oriented Programming language)
      我没有寻找到有关第四代编程语言较为准确的定义或说法。下面的说法来自不同资讯。  
      第四代语言更接近人类的的语言或自然语言[A1]
      通常认为第四代编程语言具有简单易学,用户界面良好,非过程化程度高,面向问题,只需告知计算机“做什么”,而不必告知计算机“怎么做”。
   第四代语言更专注业务逻辑和问题领域,程序设计者主要负责分析和描述问题,不必花费大量的时间去考虑具体的算法和逻辑。事实上,最初提出第四代语言的概念就是希望非专业程序员都能做应用开发。
      第四代语言虽然足够强大,但过于局限某些特定的领域,基本上属于特定领域语言,而不是我们所熟悉的通用编程语言[A2]
 


小插曲——认识提升的故事
      人们对某一事物的认识程度是随着知识的积累而不断地发生变化的。如果你曾看过我在2008年所撰写的《LabVIEW学习札记》网络版的“第2.3节  LabVIEW图形化编程语言”中的内容,你就会记得当时我是如何评价LabVIEW的。那时我以计算机语言的发展是进行不断抽象处理为由,谈到:“LabVIEW是比高级语言更高级的语言,并称之为超级语言“。其实是那时并不知道还存在着更高级计算机语言的发展阶段,绞尽脑汁才想出了所谓的超级语言的提法。之所以有那样的提法是因为分析表明LabVIEW确实是比那些属于第三发展阶段的高级语言要更好些。而现在LabVIEW已被划入计算机语言的第四发展阶段[A3]
      由此看来知识是需要不断地更新和学习的,有时逼迫自己做事(比如撰写本书)可能会起到良好的激励和推动作用。

5、第五代语言(人工智能语言——Artificial intelligence language)     
      
      有些专家将第五代语言定义为允许程序员使用图形或可视化工具,而不是输入成行的代码来构建程序的语言[A1]
      第五代语言重在目标而非过程,重在描述而非实现[A2]
   
      关于第四代、第五代编程语言的定义和描述以不在我的能力之内,有兴趣者可以看相关的资料来了解。但是有资料表明我们下面要介绍的LabVIEW编程语言已经划分到第四代编程语言之列[A3]

A.2.2 计算机语言的特点

      上面我们讨论了计算机语言的发展阶段,从它的发展阶段可以看出它是从低级向高级发展,从模仿机器到向模仿人类的方向发展。

      下面我总结一下前三代计算机语言的其它特点。

1、基于传统的字符模式编程
      在上面所介绍的前三代计算机语言中,我们清楚的看到它们都是基于传统的字符模式进行编程(这里我们把机器语言也视为字符)。基于字符模式编程也就是人们常说的基于文本的编程。

2、充满了强烈的地域性
      字符模式编程是基于ASCII字符编码为主体的,ASCII是一个彻头彻尾的美国标准。字符模式编程的基本语言基础为英语。这使得非英语区域的人学习和使用会感到非常不方便。比如印度与中国相比由于印度的母语为英语,所以它们学习使用编程语言就会很便利,使其可以迅速发展为软件大国,中国人相对困难些。不管这样比较是否恰当,实际上使用母语来学习编程肯定是个利好的因素。

3、使用广泛
      根据TIOBE网站对编程语言作的最新统计(2010年1月),排名前十名的软件的使用者占到全部使用者的80%。可见当前的程序设计还是以基于字符模式的编程为主,占有绝对的统治地位。

Picture
Picture
Google Analytics