王洁松
(南通航运职业技术学院,江苏 南通 226010)
《程序设计基础》作为高职计算机专业的入门必修课,在我院以往的教学中,多以某种程序设计语言的知识体系为框架,讲授的重点往往放在了语言的语法规则介绍上。从短期看,这样做便于学生学,当然更便于教师教。但从长期看,我们发现,越是注重以语法来衡量学生对语言的“掌握”程度,就越是忽略程序设计真正实用的基本思维方式和方法,最后导致学生在学习了一学期之后,除了满脑子的语法知识,几乎没有任何分析解决实际问题的技能。
程序是人类为利用计算机解决具体问题,使用某种计算机语言编写的问题解决方法(算法)的操作执行文档。计算机语言千差万别,但利用计算机解决具体问题的算法思想则殊途同归。这样看来,《程序设计基础》教学的核心目标,应该是让学生学习和掌握对于实际问题,如何分析和设计解决它们的算法,即培养学生的计算思维能力。
著名的计算机科学家、图灵奖得主艾兹格·迪杰斯特拉说过:“我们所使用的工具影响着我们的思维方式和思维习惯,从而也将深刻地影响着我们的思维能力。”正如电动机的出现引发了自动化的思维,计算机的使用为人类求解问题提供了一条途径——计算思维。
目前,国际上公认的计算思维是美国卡内基·梅隆大学周以真教授在CACM 上撰文提出的。周教授把计算机从工具联系到思维的发展,对“计算思维”目标的定位是:如同所有人都具备“读、写、算”(简称3R)能力一样,“计算思维”如同实证思维、逻辑思维一样,应该成为每个人都具备的基本科学思维能力。
计算思维是人的,不是计算机的思维。计算思维绝非试图使人类像计算机那样的思考,而是运用计算机科学的基础概念去求解问题、设计系统和理解人类行为,采用抽象和分解来迎战庞杂的任务,通过约简、嵌入、转化和仿真等方法,把一个看似很困难的问题重新阐述成一个我们知道怎么求解的问题[1]。
职业教育作为一种教育类型,其课程必须有自己的特征。姜大源提出,职业教育课程改革成功与否取决于两个决定性因素:课程内容的选择以及所选内容的序化是否符合职业教育的特色和要求[2]。
课程内容的选择涉及的是课程内容选择的标准问题。一般来说,课程内容涉及两大类知识。
(1)陈述性知识
陈述性知识涉及事实、概念以及规律、原理方面的知识。“事实与概念”解答的是“是什么”的问题,“规律与原理”回答的是“为什么”的问题。针对《程序设计基础》这门课,其陈述性知识是描述程序所用语言的语法知识和数据组织结构。
以往《程序设计基础》教学中,对于陈述性知识的讲解,往往对某种程序设计语言的语法知识采用“既抱西瓜,又捡芝麻”的策略展开,对语法知识面面俱到。其效果是学生作为程序设计的初学者,被大大小小繁琐的知识点难倒或吓倒,失去学习兴趣。针对上述问题,本课程改革中对于陈述性知识,考虑程序设计初学者的认知规律和感受,采取“只抱西瓜,不捡芝麻”的策略,选择实践应用中常用的陈述性知识,让学生从繁琐的语法知识大网中解脱出来,把学习重心放在过程性知识的自我构建上。
(2)过程性知识
过程性知识涉及经验以及策略方面的知识。“经验”指的是“怎么做”的问题,“策略”强调的则是“怎么做得更好”的问题。《程序设计基础》的过程性知识是怎样描述、分析问题,怎样解决问题,以及怎样设计出解决问题的算法。
因此,高职程序设计基础课程内容选择,应该以职业实际应用的经验和策略的习得为主,以适度够用的概念和原理的理解为辅,即以过程性知识为主、陈述性知识为辅。通过实践情境构成以过程逻辑为中心的行动体系,使学生获取自我建构的隐性知识即过程性知识,从而真正掌握计算机求解问题的基本方法和思维模式。
知识只有在序化的情况下才能被传递,而序化意味着确立知识内容的框架和顺序。职业教育课程所选取的内容,由于既涉及过程性知识,又涉及陈述性知识,因此,寻求这两类知识的有机融合,就需要一个恰当的参照系,以便能以此为基础对知识实施“序化”。
高职程序设计基础课程,以工作过程为参照系,按照行动体系对知识内容序化。在“以学生为中心”的互动式机房实践教学过程中,学生认知的心理顺序与专业所对应的典型职业工作顺序,即行动顺序,是串行的。这样,针对行动顺序的每一个工作过程环节来传授相关的课程内容,实现实践技能与理论知识的整合,将收到事半功倍的效果,其教学思路如图1 所示。
图1 基于工作过程的教学思路
课程知识以计算思维训练为核心,按照程序设计的工作过程序化知识内容,通过三种自我体验式教学帮助学生获取自我建构的过程性知识,真正掌握计算机求解问题的基本方法和思维模式,并逐步锻炼上机实践能力,积累编程、调试、测试经验,同时培养良好的编程习惯和团队合作精神。
模仿型实践教学以“案例”介绍基本语句、语法及程序基本结构,通过举一反三的上机模仿练习,让学生尽快学会并建立起程序设计的思维方式,了解编程基本思路和方法,掌握基本语句的使用及程序的执行过程,能初步解决一般性可计算问题。模仿型实践教学划分为4 个教学单元,如表1 所示。
表1 模仿型实践教学
在模仿型实践教学中,案例的选取按照由浅入深、贴近日常生活的原则,易于引起学生的兴趣和对问题的理解。以“数据类型、变量与运算”教学单元为例,模仿型实践教学所用示例如表2 所示。
表2 模仿型实践教学示例
为观察、分析模仿型实践教学效果,针对表1 中所列陈述性知识,教学实施中在两个平行班级分别采用传统教学模式和模仿型实践教学模式后,进行调查问卷,教学效果对比分析如表3 所示。
表3 教学效果对比
探索型实践教学是针对常用算法的体验学习。教师引导学生分析“案例”提出的问题,让学生逐步学习使用自然语言、流程图或伪代码,分组讨论提出解题方案。鼓励算法多样化,通过比较、优化算法方案及上机实践,总结归纳常用算法的思维过程。探索型实践教学划分为7 个教学单元,如表4 所示。
表4 探索型实践教学
为观察、分析探索型实践教学效果,针对表4 中所列陈述性知识,教学实施中在两个平行班级分别采用传统教学模式和探索型实践教学模式后,进行调查问卷,教学效果对比分析如表5 所示。
表5 教学效果对比
开拓型实践教学中,学生分组领取问题(如“学生信息管理”、“餐厅信息管理”等),小组独立分析问题,讨论设计出恰当的解决方案,分配组员任务,上机实践编程编码及调试,最后按组介绍交流各组问题的分析、解决过程,展示编程成果,互相提出改进意见。
与传统教学模式相比,开拓型实践教学在模仿型、探索型实践教学效果的基础上,学生能主动地在实践情境中,综合运用陈述性知识和过程性知识,内化计算思维,激发对程序设计的热情,实现专业有效入门。
程序设计是高强度的创造性脑力劳动,实践性极强,其考试原则应该是考核学生分析问题、解决问题的能力,即运用计算思维解决实践问题的能力,以及对设计出的算法进行上机编程实践的能力。同时,为推动学生平时学习的积极性,课程考核整体采用过程性考核,其中平时考核占60%,期末考核占40%,具体考核方式如下所述。
一是平时考核分三个阶段:在模仿型实践教学环节,学生为个体学习方式,在教学单元结束时,通过课堂上机测试进行考核,能及时掌握学生课堂实际学习效果;在探索型和开拓型实践环节,学生分组学习实践,对各组提出的解题方案,进行学生互评和教师点评,综合打分,组内成员根据参与度获得相应考核分值。
二是期末考核采用笔试结合上机解题的方式。其中笔试部分占40%,不考死记硬背的东西,而是考核学生运用计算思维分析、解决问题的能力,即使用流程图或伪代码描述分析求解问题所设计的算法;上机解题部分占60%,上机考核试题与平时训练难度相当,注重平时训练。
高职培养目标是技能型人才,对《程序设计基础》的学习,学生不是看会的,而应该是做会的。课程中需强调计算思维能力、抽象思维能力和逻辑思维能力,注重理性思维和理性实践,让学生在教学过程中训练观察能力、思维能力和实践能力,从而真正掌握计算机求解问题的基本方法和思维模式。
[1]周以真.计算思维.新观点新学说学术沙龙文集[M].教育创新与创新人才培养,2007:111-116.
[2]吴文虎,王鸿磊,张雪松.程序设计基础[M].北京:清华大学出版社,2011.