《程序设计基础》国家级“十二五”规划教材建设经验谈


打开文本图片集

摘要:以《程序设计基础》“十二五”国家级规划教材建设为背景,详细介绍教材建设的指导思想、发展历史、特色和内容,指出以“授之以渔”和案例驱动模式组织教材是一种有效培养计算思维的方法。关键词:高级语言程序设计;程序设计基础;计算思维;授之以渔;教材建设

文章编号:1672-5913(2013)18-0122-06

中图分类号:G642

0 引言

目前,计算机已经渗透到各个领域,甚至普及多数家庭,它像电视、冰箱一样,已成为家用电器之一。社会需求的变化,使现在计算机专业的含义从以前的“研究计算机本身”转变为“计算机应用”,甚至是“应用计算机”。尤其近几年计算思维概念被提出后,很快得到广泛的关注和认可,其中程序设计课程培养学生计算思维能力的思想已被广泛接受。

在“着重培养学生计算思维能力”和“面向应用”的大背景下,程序设计课程不应再去讲授程序设计语言本身了,而应讲授程序设计语言的应用,应将授课重点从讲授语言的符号、语句等语言成分上,转移到讲授程序设计上。教学目的是教会学生“怎么编程序”,而不是背几个语言符号、说明、语句等,应把该课程的名字从“×××语言”改为高级语言程序设计、程序设计基础或程序设计。

在“面向应用”的背景下,我们出版了《程序设计基础》,该教材被评为“十一五”国家级规划教材。为了反映计算思维思想和近年来的教学改革成果,我们对该教材进行了修订并将其作为“十二五”国家级规划教材由高等教育出版社出版。第2版《程序设计基础》教材保持了第1版的特色,更加明确了培养学生计算思维能力、以程序设计为主线和“授之以渔”的宗旨,进一步提升了以计算思维为主导的程序设计教学思想。

1 教材建设

《程序设计基础》教材的历史渊源深远,继承了20世纪60年代以金成植、金淳兆教授为代表的多位前辈的心血,吸纳了多部优秀教材的精髓,同时,结合了笔者30余年的教学经验,凝练了多部教材成果。本教材建设经历了4个阶段。

1)初建阶段,探索并形成完善的内容体系。

1962年吉林大学程序设计方向招收本科生,1970年以招收工农兵学员为标志,吉林大学恢复计算机教学,1972年恢复程序设计课程教学,1976年吉林大学计算机科学系成立。程序设计是这个阶段首当其冲的课程。面对国内资料缺乏,无经验借鉴的困难,本专业的前辈们对教学内容、教学方法进行了认真研究,逐步形成了完善的教学内容体系,并先后出版了两本教材。

(1)1978年,《算法语言ALGOL 60入门》由科技出版社出版,是全国较早的程序设计语言教材。

(2)1982年,教育部六五全国统编教材《程序设计语言》由高等教育出版社出版。

2)紧跟改革开放步伐,锐意教学内容改革。

20世纪80—90年代,随着我国改革开发的进程和西方先进技术的引进,程序设计教学也在不断改革,这个阶段使用的程序设计语言经历了从ALGOL 60到BASIC,到FORTRAN,再到PASCAL,最后到C的过程。在该过程中,我们紧跟国内外发展趋势及时调整授课内容,陆续出版3部教材。

(1)1987年,《FORTRAN 77程序设计语言》由吉林大学出版社出版。

(2)1990年,《PASCAL语言程序设计》由吉林科学技术出版社出版。

(3)1998年,《PASCAL程序设计》由吉林大学出版社出版。

3)适应高等教育形势发展,积极进行程序设计教学理念研究、改革与实践。

随着进入21世纪国内教学改革的进程,我们总结了20世纪末以来的社会发展,认识到计算机已经渗透到社会各个领域,计算机教育已经不是20年前的计算机教育了。与以往相比,现在绝大部分计算机专业人员主要在做计算机应用,而不是研究计算机本身。在这种形势下,高级语言程序设计不应该再去讲程序设计语言本身,而应该讲程序设计语言的应用。授课的重点应该是教会学生怎么编程序,而不是背那些语言符号、说明、语句等。按这种思想,逐渐形成了以程序设计为主线的教学指导思想,并先后出版了6部教材。

