大学计算机基础与程序设计“两课合一”教学探索与实践

2019-11-30 04:55:18陈宇峰李凤霞
计算机教育 2019年11期
关键词:程序设计基础计算机

陈宇峰,李凤霞

(北京理工大学 计算机学院,北京 100081)

0 引言

自计算思维概念提出以来,大学计算机基础类课程就随着大学计算机教学改革的需求而快速地变革,虽然在面向计算思维的大学计算机基础[1]和程序设计[2]思想方法教学内容中进行了大量的教学内容改革探索,但是原有计算机基础课和程序设计课相对独立教学的模式下,课程的设计将理论和实践分割开来,成为计算思维全过程培养一个巨大的障碍。ISTE国际教育技术协会提出计算思维是一个问题解决的过程[3],包括提出问题、分析数据、抽象、设计算法、优化和推广等多个方面,这个过程应该贯穿计算机学习的始终。有研究发现[4],欧美很多教学机构开始将程序设计教学向社会化转向,从中小学基础教育阶段学起,因此在很多国际上著名高校的课程中很难找到类似国内的这种大学计算机课程加程序设计的课程组合,相关内容被认为是普遍掌握的,只在算法和应用中涉及的时候才做一些简单介绍。

然而目前国内的大学计算机课程体系很难完全照搬照抄这样一种模式,主要由于我国中小学计算机教育基础薄弱,缺乏顶层设计,在基础教育阶段信息技术课程的地位远远不能与语、数、外等基础学科相比,无法形成与高等教育阶段的有效衔接[5]。这就要求对大学计算机课程体系和人才培养模式进行有针对性的研究和改进,特别是在新工科背景下,普遍进行的课程改革尝试,也倒逼着大学计算机基础与程序设计课程的改革[6]。

1 课程改革背景与思路

随着新工科背景下的教学改革逐步深化,大学计算机基础类课程也面临越来越大的挑战。从学科的设置上看,大学计算机应该是与大学物理、大学数学一样具有基础性的地位,甚至在信息化社会越来越高的要求下,计算机教育应该具有越来越重要的地位,然而现实的情况恰恰相反,大学计算机基础类课程正受到前所未有的挑战,部分学校已经取消了大学计算机基础课程,程序设计类课程也在一定程序上受到了压缩和影响,与计算机教育的重要性形成了鲜明的对比。

究其原因并不是计算机相关的知识学习和能力培养不重要,或者学生对学习这种与专业看起来关系不大的信息技术没有兴趣,这一点从学生对本类课程学习初期热情和期待的调查中可以得到印证,而是这种很高的学习预期和实际的学习收获形成的鲜明对比,对学生的学习热情形成沉重的打击,导致学生对计算机相关课程评价不高,在此情况下学校教学改革压缩相关的教学计划也就顺理成章。

1.1 计算机基础类课程面临的问题

在基于计算思维的计算机课程改革之初就不断有学者在呼吁开展大学计算机教学内容改革,面向计算思维的教学内容不断涌现,教育部也出台了《大学计算机基础课程教学基本要求》等相关文件,但是计算机教育所面临的问题却没有得到显著的改善,这其中存在着难以解决的深层次矛盾,那就是我国计算机基础教育薄弱,水平差异巨大,导致课程内容设计处于两难的选择之间。

大学计算机基础类课程主要包括大学计算机基础和程序设计两大类课程。在大学计算机学习过程中,虽然有部分基础薄弱的学生反映计算机基础知识面广,无法理解相关的概念,但是大部分学生觉得太简单,课堂中没有学到多少新的知识,也没有培养出新的能力。C语言程序设计课程则表现为内容非常难,学习效果不明显,而且与计算机综合能力的培养关系不够密切,缺乏目标导向。

1.2 计算机基础类课程的改革思路

考虑到当前大学计算机教育的现状,计算机基础类课程的改革是一个渐进的过程,很多高校进行了大量的探索。有高校将大学计算机课程取消,直接上C语言程序设计,这样带来的主要问题是C语言本来就是一门学习曲线非常陡峭的语言,在没有相关计算机基础的情况下,无论是理解还是实践上都存在着一系列的问题,使得C语言的教学效果进一步受到影响。还有一些教学计划则取消了C语言教学,仅仅让学生学习大学计算机基础并补充一些相关软件的应用,这样虽然有利于课程的顺利推广,但是对于全面提高包括程序设计能力在内的计算思维能力是一种弱化。

因此融合以上两门课程的教学内容,通过大幅简化高阶的复杂知识和编程训练,以计算思维能力及相关程序设计基本能力培养为重点的课程改革,则成为一种当前阶段计算机基础类课程教学改革的优化方案。

2 两课合一的课程重组方案

