何树印
笔者在文中所讨论的教学用编程语言,只针对高级语言,其按程序的执行方式可以分为两种:编译型、解释型。高级语言种类繁多,并且每年都有许多新的语言诞生,但很多语言应用范围并不广,这里仅谈论以下几种比较流行的高级语言。
基于过程的字符界面下的编程
依稀记得最早的教学语言应该是Basic,它的特点是简单。初学者很容易入门,但是由于它本身的缺点,有人认为用Basic不利于培养优良的编程习惯。Basic是解释型编程语言,但是它的后续高版本VB,被做成了编译型语言。Pascal是编译型语言,语法严谨,层次分明,程序易写,可读性强,是第一个结构化编程语言,它具有丰富的数据类型和简洁灵活的操作语句。发展到今天,Pascal计算机程序教程有很专业化的课程,并且越来越完善和严格化,所以有人把它称为最好的教学语言。二十年前,大学学习DOS下编程时,入门所用语言就是Pascal。当时的教材不多。笔者毕业后刚从事信息技术教育时,中学课本中没有编程的内容,几乎都是一些普及性的知识。自然而然地,笔者在课外辅导学生们进行编程时,选择了Pascal编程语言。对于它,学生接受起来有一定的难度。该语言本身虽然被人称为教学语言,但是兴趣小组的人数,在一个几百人的年级中只有十几个人。比如求1至100的和(如图1)。
这段短小的程序,笔者要讲好几节课,学生要记住的东西很多。首先是关键字,记不住就没法编写,然后是每一句的意思。也就是说,学生想明白循环语句的用法,需要很长时间。如今,由于Delphi渐渐淡出了人们的视线,Pascal更是彻底沦为了纯教学语言。所以,有人认为应该直接教授C语言。C语言程序设计结构化,具有丰富的数据类型和灵活的控制结构,运算符丰富、书写灵活、适应性广,拥有强大的指针操作、丰富的函数库。因为功能太强大,所以也有人认为它不适合初学者。笔者曾经教过几个四五年级的孩子学习C语言编程,用的教材是《啊哈C!》,作者用风趣的语言把艰涩难懂的概念阐释得通俗易懂,孩子们都能够看懂并学习下去。也就是说,C语言并不是不能作为教学语言,只要教师选取好内容,它可以像Pascal一样作为教学语言。由于Pascal语法严谨,因此一些Pascal的源码,很容易修改成C的源码,教师可以比较容易地利用Pascal的教学资源来教授C语言。Pascal和C都是编译型语言,执行效率比较高。同样是求1至100的和,用C语言可以这样写(如下页图2)。
面向对象的编程
随着时代的发展,面向对象的编程出现了,面向对象的语言运用愈来愈频繁,如Java。由于面向对象本身难度有点大,入门时很少有人直接讲授面向对象的概念。学生大都是面向过程的编程入门后再去理解面向对象的概念。
说到Windows下的编程,不能不提一下可视化编程。1991年4月,Visual Basic 1.0forWindows版本发布,这在当时引起了很大的轰动,许多专家把VB的出现当作是软件开发史上的一件具有划时代意义的事件。对于可视化编程来说,VB无疑是最容易入门的。后来出现了delphi、VC++。公认的可视化编程,比较容易入门的就是VB了。山东省现行泰山版初中教材中,程序设计部分用的是VB。有的教师是从其他专业转过来教授信息技术课的,感觉困难很大。同样是上面的程序,它的实现如图3所示。
它看上去比较短小,好像比Pascal和C容易理解。但实际上,因为要学习窗体控件之类的知识,还有就是消息的传递,所以虽然结果看上去直观了,但是学习起来难度并没有降低多少,甚至更大了。由于VB隐藏了太多的东西,不利于整体理解程序的概念,所以很多专业人员渐渐地转到了其他方面。虽然后来微软把它做成了编译型语言,也增加了面向对象的功能,但现在用它的人也渐渐地少了。
图形化编程
时间转眼过去了十多年,程序设计语言也在飞速发展,图形化编程工具的出现为初学者带来了福音。其中的代表当属Scratch。用Scratch来引导小学生学习编程,结果他们很轻松地对照教材完成了任务,而且很容易地加入了自己的创意。
例如,在C语言中常见的赋值语句i=i+1初学者就很难搞明白,但是在Scratch中比较容易理解了。用scratch编程求1至100的和,这样看上去比那些字符直观多了(如图4)。
可能在很多专业人员眼中,Scratch就是一个玩具,执行效率差,数据类型不如专业语言丰富,处理问题不如专业语言灵活……然而就是这个玩具,可以让孩子们把他们想象中的一些东西变为现实,最大限度地激发了孩子们的学习热情。并且有很多非计算机专业的创客,用这个工具实现了他们的创意。
Scratch作为程序教学的优点有很多,但这并不是说传统的编程软件不好,它们的专业性很强,都是非常优秀的编程工具。这里只是谈论中小学生学习编程入门的工具。如果学生想更深入地学习计算机专业知识,还是需要去研究C语言甚至汇编语言,即使工作中用不到,这些传统语言的学习也有助于对计算机系统本身的工作原理的深入学习。
计算机编程语言的不断发展,就是为了让人更容易地使用计算机。随着技术的发展,计算机的速度越来越快,人们越来越重视代码的可读性和重复使用性。除了一些专业系统,一般而言,对于执行的效率需求退到了次要的位置。从汇编语言到C、Basic、Pascal是一种飞跃。横空出世的Java语言以其颠覆式的面向对象的特性迅速获得了开发者的关注,C也摇身一变成为了C++,Pascal没变名字,但也增加了面向对象的支持。VB、VC、Delphi等可视化编程又是一种进步。后来在细分的专业领域,人们又开发出了如PHP之类的语言。Scratch等图形化编程软件的出现也是历史的必然。每一种新的语言的出现并没有完全淘汰掉原有的语言,原有语言也在不断地吸收新的思想,也在进步。只能说每一种语言都有它最适用的范围。Scratch也有很多缺点,这使得它在使用时很受限。最起码现在无法完全替代传统的编程语言,它的应用领域应该是在入门、普及上。相信随着Scratch的完善,它会有更美好的未来。