(1)2001年,《PASCAL语言程序设计》由电子工业出版社出版。该书由全国高等学校计算机教育研究会和中国计算机学会教育专业委员会推荐出版,是21世纪高等学校计算机学科系列教材中的一本。

(2)2004年,《C程序设计》由高等教育出版社出版。该书以C语言为载体,以程序设计为主线,介绍程序设计技术,摒弃了当时流行的以解释程序设计语言为主的做法,把讲授重点放在程序设计方法上,注重对学生进行程序设计方法及算法的训练。

(3)2005年,《Pentium汇编语言程序设计》由高等教育出版社出版。该书是教育部面向21世纪教材、“九五”国家级规划教材。

(4)2008年,“十一五”国家级规划教材《程序设计基础》由高等教育出版社出版。该书进一步明确了“以程序设计为主线”的指导思想。

(5)2008年,《程序设计基础习题集》由清华大学出版社出版。该书贯彻主教材以程序设计为主线的指导思想,所选习题全部为程序设计习题,不依赖于任何“程序设计语言”。

(6)2009年,“十一五”国家级规划教材《大学计算机程序设计基础》由清华大学出版社出版。

4)跟踪国内外新教学思想发展,进一步进行程序设计教学理念改革与实践。

进入“十二五”以来,计算机学科教学思想进一步得到提升,计算思维思想被提出并得到广泛重视。在由李国杰院士任组长的中国科学院信息领域战略研究组撰写的《中国至2050年信息科技发展路线图》中指出:计算思维的培育是克服“狭隘工具论”的有效途径,是解决其他信息科技难题的基础。

人类思维可以总结为3个部分:①以观察和总结自然规律为特征的实证思维——以物理学科为代表;②以推理和演绎为特征的推理思维——以数学学科为代表;③以设计和构造为特征的计算思维——以计算机学科为代表。其中计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。计算思维体现了计算机学科的基本特征和方法。

在这种形势下,我们对高级语言程序设计课程的教学思想、理念、内容、方法、过程进行进一步的研究、探讨和改革,并取得丰硕成果。

(1)2011年,“十一五”国家级规划教材《程序设计基础》被评为2011年度国家级精品教材。

(2)2012年,《程序设计基础》被选为“十二五”国家级规划教材。

(3)2013年,“十二五”国家级规划教材,以计算思维为主导思想和理念的《程序设计基础》(第2版)由高等教育出版社出版。

2 教材特色

计算思维同“读、写、算”一样,应是人人都具备的能力。《程序设计基础》(第2版)秉承这一理念,形成鲜明特色。

(1)以培养计算思维能力主导:计算机的出现和使用已经深刻地影响了人类的思维方式和思维习惯。本教材的目的是教会读者怎样编写程序,学会怎样以“计算”的方式去思考和解决问题,怎么“像”计算机科学家那样思维,彻底地改变“学了程序设计而不会编程序”的现状,提高读者的程序设计能力和计算思维能力。

(2)以“授之以渔”为宗旨,而非“授之以鱼”:针对程序设计的每个知识模块都采取图1所示的模式组织教学内容,目的是教会学生怎么编写程序,而不是让学生去背几个语法符号、规则。

(3)以程序设计为主线:按程序设计的思路组织全书内容,真正地讲授程序设计,而非语言,把重点放在讲述程序设计方法上,注重对学生进行程序设计方法、算法和计算思维的训练,摒弃了前一阶段各种程序设计教材中流行的主要“解释程序设计语言”的做法,将C语言只作为讲授程序设计的载体工具。

(4)以案例为驱动,突出实践:选取大量案例,以案例为驱动,彻底改变单纯解释语法、语义等语言成分的做法;改变提出语言概念并解释,然后以小程序说明相应概念的做法;让程序设计始终贯穿于整个教学过程。书中案例多选择与实际应用相关的、实用的题目。案例的目的不是解释语言概念,而是讲述程序设计方法、构造算法,以训练学生的实际编程能力、计算思维能力为目标。

