浅谈计算机专业中的语言学习
2010-10-24李萍
李萍
(山西大同大学浑源师范分校,山西 大同 037009)
浅谈计算机专业中的语言学习
李萍
(山西大同大学浑源师范分校,山西 大同 037009)
近年来,计算机软件的更新换代要比硬件快得多,且对于计算机功效的提高也以软件的效果更为显著,让计算机充满活力的更是软件,所以学习制作软件的语言更具实用性与必要性。论文分析了当前语言学习过程中存在的几种误区,并提出自己在语言学习中的几种方法及认识,同时还阐述了语言学习与其他课程衔接的必要性,从而让读者更多地了解计算机语言,并可以有选择地、有序地学习计算机语言,能够做到学有所用、学以能用。
计算机语言;语言学习;学习方法
有人类存在的社会,就必定存在着语言,因为语言是人类之间进行沟通、进行一切社会活动的基本工具。计算机语言是计算机能够识别的符号,是人类语言的发展和延伸,是人类与机器(计算机)沟通的工具,是人类借助计算机表达思想、展开想象的桥梁,是计算机的灵魂和魅力所在。计算机没有语言,就失去了其广阔的空间,便只是一种纯粹的工具,与游戏机、计算器、打字机无异。计算机语言最大限度地体现了计算机的强大功能——再造性,最大程度地体现了人类的聪明才智——创造性,也最淋漓尽致地反映出了教育的创新属性。语言教学为真正发挥学生的才能提供了一个展示的平台,这是任何一门学科、一种软件、一个模块教学所不能替代的。如果计算机教学只一味地突出其工具性,而忽视语言教学的作用,必将使人类最终沦落为计算机的奴隶,而不是它的创造者。我们的教育培养出的也仅仅是一批机械的操作者、功能的实践者。所以我们应当充分重视计算机专业中的语言学习,让计算机语言重新焕发生机,这不仅是信息素质教育的需要,也是创造教育的需要,更是发展我国信息产业的需要。
一、语言学习在认识上的误区
1.语言学习越多越好
随着计算机科学技术的迅速发展,计算机语言种类也越来越繁多,从早期的面向机器的语言——汇编语言到后来的面向对象的语言,如:Visual C++,Visual Basic,以及现在尚未普遍使用的 Asp.net,VB.net,各种语言都有其自身的特点和存在的价值。面对如此多的语言,众多学习者认为学习的语言越多越好,其实并非如此,作为人工语言的各种程序设计语言,它们具有语言的某种共同的系统特征,通过自己的亲身经验,一个本科学生如果学好了一种程序设计语言(例如,Pas-cal),再学习其他语言(例如C语言)并不困难。
2.盲目否决某种语言
计算机技术的发展速度之快令人目不暇接,程序设计语言和环境的发展速度也是这样。有些人认为C语言和Pascal语言已经过时了,不如直接在可视化的开发环境中编程,现在是面向对象程序设计的年代,用不着结构化程序设计了,常常会听到这样的提问:“你认为哪一种语言最好?”其实,“谁也代替不了谁,各有所长”,不能简单地说哪一种语言“高级”,哪一种“低级”,只能说哪一种语言适合于哪个领域哪类对象,正如马路上有小汽车、大卡车、公共汽车、摩托车、自行车、三轮车等,各有各的用途,决不能由于有了小汽车就取缔了其他车辆。因此,我们不能一看到新版本的语言就认为它“高级”。
3.急功近利
现在语言的种类非常多,而社会上常用到的语言却是有限的几种,如C语言、C++、VC、VB等,于是出现了这样的现象,片面强调社会需要,认为计算机专业所学的程序设计语言在工作中派不上用场,例如早期的教学性语言Pascal与开发型的C语言之争,这种指导思想受了“社会中心”论的影响,即当前社会上需要什么就学什么,是一种急功近利、实用主义的做法,每种语言都有其特定的价值和适用的领域,主要看自己以后将要想从事的领域,而不应该盲目追风。
4.程序设计与程序语言混为一谈
有许多学生误把程序设计的课当成了“程序语言”课,把主要精力放在了语言的语法规则和语义上。实际上,程序语言只是程序设计的载体、工具。更确切地说,程序语言只是程序设计的一个步骤,正如我国著名的科学家马希文教授所说:“用程序语言把预定的计算方案书写出来,这是程序设计中最有特色的一部分”。程序设计是计算学科课程中固定联系的一部分,是每一个计算学科专业的学生应具备的能力,是计算学科核心科目的一部分,而程序语言只是学习程序设计的工具,学习程序设计的思想方法就必须学程序语言,学习时两者不可能决然分开,学习程序设计的思想才是目的。
二、语言学习的方法及认识
(一)语言学习的方法
1.循序渐进法
按照老师的要求、课程的安排、脚踏实地学。通过练习课本的习题,多上机实践,多思考,从中发现问题。不懂时,再查找有关的书籍、资料解决问题,从中掌握编程的思想、思维,这种方法效果虽然慢,但打下的基础扎实,一旦掌握,则会应用自如。
2.择优选取法
现在流行的语言很多,有VisualBasic、VisualC++、JAVA、Delphi等,同时新语言层出不穷。任何一个人都不可能掌握所有的语言,怎么办?最好只选择一门语言,集中精力钻研、精通它。没有一门语言是万能的,有算法和精通的那门语言做基础,学一门新的语言是件轻松的事。比如C语言,凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧”。欢喜的是C语言功能非常强大、应用广泛,一旦掌握了后,就可以理直气壮地对他人说:“我是电脑高手!”而且以后若是再自学其他语言就显得轻而易举了。忧虑的是C语言犹如“少林武功”一般博大精深,太难学了。其实,笔者认为C语言并非是“difficult(困难)”的,只要能理清思路,掌握它的精髓,那么自学C语言是一件非常容易且又其乐无穷的事。学习C这种中级语言,特别是有指针这种可以直接操纵内存的数据结构,一定要学习一些数据结构、操作系统基础知识、系统结构、汇编知识,如果对计算机原理比较熟悉的话,学习起来就会事半功倍。
3.归类学习法
某些语言之间有共同的特点,如C++和C语言都是面向过程的语言,Visual C++和Java语言都是面向对象的语言,都有类和对象等,我们学习时应注意对比、归类,做到触类旁通。
4.因材施教法
所谓“因材施教”,就是因不同的目的而采用不同的方法。对于对程序设计充满好奇心的人来说,VB也许是一个能够满足这份好奇心的有效手段。不可否认,VB也能写出很好的程序,但是很难想象用VB进行算法分析,构造复杂的系统模型。所以,我们应选择合适的语言来设计不同的应用程序。
首先,应当熟练掌握一门程序设计语言。每个开发环境都是建立在一定的语言基础上的。Delphi的基础是 Object Pascal,VC的基础是 ANSI C++with Microsoft Extension。不过,反观市场上的大多数教材,它们往往在如何应用开发环境上作了很多介绍,而对这些基础的语言往往只是大致地讲述一下,这样的结果是很多人能够设计华丽的用户界面,但是没有能力构造复杂的数据描述,难以开发大型的应用程序。所以,作为程序设计的基础,我们应当对开发环境使用的语言做一个完全的了解。
其次,应当对自己工作的平台有深入认识,虽然现在的开发环境都对底层代码进行了一定的封装,但是,如果想要达到更高的境界,还是需要对系统的工作原理做一个深入的了解的,至少应该对纯粹的API程序设计有一定的经验。
再次,应当知道自己手中的开发工具是如何工作的。这并不是要理解VC开发环境的全部,而是要知道MFC是一个什么样的体系,是如何将一个C++程序“翻译”成基本的Windows程序结构。
最后,要了解如何进行一个完整的程序设计工作。程序设计不仅仅是写代码,而且是一个系统工程项目。这就是软件工程学诞生的目的。
(二)语言学习的认识
以我们所学过的汇编语言为例来谈谈对它的认识:汇编语言设计程序,主要是面向过程,整个程序就跟一个流水线似的,从头执行到尾,中间有些判断,跳转指令,实现循环。所以,看汇编源程序的时候,从头看到尾就行,编程序的时候人们的思路也很单一,需要等待用户输入,就做一个循环,不停检测键盘输入,如果没输入,程序就停到那里,也没有多线程之说。汇编语言给我们带来的唯一困难就是,需要对计算机硬件有很深刻的了解,得知道什么是中断向量,什么是寄存器,什么是堆栈、CPU执行语句的过程、各个中断的功能、端口如何读写、如何操作显示缓存、内存管理方式、磁盘读写原理等等一大堆跟系统硬件有关的知识。可以说,只要汇编语言学好,那么计算机在我们的眼里就是微不足道的,可随意摆弄。汇编语言的强大,让人们爱不释手。但它的艰苦学习过程却让人们很头痛。
汇编语言由于其本身过于接近计算机硬件,并且难以理解,所以不适合一般初学者学习。经典的C语言被普遍认为是除汇编语言外程序设计语言的始祖,学习C语言是了解程序设计语言的必经之路,是学习程序设计很好的入门捷径。但是学习C语言是一个漫长的过程,它是基础,在很长的时期内不会被淘汰。把C语言学好了,其他的语言如:C++、C#、JAVA、VC、VC++、VB、DELPHI……这些学起来就会比那些C语言基础不扎实的人要轻松得多。想学C语言并不只是学语法那么简单,重要的是编程思想,难的是它在不同环境下的应用。这是一个漫长的过程,需要经验的积累。当然,并不是说死死抓住C不放,但如果你目前还不知该怎样编程,建议在你有一种游刃有余的感觉之前,还是不要去碰什么C++、Java之类,那样你遇到的困难会更大。当你学到不自觉地使用这门语言时,建议暂时不要看高级编程,多写代码、多看代码、培养风格、熟悉语法,最关键的是把握思想。如果自己独立写完一个程序(无论大小),并看到他它正常运行时便会有一种成就感。不断培养这种成就感,进步是自然的事情了。一门语言最本质的东西就是其类型系统,任何语言都有自己独特的类型系统,而且人们获取知识的最好方法莫过于充分利用已有的知识,通过对比进行学习。比如C语言和Visual Basic,一种是面向过程的语言,一种是面向对象的语言,我们通过对比进行学习,下面是实现简单计算器的两种程序:
我们看到C语言的界面不太美观,要求对其过程的执行非常清楚,但它代码短、执行效率高、运算速度快;而VB具有可视化界面,每个按钮的功效非常清晰,容易操作,且VB程序是由许多小程序组成,具有模块化、事件化、逻辑性强等特点,但它实现代码较长。所以两种语言各有所长、各有所短,不能简单地说哪种好、哪种不好。
每种经受住时间检验、得到广泛使用的程序设计语言,都有自己的特长和不足。BASIC的特点决定了它是很理想的初学者语言;而建筑具有良好可移植性的系统,又是C语言的拿手好戏。对于编程入门人员,可以先借助VB这个可视化环境大致了解可视化编程的特点,并且可开发与系统无关的综合应用程序。VC在网络开发和多媒体开发中都具有不俗的表现,一旦掌握了它,就可以在网络、系统底层、多媒体开发等领域自由驰骋,但VC的入门比较难,要使用VC,必须对它的MFC库非常熟悉,所以我们学习时要有一定的耐心。Java应用程序能够自由地打开和访问网络上的对象,具有建立在公共密匙基础上的确认技术,大多数病毒无法破坏其数据,可以构造出无病毒、安全的系统。Java语言在除了开发系统软件、大规模的图像处理外的领域都可以使用。
三、语言学习与有关课程的结合
在语言学习过程中,除了对方法应注重以外,还应注重和其他课程结合起来,从计算机程序设计语言方面考察,语言的理论基础是形式语言、自动机与形式语义学。而形式语言、自动机和形式语义学所采用的主要研究思想和方法来源于数理逻辑和代数。程序设计语言中的许多机制和方法,如子程序调用中的参数代换、赋值等都出自数理逻辑的方法。此外,在语言的语义研究中,四种语义方法最终可归结为代数和逻辑的方法。这就是说,数理逻辑和代数为语言学提供了方法论的基础,瑞士著名计算机科学家尼可莱·沃思在1976年曾提出这样一个公式:
算法+数据结构=程序
由此看来,算法和数据结构是计算机程序的两个最基本的概念。算法是程序的核心,它在程序编制、软件开发,乃至在整个计算机学科中都占据重要地位。因此,很多课程对语言学习起辅助作用。
1.与计算方法的结合
程序设计解决某一个问题的思想来自于算法,而算法又来自于计算方法,数值计算是电子计算机处理实际问题的一种关键手段,计算方法的基本思想是:
它也要面向计算机及程序设计,要求算法具有递推性、简洁性及必要的准确性。
2.与数据结构的结合
“数据结构”是计算机程序设计的重要理论技术基础,如果说高级语言程序设计课程对学生进行了结构化程序设计的初步训练的话,那么数据结构课程就是要培养他们的数据抽象能力。采用类C语言作为数据结构和算法的描述语言,既不拘泥于C语言的细节,又容易转换成能上机执行的C++程序。
3.借助CAI辅助语言学习
CAI在我国高等教育界起步不久,方兴未艾。计算机科学与技术的许多课程的教学都借助了它,由于计算机语言中各种成分的语法、语义规定条款较多,需要记忆,可借助CAI来增强它们在脑中的印象,这样也有助于我们对程序设计语言语法的掌握。
四、未来编程语言的着重点
(一)易用性
这一直是计算机编程语言的主要发展趋势,从机器语言——符号语言——高级语言这个发展过程就可以明显看出这个趋势。随着Internet的普及,越来越多的用户不管计算机知识基础如何,都会有按照自己需要定制软件的需求。这样一来,提供更高层次的开发方法便成为主要需求之一。
(二)高效与安全性
在IT业的发展过程中,社会对软件的需求增长得更快,这就要求软件开发具有一定的时效性,从而导致对高效程序语言的需求。这可以从几个方面来加以促进,例如可以消除传统开发语言容易引起错的地方,保证语言开发的应用安全性。
(三)可移植性
Internet的精神是自由、开放和共享,然而全世界的计算机各种各样,传统高级语言只能做到代码级可移植,不同的程序到不同的计算机或操作系统平台上还需要重新编译,这远远不能满足现在的需要。“一次编译,到处执行”一直是人们的目标,Java语言从某方面上实现了这种功能。
(四)网络性
随着Internet的发展,越来越多的网络编程语言得到重视,比如说目前比较流行的Perl语言,就是作网站的首选语言之一,而那些简单易学的VBScript、JavaScript也是很火。微软新推出的C#语言,与现有的Web开发标准紧密结合,能将任何组件转变为Web服务,并且可以被Internet上的任何平台的任何应用所调用。在未来网络的需求下,还会有更好的网络编程语言面世。
[1]刘成章,等.信息技术教育学[M].北京:高等教育出版社,2002.
[2]董荣胜,古天龙.计算机科学与技术方法论[M].北京:人民邮电出版社,2002.
G642
A
1673-0046(2010)11-0124-03