APP下载

程序设计课程中计算思维和应用能力培养问题研究

2016-11-10鉴萍陈宇峰李凤霞

计算机教育 2016年7期
关键词:非计算机专业应用能力计算思维

鉴萍 陈宇峰 李凤霞

摘要:针对非计算机专业学生对程序设计课程重视程度不够,从概念到知识再到知识运用能力的过渡脱节等问题,以c语言课程为例,结合教学实践,对计算思维和应用能力培养相关问题进行深入探讨,提出以“培养普适思维”激发学生兴趣,以“成就感”维持学生良好学习状态,从原理性内容出发把握概念讲解的深度和广度,以及能力培养一切从设计出发等教学建议和教学方法,以期对非计算机专业程序设计课程改革有所启发。

关键词:程序设计课程;非计算机专业;计算思维;应用能力

0.引言

计算机程序设计课程如何从应试教育向应用能力培养转变已是老生常谈。国家教委高教司《对加强工科非计算机专业计算机基础教学工作的几点意见》中提到,计算机技术基础这一层次教学的主要任务是“使学生掌握计算机软、硬件技术的基础知识、基本思想和基本方法;培养学生利用计算机处理问题的思维方式和利用软、硬件技术与先进工具解决本专业与相关领域中一些问题的初步能力”。多年来,经过一线教师和教学研究者大量的探索和实践,通过多层次、多方面的改革,计算机程序设计课程的教学和培养效果在逐步改观,但就学生对计算机语言的综合应用能力来说,距离最终的培养目标还有一定距离。若干年来对非计算机专业学生的问卷调查以及持续追踪访谈显示,现实中真正理解计算机算法和程序设计内涵的学生只有少数;而在真实应用场景下,能主动或潜移默化地使用计算思维并成功解决专业问题的学生更是凤毛麟角。显然,在计算思维渗透和计算机程序语言应用能力培养方面,一线教师和教学研究者还有很大的努力空间。

1.存在的问题

(1)对学生学习程序设计语言课程的思想和动机还需进一步引导。很多非计算机专业特别是非信息类专业的学生认为程序语言的学习与自身专业无关,只是为了拿到学分而学习,依靠背习题、背程序来达到通过考试的目的。针对这样的问题,一般的做法是在教学内容和教学方法上将学生的专业知识和程序设计课程教学相结合,建立面向专业的教学模式。但笔者在教学实践中发现,即使在课程设计中融入专业因素,学生因为缺乏本专业的知识基础,并不能获得真实有效的体验;同时,在学生周围又鲜有典型的、可供参考的真实案例,最终这种教学模式在落实时效果并不令人满意。

(2)由于计算机基础知识的掌握程度参差不齐,很多学生对一些重要概念的理解只停留在表面,不能体会其内涵,使用时容易出错,更谈不上灵活运用。比如,有些学生对C语言中“变量”的理解还停留在对数学中变量的认识上,还有一些学生对“数据的存储方式”和“数据的输入、输出方式”等概念模糊不清,这些都为后续正确进行程序设计埋下隐患。

(3)经过不断的改革、实践、再改革,依然难以完全抹去“注入式”教学的痕迹。由于学时的限制,教师在每一节理论教学课上要灌输大量的概念和知识,整个教学过程中学生很少有思考的时间和空间,能够理解课上给出的典型例题已属不易。不经过一定的启发和帮助,大部分学生很难将学到的知识和真实应用结合起来,往往是上课都听懂了,课后的编程题却不会做。

(4)一些专门设计的有针对性的题目没有达到预想的训练效果。借助网络教室平台,笔者所在教学团队结合教学内容,配合教学单元,精心设计了大量能体现知识点和技能点的习题供学生课下练习,希望通过这些题目能让学生真正掌握某些数据类型的使用场合,理解特定算法解决特定问题的真谛。但是,由于之前在概念理解、知识掌握、知识运用等环节所出现的问题没有解决,再加上学生课程科目多,学习负担重,实验环节逐渐演变为只要能在实验截止时间之前提交答案即可,甚至有学生不惜全部抄袭,以保证获得平时成绩。

