基于计算思维的程序设计类课程教学实践

2014-04-15 16:32滕剑锋王玉锋刘二林
济宁医学院学报 2014年2期
关键词:程序设计思维能力案例

滕剑锋 王玉锋 王 猛 刘二林

(济宁医学院医学信息工程学院,山东日照276826)

随着计算机应用范围的不断扩展,程序设计类课程不仅是计算机相关专业的必修课程,也是广大非计算机专业的基础课程。以医学专业为例,教育部在2011年下文,明确了包括程序设计基础在内的多门课程作为必修的计算机基础课程。2010年7月,在西安举行的首届“九校联盟(C9)计算机基础课程研讨会”旗帜鲜明地把“计算思维能力的培养”作为计算机基础教学的核心任务[1]。

国际上广泛认同的计算思维定义来自卡内基·梅隆大学周以真(Jeannette Wing)教授。周教授认为,计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解的涵盖计算机科学之广度的一系列思维活动[2]。计算思维的理念古已有之,只是2006年周教授首次把该概念清晰归纳。计算思维的本质是抽象和自动化。其与“理论思维”(以数学为代表)、“实验思维”(以物理学为代表)一起,并称3大科学思维[3]。

1972年图灵奖得主Edsger Dijkstra曾说:“我们所使用的工具影响着我们的思维方式和思维习惯,从而也将深刻地影响着我们的思维能力。”可见,思维是通过工具来体现和影响的。计算思维的培养不是孤立进行的,不是依靠另外开专门课程讲授的,而是在学习和应用计算机的过程中培养的[3]。学习程序设计类课程是培养“计算思维”的有效途径之一。

1 程序设计类课程与“计算思维”

长久以来,程序设计类课程教学中往往忽视对计算思维的培养,偏重对编程语言语法细节的讲授,将程序设计课简单的等同为“编程”课,导致诸如“Hello World”难度的例子贯穿授课过程的始终[4]。其仅仅为演示语言的细节而设计,制约了学生能力的进一步提高。一些教师意识到了这个问题,提出了诸如“案例教学法”之类的教学理念,将大型应用系统案例引入到程序设计类课程中,一定程度上消除了教学和企业需求之间的差距[5]。但是,在教学实践中也发现这种教学方式并不是万能的。主要体现在:

1)“案例教学法”在高级的开发平台(例如Java或.Net)教学中相对适用,但在程序设计基础课程(一般讲授C语言)中并不适用。所以,针对程序设计类课程,需要根据语言或平台,灵活的选用教学理念;2)“案例教学法”将重点放到了整个案例功能的最终实现上,导致学生往往忽视细节部分设计的高效性、科学性,不能将算法、数据结构多课程的知识有机融合进来,最终影响了整体的执行效率。

计算思维的养成,恰好能够很好地解决这个问题。由此也可见,培养计算思维也不是推倒重来,而是在珍惜多年来行之有效的经验和成果的前提下增加对计算思维的培养。主要思路如下:在程序设计基础课程教学中,将计算思维作为贯穿课程教学的理念,不孤立介绍语法细节,而是将算法贯彻始终,逐步深入;在程序设计后续课程中,将“案例教学法”与“计算思维”的理念相互渗透,互为补充。

1.1 程序设计基础教学

我们认为,程序设计基础课程的教学应该突出体现使用编程解决特定问题的方式,即程序设计方法。另外,在这门课程的教学实施中要特别注重实践,要使学生通过实践确实感受和领悟计算机问题求解的基本方法和思维模式。就课程性质而言,程序设计基础课有利于训练计算思维能力和动手解决问题的能力。当今社会的有识之士提出:既然计算机已经成为“人类通用智力工具”,那么计算思维对每个学生都有普遍意义,而不仅囿于计算机专业[6]。

《China Computing Curricula 2002中国计算机科学与技术学科教程2002》中说:“从问题的抽象描述到具体实现,以及从研究对象的表示形式到相应的处理方法,都要求本学科的工作者具有较强的计算思维能力,而计算思维能力在较大的程度上是以思维方式的数学化为支撑的。所以,学生在思维方式的数学化上受到良好的训练是非常重要的。”[7]由此可见,对学生在程序设计课上进行数学抽象化的训练是培养“计算思维”,进而掌握程序设计方法的重要环节。计算思维能力在很大程度上是以思维方式的数学化为支撑的,在程序设计基础课上通过教师讲授和学生自己上机实践,来体会一个实际问题是怎样变为计算机能够求解的问题,这个过程蕴含着计算思维要素。