2.1 课程内容重组

两课合一的基本原则是在现有的课程体系基础上,在不增加新的课程内容基础上,通过优化整合而产生一门新的适用于当前计算机教育环境的课程计算机科学与程序设计,其来源主要包括两个方面:一方面涉及计算机基础、大学计算机等偏重于计算机基础知识教学的课程,保留计算机数字化基础和计算机三大平台的核心内容,精简关于多媒体、数据库、网络安全等与计算思维和程序设计关系不密切的内容;另一方面的内容涉及C语言程序设计课程,这部分内容则考虑C语言的学习曲线,重点强调和基本能力相关基本输入输出、三大程序结构、基本的数据结构数组和基本的程序结构函数,有关指针、结构和文件等进阶的内容则进行了删减,形成围绕计算思维的知识和能力培养的重点内容,有利于学生的快速和高效学习,还能够提高课程的适应性。具体方案见表1。

2.2 教学方案探索

课程内容的调整是课程改革的基础,教学方案也需要一个长期的探索过程。如何将原本两门关系看似不密切的课程合并到一起,成为一个复杂的优化问题。

表1 C语言和计算机基础知识重组方案

在初期阶段,仅仅考虑将两门课程在课时安排上合并在一起,实际上仅仅是做了删减,按照上课的进度分别介绍大学计算机和C语言程序设计两门课程精简后的内容,可以初步实现两课合一,但是这种方式会带来学习的困难,C语言的学习本来就需要较长的时间才能逐步培养相关的能力,而这种简单的合并导致实际动手练习C语言的时间只有半个学期左右,学生的感觉不是轻松而是更紧迫,这也是课程压缩带来的直接结果。

为了解决这一问题,根据课程教学的特点,将每节课分为两部分,前两个学时学习C语言,后面一个学时补充计算机基础知识,这样可以延伸C语言的学习时间,也有利于提高课内的学习效率,取得一定的成效,但是存在新的问题,这两门课的内容在同一时间展开,相关之间没有过渡关系,导致学生感受会比较乱,特别是对于其中具有一定关联的知识点。

为了实现更加深入的课程融合教学方案,就需要对相关的知识点进行梳理,更加科学合理地安排学习的顺序,甚至是将相关的内容以专题的形式进行集中教学,从而达到基础知识和应用能力培养密切结合的效果。

2.3 深度融合内容分析

通过长时间对两门课程相关内容的对比分析可以发现,经过精简后的计算机基础与程序设计两部分内容有非常高的相关性,而如何将这些相关的内容有机结合起来,则是教学内容设计的重点。以下例举3种典型的融合。

2.3.1 打通计算思维的过程

目前关于计算思维的讲授主要体现在计算机基础知识部分,计算思维的训练则主要在程序设计部分,这两部分课程的分开教学则将计算思维的过程人为阻断,不利于计算思维的培养。

例如,在大学计算机基础知识部分入门内容之一是介绍计算思维,核心的问题是可计算问题,而其中最具有代表性的知识点是图灵机,是理解计算思维的关键问题。图灵机同时也是计算机的原型机,从该问题的角度入手让学生理解程序设计的思想,则是一个顺理成章的过程,但是在以往的教学过程中由于两个教学阶段分离,并没有将这两部分融合介绍,甚至有些计算机基础部分关于图灵机则直接一笔带过,实际上失去了一个非常好的计算思维培训过程。

2.3.2 数字化与数据结构的关系程序设计的基础是数据的存储,也是C语言程序设计入门阶段的一个重点内容,如果仅从C语言的变量类型及其表示范围这样一些编程规范去介绍,不仅会影响学生接受和应用,更重要的是无法理解内在的原理,会严重影响到程序编写。

例如,如果我们仅仅介绍浮点数由4个字节组成,表示范围多大等概念,只是给学生一个感性的认识,学生很容易写出如下的代码:

程序中直接将浮点数用等号进行比较,忽略了计算机实际存储过程和计算过程导致的误差,而理解这个误差就需要从计算机基础理论的数制码制中寻找答案。这个寻找答案的过程就是训练学生从基本原理到实践操作的思维过程,在新的课程设计中这些内容的介绍也应该是融会贯通的。

2.3.3 计算机体系结构与程序结构

复杂的程序结构设计也同样依赖计算机体系结构的理解,很难想象如果不了解程序在内存中是如何加载的,一条指令在CPU上是如何运行的,可以很好地理解函数调用的相关概念。