以上问题环环相扣,最根本原因还是从概念到知识再到以程序设计为体现的知识运用能力过渡出现了脱节,学生主动或被动地陷于“一步跟不上,步步跟不上”的恶性循环。

2.学生思想引导

c语言程序设计作为计算机基础教学课程,面向的是工、理、管、经不同学科背景的大学一年级学生。非计算机专业的大一学生,对自身专业有大致的了解,但具体到将来可能遇到的问题类型和研究方法,则接触甚少。例如,化学相关专业的学生,所了解的专业内容不外乎是反应方程式和瓶瓶罐罐,但不知道很多分支问题的研究(如计算化学领域的问题)需要计算机编程作为辅助手段。从这个角度出发,很多教学研究者提出了面向专业的教学模式,在教学内容和教学方法上将学生的专业知识和程序课程教学相结合,以提升学生的学习兴趣。更具体的,还可以将特定学科的常用语言工具(如计算化学常用的Fonran语言)与c语言做类比,展示将c语言程序设计作为基础,计算机程序语言一通百通的特性。

面向专业教学是一种比较直观的提升非计算机专业学生对程序设计课程重视程度的策略,但很多时候在实际教学中并不能达到预期的效果。大一学生还没有进入专业知识的学习,对用程序语言解决本专业问题没有真实的感受;而因为多方面的原因,高年级学生里能够从基础程序设计学习中获益并获得专业能力提升的样本又很少——毕竟在很多专业领域,编程不是必需的,再加上现今计算机应用软件发展迅猛,功能日益强大,用户体验比想象的更友好,现成的软件就可以解决问题,为什么还要自己去写程序实现呢?这样,学生本身没有真实体验,又没有正面的样本做参考(有时还可能接触到负面的样本),除了应付考试以外,很难有认真学习的动力。

学习一门程序设计课程,不是学习一门语言,而是培养计算思维方式和计算机应用的能力。培养计算思维是面向非计算机专业开展计算机基础教学的主要目的,应该让学生了解,计算思维和数学思维一样,是一种思维方式和需要掌握的思维能力。计算思维所涵盖的逻辑思维、算法思维、抽象思维以及工程思维通过改变人的思考方式,赋予未来的工作和生活一个更高的起点,从而使工作和生活更高效。计算思维将成为每一个人的技能组合成分,具有普适意义,而这种计算思维能力可以在程序设计的训练过程中潜移默化培养出来。从这一角度讲,开设计算机基础课程的目的和开设数学类课程的目的是类似的。举一些贴近实际的例子,让学生们相信计算机课程和数学课程一样重要,像计算机科学家一样思考是十分必要和奇妙的事情,这是提高学生对课程重视程度的第一步。

学生的思想和态度需要引导,更要保持。程序设计对大多数学生来说是一个全新的领域,入门时遇到挫折是必然的。当学生重复遇到困难又解决不畅时,退缩和厌烦心理就占了上风,毕竟学生所修课程多,学习任务重,难有毅力和时间花费在这样一门“非传统意义上的主课”上面。未解的困难逐渐堆积,形成恶性循环,学生最后不得不通过抄袭来完成练习,草草了事。在笔者以往所收集的调查问卷中,这种情况非常普遍。曾有学生在给课程的建议中提到:“老师要引导学生在编程的过程中找到幸福感与成就感”,这可能是解决这一问题唯一有效的办法。

学生在编程中获得成就感是综合因素作用的结果,要加强整个教学过程的各个环节,提升学生的学习质量。当学生遭遇学习困难或编程受挫时,教师不仅要指出概念或语法上的错误,更应指出其在理解问题或设计程序时存在的思维误区,帮助学生实现学习和修正能力的内化,避免这道题的问题解决了,下一道又不会的情况,以免影响学生的自信心,导致其无法产生战胜困难以后的成就感。

另外,程序设计作为实践性课程,学生获得成就感的体验会比其他课程更为鲜明;但同时,挫折感和挫败感也会更加强烈。为了防止出现“破罐子破摔”的情况,可采用“基线教学”的办法:“做好教学过程的每一环节,帮助学生每阶段都达到基本教学要求。”教师要付出更多的时间和精力,关注学生的学习动态和进展情况,让学生的学习状态和思想状态保持良性循环。