(5)重点突出:根据讲述程序设计方法的需要,对C语言本身采取“有所取、有所不取”的策略。对于那些常用的语言成分,直接与讲述程序设计方法有关的语言成分,将其穿插在程序设计过程中详细准确的介绍;对于那些与程序设计方法联系不太紧要,但是还常用的部分,放在最后简单介绍;而对于那些与讲述程序设计方法关系不太大,也不常用的部分则根本不涉及。

(6)分散难点:注意由浅入深地介绍程序设计知识,把难点化解和分散到各个章节中去。例如,函数和指针是程序设计的难点,我们将概念逐渐化解和分散到不同的章节和学时里,便于学生消化理解并各个击破。

函数的概念分4章逐步介绍:①第5章函数人门,简单引进函数概念,让学生会使用函数编程序;②第9章再论函数,介绍有关函数的进一步知识,包括函数参数、函数值、作用域等;③第10章递归程序设计,进一步介绍递归及其程序设计思想;④第14章介绍有关函数的较深入的知识,包括函数指针、函数作参数、函数副作用等。

有关指针内容是程序设计的最难点,本教材把指针知识分散到各个章节去。在第2章先引进变量地址的概念,指出变量地址就是变量指针,并指出变量指针与变量值的区别,让学生对指针有个初始印象;第7章先介绍指针这种特殊的数据类型,引进指针概念,讲述指针与数组的关系;在以后各个章节分别介绍结构指针(第8章)、返回指针的函数(第9章)、文件指针(第11章)、命令行参数(第11章)、用指针实现动态数据结构(第13章),最后在第14章进一步讲述指针与数组的关系,介绍行指针,并对指针进行总结。

3 教材内容

3.1 内容结构

《程序设计基础》(第2版)教材以C语言为载体讲述程序设计,且为突出“程序设计”主题,对C语言做了一定的取舍,目的是使学生尽快掌握并熟练编写程序,而不受具体语言语法的限制。全书共14章,可分为基本知识、程序设计、数据组织3个部分。基本知识部分主要介绍高级程序语言的基本概念、C的基本语法单位;程序设计部分包括函数、流程控制、递归等结构化程序设计开发方法;数据组织部分包括数组、指针、文件、结构体等数据存储形式,以及栈、队列、链表、树等数据组织形式。教材知识模块章节分布如图2所示。

3.2 “授之以渔”的内容组织模式

该教材在编写过程中始终以“授之以渔、案例驱动”的模式组织教学内容,强调实践。

(1)以现实生活中的问题为案例。首先提出问题,然后分析问题,得到方法,再编码。在整个解决问题过程中,强调分析和解决问题的过程,淡化语言成分的影响。通过简单的有实际意义的问题分析程序、编写程序,拉近学生与程序间的距离,让学生直观地看到程序开发过程。这样做使教学从抽象变成自然,有效培养学生的逻辑思维能力,大大提高学生的学习积极性,使学生对程序设计产生兴趣,对本课程产生吸引力,并取得良好的教学效果。

全书开篇第1章第1节,从大家熟知的鸡兔同笼问题开始。“今有鸡、兔同笼,上有35头,下有94足,问鸡兔各几何?”,按照如下步骤讲解题目并给出程序设计相关概念。第1步,解决该问题应把问题数学化,列出二元一次方程;第2步,解该方程组,选择消元法;第3步,使用消元法解上述二元一次方程组;第4步,分析计算步骤,给出实际计算过程。针对第4步的计算步骤,指出“这就是程序”,接着指出第1到第4步的“分析过程就是程序设计”,并给出“算法”等概念。

(2)由浅入深、分散难点。像前面指出的,函数是程序设计教学的一个难点,程序设计中的函数虽与数学中函数的概念类似,却有很大的不同。这不仅体现在函数本身的形式定义上,而且在其使用方面也有很多区别。本书将函数相关知识点分散至4章进行讲解。