就数学抽象而言,它是针对现实世界的量的关系和空间形式进行的。计算思维中的抽象与传统数学相比更为复杂和实用,抽象的好坏和是否能够实用,要看计算机能否快速地自动化地完成人们预想的计算任务。计算机解题过程是抽象和自动化过程,就步骤而言,主要是:1)对问题进行抽象得到数学模型;2)研究解决数学模型的算法;3)选择与算法相关的数据结构;4)程序编码;5)调试运行;6)结果分析。

在整个步骤过程中,构造问题很重要,它是切入点,担负着激发兴趣,引出思路的重要使命,同时,它还必须具有普遍性,具备举一反三的可能。

教学具体举措:1)在教学中尽量选用有典型数学模型背景的示例,例如汉诺塔问题、人鬼渡河问题等,不再采用单纯为了演示语法而设计的初级例子;2)以赛代练,鼓励学生参加算法类程序设计比赛,例如ACM程序大赛、百度之星、TopCoder、Google Code Jam等,以培养、锻炼学生的计算思维能力。

1.2 程序设计后续课程教学

对于程序设计的后续课程,如果还把重点仅仅放在“计算思维”的培养上,那就等于是在简单地重复程序设计基础课程的教学工作,达不到提高的效果。较为合理的做法应该是秉承行之有效的“案例教学法”理念,将程序设计基础课程中培养出来的计算思维能力,应用到案例的实现过程中,丰富案例教学法的内涵。

教学具体举措:1)以赛代练,由鼓励学生参加算法类比赛,转为参加软件应用类比赛,例如齐鲁软件大赛、全国信息技术应用水平大赛等;2)在软件整体功能实现的前提下,关注软件中算法、数据结构的高效与优化。

2 教学效果

对于专业基础课来说,在以往的教学过程中,编程语言语法的教学是非常重要,但也是非常枯燥的,很多学生正是因此有了厌烦情绪导致学习掉队。通过教学实践,我们发现,较之以往,加入蕴含数学的趣味问题之后,学生的学习积极性明显有所提高,更为重要的是通过这样的例子,不自觉地提高了学生的算法逻辑思维能力,同时使学生掌握了基本的编程语法,课程掉队的学生比例显著降低,有效地实现了既定教学目标。

对于后续课程来说,在以往的教学过程中,学生往往理解不清各门专业课程的关系,忽视,乃至曲解课程的前后衔接关系,无法建立起正确的、整体的知识框架。经过了相应的教学改革后,学生的知识体系趋于完整而清晰,并能够有意识地将算法、数据结构等融入自己的开发系统中,能较熟练地形成实际解决方案。在齐鲁软件大赛、全国信息技术应用水平大赛中我院学生取得全省一等奖和全国二等奖的好成绩。

3 讨论

我们应特别关注学生多种思维能力的培养,尤其要重视创造性思维的训练及创造性思维方法的掌握,提高学生发现问题、解决问题的能力。在培养计算思维的过程中,教师也需要警惕另外一个极端,那就是只重视思维,而忽视了编程语言,否则,计算思维就成了无源之水。培养计算思维不是目的,我们的最终目的是要提高学生的综合能力。合理的根据课程内容,在程序设计类课程的不同阶段选用不同的教学方法、理念,是提高教学质量的一条有效途径。

[1]杨玉良.深入实施通识教育 培养未来社会中坚[J].中国高等教育,2010,46(19):4-5.

[2]Wing JM.Computational thinking[J].Communications of ACM,2006,49(3):33-35.

[3]谭浩强.研究计算思维,坚持面向应用[J].计算机教育,2012,10(21):45-49.

[4]王玉锋,孔繁之.基于计算思维的计算机教学研究[J].计算机教育,2013,11(13):57-59.

[5]滕剑锋.Java课程改革的研究与实践[J].计算机教育,2012,10(23):87-89.

[6]吴文虎.我怎么讲好“程序设计基础”这门课[J].中国大学教学,2011,30(12):10-12.

[7]中国计算机科学与技术学科研究组.China Computing Curricula 2002中国计算机科学与技术学科教程2002[M].北京:清华大学出版社,2002:27.

猜你喜欢
程序设计思维能力案例
案例4 奔跑吧,少年!
培养思维能力
基于Visual Studio Code的C语言程序设计实践教学探索
培养思维能力
随机变量分布及统计案例拔高卷
从细节入手,谈PLC程序设计技巧
发生在你我身边的那些治超案例
高职高专院校C语言程序设计教学改革探索
一个模拟案例引发的多重思考
PLC梯形图程序设计技巧及应用