计算机程序开发类课程整体性思维培养的探索与思考
2018-01-17熊熙乔少杰李斌勇
熊熙+乔少杰+李斌勇
【摘要】文章针对大学计算机专业新生遇到的如何选择和学习编程语言的问题,分析每种编程语言的特点,提出以掌握关键的通用语言特性为核心的学习方法。该方法可以使学生提高学习效能,快速掌握具体编程语言的核心技术,提高实践技能。
【关键词】编程语言;语言特性;整体性思维
为适应不同应用场景和用户需求,近几年计算机领域出现了众多的新技术,同时编程语言也种类繁多,使学生在学习过程中感到茫然与困惑。新入学的计算机相关专业大一新生,通常会从基础的C语言开始学习,然后逐步接触各种面向对象编程语言,如C++和Java等。此外,实践环节也要求他们另外掌握一些编程语言,以完成不同的任务。面对难度和用途各异的编程语言,大学新生在学习过程中问得最多的问题就是应该学习什么编程语言,以及怎么学习。
一、编程语言选择的困惑
新生在学习完计算机基础和面向过程的C语言后,都会进入到更加复杂的面向对象编程语言的学习。如何在最短时间掌握一种语言的核心技术,有必要在计算机课程初期进行介绍,以便学生选择课程和自学,并提高其学习兴趣和学习效率,避免少走弯路。这些主要问题包括:
是否应该选择最热门和最时髦的编程语言来学习,以利于日后找工作?是否应该买一本经典书籍来学习某种编程语言?在学习一门语言的过程中,是否应该学习完该语言的所有特性以后才开始练习?如何避免长期不用某种语言导致的知识遗忘?
二、重视语言特性
有不少学生每学一种语言,遇到深入一点的特性就放弃,然后转而学习其他语言,最后一个学期下来还是只会简单的算术运算和循环。殊不知任何一种编程语言都是各种语言特性的组合。如果将一种编程语言看作一台电脑,那么它的牌子可能是联想、Dell或者苹果。苹果电脑一般比其他电脑昂贵,但是并不能简单认定苹果电脑就一定比联想或者Dell好。电脑的好坏主要由其配置决定,比如处理器型号(包括核数、主频大小、缓存大小)、内存大小、硬盘大小、显示器分辨率和显卡型号等等。在这里,电脑的品牌相当于编程语言的名称,而电脑的配置就相当于编程语言的语言特性。常用的语言特性包括变量定义、算术运算、循环语句、函数定义及调用、递归、静态特性、类型转换、面向对象特性、垃圾回收和指针特性等。
在学生接触C语言之后,有必要为他们概括介绍所有语言的语言特性,使其了解语言特性与特定语言无关,学好任何一门编程语言都可以成为编程高手。
三、授课方法
(一)介绍所有编程语言的整体概述
TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、Wikipedia、YouTube以及Baidu等)进行计算。图1列出了2017年7月编程语言排行榜的前10种语言。
(二)介绍编程语言的分类及区别
本文讨论的编程语言都属于高级语言的范畴,不包括汇编语言等底层编程语言。可以用不同标准对高级编程语言进行分类。从对事务的认识上来进行区分,可以分为面向过程的编程语言和面向对象的编程语言;从可执行文件的生成和执行过程来划分,可分为编译型语言、解释型语言、混合型语言。
1.编译型语言,包括C、C++等。这里说的编译是指在应用源程序执行之前,就将程序源代码翻译成汇编语言,然后进一步根据硬件环境变成符合运行需要的机器语言的目标文件。这种方式使用比较方便,效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件才能执行,只有目标文件而没有源代码,几乎是没法修改的。大多数软件产品都是编译后发行给用户的,不仅便于直接运行,同时又使他人难于盗用其中的一些原始代码。
2.解释型语言,包括Python、Perl、JavaScript等。解释型语言的实现中,翻译器并不产生机器语言的目标文件,而是产生易于执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解释是由解释器软件支持的,不能直接使用硬件,解释器软件通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。解释程序的优点是当语句出现语法错误时,可以立即引起程序员注意,而程序员在程序开发期间就能进行校正。
3.混合型语言。有些人为了特殊目的制造混合型语言,例如Java。Java程序也需要编译,但是没有直接编译成为机器语言,而是编译成为字节码,然后在Java虚拟机上用解释方式执行字节码。这种运行方式具有一些优势,但同时直接导致了复杂的环境、不算很高的效率和很多的争议。
基于以上划分标准,表1列出了幾种常用编程语言的特性与区别。
(三)推荐合理的入门语言
大学新生因为刚接触计算机专业知识,只是模糊了解一些编程技术。因此,有必要从一种体系完整的、没有明显缺陷的语言出发,培养编程兴趣,掌握最关键的语言特性,然后由此把这些概念应用到其他语言。
总的说来,脚本语言不适合作为入门语言,尤其是那些源于早期UNIX系统的脚本语言,例如Shell。使用脚本语言作为编程入门语言,一个很严重的问题就是使得学习者抓不住关键。脚本语言为了简化编程,往往把一些系统工具性质的东西(比如正则表达式、Web概念等)加入到语法里面,导致初学者为它们浪费太多时间,却没有掌握核心的语言特性,即变量、函数、递归、类型等。因此,好的入门语言应该使学习者专注于学习最核心的语言特性。
选择编程语言时可以参考图1的排行榜,尽量选择流行度高的语言,以保证未来更多的就业岗位,同时也应该考虑编程语言对核心语言特性的表现方式。鉴于此,这些语言可以推荐为入门之用:C、Java、Python、JavaScript。相比之下,这些语言则不适合用于编程入门:Shell、PowerShell、Perl、PHP、Basic、Go。
(四)培养兴趣,重视实践
在具体学习某种编程语言的过程中,学生应该掌握以下基本方法。
第一,在掌握上述通用语言特性的基础上,针对某种编程语言,首先粗看语法,将之前学习的语言特性具体化,理解该语言特性的具体表示形式;然后阅读一些示范性小程序,了解该特性的实际用法;接着快速练习,并在练习过程中有针对性地查找相关资料,深化对该特性的认知。
第二,初学者切忌阅读过厚的经典编程书籍,因为这些书籍大多是资深程序员所写,对许多高级特性讲解十分透彻,但是并不适合初学者。
第三,在掌握基础语法、特性和使用方法后,可以结合稍大的具体例子进行练习,以培养编程兴趣,提升成就感。当完成所有语言特性学习以后,可以在github中关注某些开源项目,以实际项目驱动学习,同时巩固所学的各种语法,提升编程技术。
第四,在掌握一门语言以后,需要重新将该编程语言的语言特性抽象出来,为以后快速学习其他编程语言做好准备,也可以在长时间不用该语言导致知识遗忘时进行快速回顾。
四、结语
如何选择合适的编程语言,是一个基础性的问题,容易被教师和学生忽略。掌握关键的语言特性是学习的核心,并在此基础上通过实践逐步学习某种语言的语法,循序渐进地培养编程兴趣。相信大多数学生都会爱上编程和计算机技术的。endprint