在介绍基本语言成分之后,首先第5章引人函数的基本概念,突出函数在模块化程序设计的作用。接着在学完数组、指针、结构体和共用体,有了一定的编程序经验之后,在第9章重新回顾函数,解释函数中参数传递和返回值等较难的内容,引出作用域、生存周期、全局和局部变量等概念。然后在第10章递归程序设计,进一步介绍递归函数及其程序设计思想。最后在第14章介绍有关函数的较深入的知识,包括函数指针、函数作参数、函数作用等。

这样避免了将过多知识点集中在一章,使读者学起来枯燥乏味,接受困难。而且学生通过中间对数组、指针、结构体和共用体、文件、程序开发等章节的学习,积累了程序设计经验,带着问题来学习,大大提高了学习的效果。

(3)不避难点,一题多解。“递归程序设计”乃至“递归思维方式”历来是程序设计的难点,许多教材采取淡化的方式去处理,有的甚至回避。本教材从训练学生实际编程能力出发,用一章的篇幅强化“递归程序设计”的训练。

在第10章开篇以读者熟知的“计算n!”为案例,首先给出循环迭代程序,然后引导学生换个角度考虑问题,指出n!不仅是1×2×3×…×n还可以定义成:

从而给出递归程序,介绍有关递归程序的知识,指出保证这个递归程序正确的条件,并给出几个递归程序的例子,包括“计算n次勒让德多项式”“汉诺塔游戏”等程序。然后介绍递归程序设计的思想,它体现在:用逐步求精原则,首先把一个问题分解成若干子问题,这些子问题中有问题的与原始问题具有相同的特征属性,至多不过是某些参数不同,规模比原来小了。此时,就可以对这些子问题实施与原始问题同样的分析算法,直到规模小到问题容易解决或已经解决为止。也就是说,若将整个问题的算法设计成一个函数,则解决这个子问题的算法就表现为对相应函数的递归调用,从而引进递归程序设计。

接着在教材的10.2节以“计算算术表达式值”为案例,讲述间接递归程序设计。最后在10.3节仍以“计算算术表达式值”为背景,讲述递归程序的执行过程,这是任何教材都没有的内容。本教材为了加深读者对递归程序的理解,特别加写了这一节。本节首先介绍保证递归程序执行正确的语言系统在执行函数调用时的调用过程;然后给出一个实例;最后模拟执行这个实例程序,给出程序执行过程中计算机内存的动态分配、释放过程(栈的变化),从实例中让学生理解递归思想。

4 建设成果

经过长期建设,该教材取得丰硕成果。2007年被选为“普通高等教育‘十一五’国家级规划教材”,2011年被教育部评为“普通高等教育国家级精品教材”,2012年被选为“普通高等教育‘十二五’国家级规划教材”;以该教材为主教材的吉林大学的高级语言程序设计课程于2009年被评为国家级精品课程,所在教学团队于2010年被评为吉林省优秀教学团队。

5 结语

程序设计在计算机专业本科教学中占有重要地位。作为计算机专业的第一门程序设计课程,程序设计基础不仅要使学生知道什么是程序设计语言,即能读懂语言的符号和规则,而且还要能够掌握程序设计思想,学会怎样编程,而不拘泥于语言细节;能像计算机科学家那样的思维去思考问题,培养学生的计算思维能力。为达到此目标,程序设计教学指导思想上要摒弃过去那种以“解释程序设计语言”为主的做法,细致讲解问题求解过程、强调思考过程,而非解释语言;在教学手段和方法上要增加学生自己独立思考和动手的机会;加大上机实践在正常教学中的比例;同时配以大量的实际应用案例,强化计算思维的训练。

参考文献:

[1]Wing J M.Computational thinking[J]_Communications ofthe ACM,2006,49(3):33-35

[2]陈国良,董荣胜,计算思维与大学计算机基础教育[J]。中国大学教学,2011(1):7-11

[3]张长海,陈娟,刘磊,程序设计基础[M],北京:高等教育出版社,2008

[4]中国科学院信息领域战略研究组,中国&2050年信息科技发展路线图[M],北京:科学出版社,2009

(见习编辑:刘丽丽)

推荐访问:经验谈 程序设计 二五 规划 基础