让程序设计学习变得轻松有趣
2013-12-29梁俊敏
摘要:本文针对高中阶段目前普遍存在的“算法与程序设计”模块难教难学的现象,结合普通高中信息技术新课程标准的要求,阐述了“易学、乐学、巧学、悟学”的教学策略。同时用具体的案例说明了“算法与程序设计”模块的教学对实现信息技术课程核心价值、促进学生思维发展的作用。
关键词:信息技术;算法;程序设计;教学策略
“算法与程序设计”模块是普通高中信息技术课程的重要选修模块之一,是普通高中信息技术课程发展过程中积淀的精华。在这一模块中,对算法的体验和设计算法解决简单问题应是教学的第一重点。祝智庭教授认为,学生在学习普通高中信息技术课程的过程中,批判性思维、算法思维和创新思维是三种“实用思维”。通过“算法和程序设计”这一模块的学习,学生不仅能掌握算法与程序设计的一般知识和技能,而且还能让“算法思维”和“创新思维”得到有针对性的培养和训练,从而促使其进一步发展,让学生逐步形成“像计算机科学家一样思考问题”的能力。
可是,目前普遍的现象是算法与程序设计模块教学让很多老师感到头疼。学生通常也认为这部分内容枯燥而乏味,所以一些地方选修这一模块的人数比较少。如何化解学生对这一模块学习的畏惧心理呢?
我根据利用Pascal语言开展算法与程序设计教学的过程和经验,总结了“易学、乐学、巧学、悟学”的教学策略,这一策略的实施,取得了较为良好的效果。
● 易学:突出算法体验,降低入门难度
在进入程序设计这个单元的学习之前,绝大部分学生对程序设计和Pascal语言一无所知,甚至会觉得程序设计很枯燥很难。学生的学习产生困难的原因之一是对课程不了解,认为程序设计非常深奥,难以理解。因此,在这一模块的第一节课,我并没有直接与学生讨论程序设计的问题,而是通过一些有趣的,与信息技术和学习内容相关的故事或事例来吸引学生的注意力,然后通过一些简单的例子,让学生体验“通过设计程序解决问题”的过程。例如问题:甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?
这个问题有一定的趣味性,而且对高中学生来说不难理解,学生通常都能够通过“逆推”的方法得出结果。这个“逆推”的过程就是解决问题的“算法”,把“逆推”过程中的公式写成表达式的形式,加上程序首部的变量说明就是一个完整的程序。
在我的教学设计中,这节课的重点是让学生体验计算机解决问题的过程,了解计算机解决问题的算法,而不是让学生掌握程序设计语言的语句和语法。所以,我把事先写好的程序通过网络发送给所有学生,并且告诉学生运行程序的方法,让学生直接运行程序。当学生在计算机上看到这段程序运行结果时,欣喜之情溢于言表,学生觉得“设计程序解决问题”原来就这么简单!通过这样的课,学生认识了程序,体验了程序设计的过程,看到了程序运行的结果。这样的课堂上,学生体验到的是在进行思维训练,而不是去堆积枯燥的代码,逐渐消除了畏难情绪,对后续的学习充满了期待。
把算法的体验和设计作为课程的重点,不仅有利于降低学生的学习难度,同时也能使学生的“算法思维”得到进一步的训练和培养,让学生在解决问题的过程中能够主动、合理地设计算法,寻求解决问题的最佳途径,让学生的“深层次信息素养”得到提升,逐步形成“像计算机科学家一样思考”的能力,这也正是信息技术课程的核心价值。
● 乐学:分解复杂问题,培养学生兴趣
我们都知道,当学生对所学的内容产生兴趣时,就会从内心发出向往和强烈的求知欲望,产生积极、主动的学习动机。培养学生的兴趣,除了引用趣味性的案例,还可以在教学过程中加以引导。在教学过程中,通过巧妙地设置层层递进的问题,引导学生自主学习,让学生在不断突破“障碍”的过程中感受学习的快乐,使学生在兴趣的“驱使”下,对程序设计乐此不彼。例如,在“循环结构”的学习过程中,我在两课时的内容之间给学生设置“障碍”。第一课时,我提问:在屏幕上画一个由10个圈圈组成的图形。课堂伊始我便把在屏幕上画一个圆的程序交给学生,此时学生很快就能猜到Circle函数中各个参数的含义,在他们进一步了解了屏幕分辨率与像素点的分布后,基本上都能使用手工修改圆心坐标或半径的方式完成这个任务。图1为学生编程绘制的作品。
虽然学生采用的是“手动画圆”的办法,但从学生画圆的结果来看,学生不仅画出了圆,而且对于圆的大小和位置做了精心的设计,当我展示这些由“圈圈”组成的美丽图案时,学生发出了惊叹。由此可以看出,学生在程序设计的过程中不仅理解了相关的知识,还融入了自己的创意,这样的学习过程显然是饶有趣味的。
到了第二课时,我提出这样的问题:画一个由100个圆组成的图形怎么画?当学生认为过程实在是太繁琐而面露难色时,我告诉学生:“凡是重复性的工作,计算机一般都会有解决的办法,重复就是循环。”我接着展示了用循环语句画10个同心圆的程序,学生看懂程序后马上会说:“老师,别说100个圆,1000个、10000个都没有问题!”
“老师,如何同时改变圆心坐标和半径呢?”有学生提出了这个问题。结合学生学过的解析几何知识,一个通过循环变量计算圆心坐标和半径的表达式很容易就得出来了。图2为学生作品。
我在处理“循环结构”这一部分内容时,没有让学生一步到位达成最终的学习目标,因为学生的接受能力存在困难。我将学习目标分成两个,让学生在获得成功、产生学习成就感之时学习兴趣得以激发。
创新思维通常以灵活性、独创性、流畅性、细致性或发散思维为特征。在这两节课的学习过程中,学生通过解决“画圈圈”这一问题,不仅学习了Pascal语言中函数、表达式、循环结构等知识,还借助解析几何的知识,发挥了学习的主动性,得到了具有创造性的学习结果。
算法的多样性、程序设计的灵活性,为学生进行独创性的思维活动、编写个性化的程序提供了有效的平台,也为发展他们的创新思维创设了条件。事实证明,我们只要教会学生必要的程序设计知识,学生就能编写出很多个性化的程序。这个新想法、新程序不断涌现的过程,就是学生积极思考,创新求异的过程。
● 巧学:构建课程体系,化解学习困难
对于算法与程序设计这一模块,我没有照搬教材,而是利用eClass网络教学平台,根据学生的特点,对教材进行了二次处理,构建了自己的“网上教室”。在我的算法与程序设计网上教室中有学习范例、学习资源、交流空间和评价工具。学生的学习主要通过参考范例、研究资源、相互交流完成,学生利用评价工具提交作业。教师对作业进行及时的批改、展示和点评,学生也可以相互鉴赏,互相点评。
图3是“画圈圈”学习内容的一部分。在我的“网上教室”中,“程序设计”这部分的内容与现行教材完全不同。没有传统教材中,先介绍数据类型、命令和函数,再介绍语法、算法的知识呈现顺序,而是以问题为核心,以解决问题的思想方法为主线,以解决问题的过程为载体,让学生在活动的过程中学习算法与程序设计的相关知识。
例如,在“画圈圈”这一例子中,除了给出的范例之外,在“网上教室”的学习内容中还提供了相关的资源链接,学生可以通过阅读、研究这些资源来学习相关的知识(而不是通过教师的说教或讲解)。
命令、函数和语法都是“死”的,解决问题的“思想”和算法却是活的。应该让学生从阅读程序、理解算法入手,尝试修改程序,进而解决问题。这样的学习过程,没有“满堂灌”的讲解,教师只需对关键的内容稍作说明;学生也不用面对大量枯燥的文字,只要带着问题有针对性地阅读,在“网上教室”的学习过程中,我常常能够感受到学生愉悦的心情和思想的火花。
● 悟学:及时因势利导,提升情感体验
根据课程目标的要求,我们的教学不仅要让学生掌握一定的知识和技能,体验解决问题的过程和方法,培养和发展学生的思维能力,同时还要让学生获得愉快的情感体验,形成科学的态度,养成正确的价值观。
在学习程序设计课程的起步阶段,学生还是碰到不少困难。由于是初次接触Pascal语言,没有编写程序的经验,所以学生会被各种简单的错误所困扰,如保留字拼写错误、用了中文标点、漏了分号和冒号等。但是当学生一个一个改正错误,直到程序能够正常运行的时候,他们感到开心极了。
学生编写的程序,往往含有比较多的逻辑错误。对于其中比较典型的错误,教师可以挑选出来,引导学生一起纠正。但是如果对所有的错误教师都要一一纠正,不仅占用太多时间而且很不必要。教师可以要求学生将编写的程序输入到计算机,进行上机调试。对于语法上的错误,教师可以帮助解决;对于逻辑上的错误,如得到了不正确的结果,应该让学生独立分析、修正、改进程序。
对于程序设计的学习,学生的收获并不仅仅在知识和技能上。帮助学生从程序设计的学习过程中总结出学习的规律,提炼出人生的感悟,进而把这些收获迁移到其他学科的学习,甚至影响其一生。学生走出了我们的教室,即使忘记了所学的语句或程序,忘记了程序设计的方法,但能够留下比这些更为宝贵的精神财富,这也许就是新课程所追求的第三维目标吧。
恰当地处理课程的内容,采用有效的策略激发学生的兴趣,引导学生自主学习,并对学生的学习过程作出及时准确的评价,这样可以使我们的课程得到顺利的实施。