例如,在函数教学中的一个重点内容是如何区分值传递和地址传递,这就需要能够理解计算机操作系统对程序加载的方式,分为程序区和数据区,数据区分为静态数据区和动态数据区,动态数据区还根据函数的调用情况,动态地分配和释放变量存储区域。了解了这些内容,才能够很好地理解每一行语句在计算机内存中的存储情况以及计算机体系的运作过程,才能够真正地用代码去指挥计算机的计算,而不是违背计算思维的培养规律,死记硬背一段程序代码。

3 线上线下与实验混合教学

两课合一的教学安排虽然从内容上进行大量的删减,但是也同时融入很多新的内容,从面向计算思维的角度对课程进行重新设计,这必然导致课时安排难以满足需要。为了解决以上问题,课程教学可以从以下两个方面进行。

3.1 两课合一的线上教学

开展基于MOOC的线上线下教学以来,MOOC已经成为计算机教学一个必不可少的内容,目前已经开设了多门大学计算机、C语言程序设计相关课程,然而缺乏一个两课合一的MOOC,以适应新课程的需要。我们在现有两门国家精品在线MOOC的基础上,按照以上的改革思路进行线上课程的融合,新开设计算机科学与程序设计MOOC课程。通过在MOOC课程中增加扩展知识、应用介绍等内容,把无法在课堂上讲的非核心知识点以MOOC的方式让学生自学完成,课堂上就可以把重点放在如何打通计算思维的全过程,以专题的方式让学生全面理解和掌握知识体系。

3.2 基于虚拟实验的实践式教学

即使将课内的时间都放在重点内容的学习上,很多内容也仍然是难以通过课堂的有限时间学会的,根据戴尔的经验之塔理论,通过实践环节能够获得更加深刻的认识。从课堂教学的效果来看,很多内容难以深刻地讲授,虚拟实验等方式则能够以学生主动学习的方式达到讲授起不到的效果,主要表现在以下几个方面。

3.2.1 抽象问题具体化

计算思维本身是一个非常抽象的概念,很多课程内容难于通过简单的方式进行教学,如上文提到的图灵机,这本身是一个很好的教学素材,但是由于难以在有限的时间内给学生讲清楚,甚至有些教师直接放弃这部分的内容。利用虚拟实验的方式,让图灵机及其原理状态机以可视化的方式呈现在学生面前,则可以使学生不需要对其设计有深入的了解,就能够非常具体地看到图灵机解决具体问题的计算过程,从而深刻地理解计算的本质。

3.2.2 复杂问题直观化

还有一些知识点,每一个细节并不难理解,但是整个过程错综复杂,在教学过程中面面俱到讲一遍本身非常枯燥,学生很难跟上上课的全部内容,最终理解整个过程。通过一条指令的执行过程这样的虚拟实验,就可以把整个过程以直观的方式展现出来,先让学生有个宏观的了解,再通过实验报告等方式,让学生把各个知识点串联起来,实现这个知识面的理解,而且整个过程甚至不需要教师的介入。

3.2.3 细节问题训练化

很多学生都反映C语言难学,通过分析发现,类似C语言这样偏重于基础的高级语言学习曲线非常陡峭,这就意味着在开始学习的很长时间里,学生都没有完整的训练,会打击学生学习的积极性。一个完整的程序需要方方面面的知识,如果没有完整的学习,会错误百出,难以达到效果。通过C语言虚拟实验的方式,一方面可以以填空或者交互操作的方式进行针对性的细节训练,将学生的注意力完全集中于需要训练的某一个知识点,同时让学生对代码有整体的概念;另一方面也可以利用流程图式的编程,将注意力聚焦于设计而不是代码实现,以更加直观地训练计算思维能力本身。

4 结语

计算机科学与程序设计课将大学计算机与C语言程序设计“两课合一”,从全过程计算思维培养的角度对相关教学内容进行融合,目前已开设相关MOOC并在教学实践中获得初步应用,取得了一定的效果,但同时还存在相关教学融合的内容还不够丰富,体验还不够流畅的问题,还有待利用线上线下混合教学、实验教学等多种模式进行补充,通过学生和相关应用教师的反馈进行不断探索完善。

猜你喜欢
程序设计基础计算机
“不等式”基础巩固
“整式”基础巩固
计算机操作系统
基于Visual Studio Code的C语言程序设计实践教学探索
计算机教育(2020年5期)2020-07-24 08:52:56
基于计算机自然语言处理的机器翻译技术应用与简介
科技传播(2019年22期)2020-01-14 03:06:34
从细节入手,谈PLC程序设计技巧
电子制作(2019年9期)2019-05-30 09:42:04
“防”“治”并举 筑牢基础
劳动保护(2018年5期)2018-06-05 02:12:02
信息系统审计中计算机审计的应用
消费导刊(2017年20期)2018-01-03 06:26:40
高职高专院校C语言程序设计教学改革探索
PLC梯形图程序设计技巧及应用