在程序设计课程教学中,学生思想引导应该是一个持续的过程。计算思维和应用能力的培养为学生学习指明了方向,教师则应帮助学生将对课程的新鲜感和自身的成就感持续保持在一个较高的水平上,而这些又是以各个教学环节的改善和教学质量提升为根本前提的。教师应能将概念、知识和程序设计方法有效地传递到学生手上,学生应能依靠自身能力或教师帮助,通过练习、归纳和总结形成知识系统和能力,最终解决问题,获得成就感。

3.从概念到知识——把握概念讲解的“度”

在教与学的过程中,达到一个预先设定的教学目标,教师的付出与学生的付出是成反比的。在学生还没有形成系统的知识体系和学习能力之前,教师需要帮助学生拨开第一层迷雾,打开从概念到知识的转化通道,为思维和能力的培养奠定基础。

由于之前对计算机基础知识没有很好地把握,很多学生对计算机相关概念的理解还停留在表面,甚至还没有跳出传统的思维定式,用数学的思维方法理解程序语言的概念就是一个比较普遍的现象。为了打破这种固有的思维定式,教师在教学中可以把概念讲解地更“深”更“广”——引入更原理陛的计算机学科知识来对概念进一步阐述,由本质引出现象,渗透计算思维。举例说明:在c语言课程中,借助计算机组成原理知识,用数据在内存中的存取方式来解释变量的内涵以及其输入输出格式,进而帮助学生更好地理解赋值、自增自减等运算操作的特性——只能对变量进行赋值和自增自减操作;同样利用变量在内存中的存储等内容的阐述,将字符数组、字符串常量、字符指针之间的交互关系理清,帮助学生在编程时更准确地使用此类数据类型;通过讲述程序的编译、链接及运行原理,解释函数包括库函数在内的调用问题;通过解释学生在实际编程操作中遇到的各类运行错误(特别不能忽略一些“随机”出现的错误,例如内存访问可能随变量的随机初始值而成功或不成功),防止学生一知半解和盲目照搬;借助编译原理知识,解释数组名到底包含了哪些信息,指针为什么要设定类型——理解指针最重要的一点是理解它的“类型”,“类型”决定存取;同样利用编译原理知识,解释类型转换的原理——整数和浮点数在计算机中有不同的表示形式,而且使用不同的机器指令来完成运算。C语言程序设计课程中,还有很多内容可以与大学计算机基础相关内容关联起来,增强学生知识的系统性。

原理性的或更高级的计算机学科知识可以辅助概念的理解,但针对非计算机专业学生,知识并不是挖得越深、拓得越广越好。c语言程序设计的理论教学课时原本就比较紧张,扩展知识的讲解可能会影响正常的教学进度。另外,对计算机基础和逻辑思维能力较弱的学生,这也是一个额外的负担。例如,讲授变量存储类型、动态分配空间等内容时,一些数据结构概念例如堆和栈等,要向只有简单计算机基础的学生讲清楚不是一件容易的事情;函数嵌套调用的执行过程,也许不用涉及返回地址的堆栈过程;当学生不理解程序编译、链接和运行的本质过程时,编译器原理的内容可能不需要涉猎过多,因为在基础阶段的程序设计中,基本用不到一个程序由多个源文件组成的情况,工程、源文件、头文件、接口等概念可能使学生更加混乱。这些都需要在实际教学过程中不断尝试和积累经验。

教学实践证明,在程序设计课程中,正确地把握概念讲解的深度和广度,能够有效减轻学生概念和知识的稀疏程度,加快其知识体系的形成和自主学习能力的培养,巩固计算思维能力。

4.从知识到能力——重在“设计”

学生在学习过程中还存在这样一大类问题,“明明上课听懂了,可就是不会做编程题”;还有很多学生对编程并非没有办法,只是想出的办法和使用的“工具”(包括数据类型、语句、函数等)总是比较“低级”,不能充分利用计算机和计算机语言的优势,一些专门设计的有针对性的课后习题也就形同虚设。一方面,学生基础概念和语法规则掌握不牢固,再加上练习少、认真读程序少,自身没有经过“训练一思考一总结一再训练”的消化提炼过程;另一方面,教师在学生从知识到应用能力的转化过程中应该发挥更有效的作用,摆脱传统的“语法是对是错”的传授模式,一切从设计出发。

程序设计课程本应重视“设计”,这也不是一个创新性的提法,但笔者在教学实践中发现还有一些细节问题需要加强。

首先,教师在授课时应转变思想,让学生明白“程序设计=数据结构+算法”,程序对错是次要的,关键是有没有用对数据结构和算法。例如,授课时可以突出知识的系统性和特殊性,让学生体会到c语言的创始者当时是如何既从计算机的角度又从人的角度来设计这门语言的,学生需要发挥主观能动性,以更好地利用这门语言。针对一个目标问题(例如螺旋图形的打印),采用哪种数据结构或类型更方便快捷?很多时候不用指针也能解决某一个问题,为什么用指针会更好?什么问题用结构类型来解决会更漂亮?为什么用一个标志变量会让程序的结构性更强?解决这些问题的思想或经验不是靠单纯的例题讲解就能让学生掌握的,在整个教学过程中,需要教师从一个程序员“将计算机语言为我所用”的角度,持续地对学生进行启发和引导。

其次,要充分把握课堂例题讲解的机会,让学生体验优秀程序的设计过程;同时将计算机的工作方式和人脑的工作方式做比较,把程序语言经常使用的一些算法、技巧作为例子,指导学生掌握计算机语言解决实际问题的特点,启发他们创新更多的解题思路和算法,学会“像计算机科学家一样思考问题”。

还有一点经常被授课教师所忽略:教师应注意问题讲解时的描述角度和措辞,防止可能出现的“误导”。例如,严格来讲,并不是省略类型的函数就是“int”型函数,而是计算机会认为它是“int”型函数,那么在程序设计时,如果选择使用“int”型的函数,则可以在代码编辑时省略类型符。同样,并不是函数返回值的类型就是函数类型,或者函数返回值类型和函数类型一致,而是通常根据需求这样设计。如果通过判断下面程序的输出来阐述函数返回值隐式类型转换,教师应该强调它是为完成实数的加和并取整来设计的,否则只能作为单纯的原理阐述——毕竟如果没有特殊的需求,为什么要多此一举进行隐式转换呢?

教师在设计基础练习题时也应注意从程序设计的角度出发,防止选择填空等基础练习与编程练习发生脱节。

授课教师在任何教学环节都要铭记“设计”一词,用教师的思维方式去影响学生的思维方式,让学生从一开始就把程序设计看成一个“写作”问题,经过不断的练习达到灵活和熟练掌握,让编程解决问题成为一种习惯,最终实现从知识向应用能力的转化。

5.结语

程序设计课程中学生思维能力和应用能力培养可以归纳为图1所示的过程。教师要在概念到知识的转化、知识到能力的转化两个环节发挥关键的指导作用,持续关注学生的思想状态。学生经过反复的练习、思考和归纳,当面对一个新的应用问题时,能够选择合适的数据类型和算法进行组织,具备灵活的应用能力;并且,在出现错误时,又能指出问题所在,具有扎实的基础知识。计算思维则在这个持续、重复的过程中潜移默化地养成。

“课程改革成败的关键,最主要的是教师教育观念的改变。”㈣不断更新教学理念,提高自身素质,也是包括笔者在内的广大教育工作者首要坚守的职责。

猜你喜欢

非计算机专业应用能力计算思维
非计算机专业计算机基础教学的总结与思考
高校非计算机专业计算机网络基础教学改革探究
浅谈如何提高经济管理类本科生的应用能力
高等数学教学培养学生应用能力的探讨
基于计算思维程序设计的军事案例研究
民族高校C语言程序设计课程教学改革的研究
算法的案例教学探析
浅谈艺术专业学生计算思维能力的培养
数学课堂中实施生活化教学的研究
非计算机专业VF课程优化教学研究