2018年
9月刊
0 引言
“新工科”的提出是对“互联网+”战略和“一带一路”倡议等国家政策导向的积极响应,主要解决我国产业的重大调整与科技的重大需求问题。自从2016年“新工科”概念被提出后,教育界加快了对“新工科”的认识,其中2017年2月达成了《“新工科”建设复旦共识》[1];4月教育部制定了《“新工科”建设行动路线(“天大行动”)》[2],指出了“新工科”建设的目标和内容;6月,教育部通过《“新工科”建设指南(“北京指南”)》[3],提出“新工科”建设指导意见,启动、系统部署“新工科”建设。上述3个文件构成了“新工科”建设的三部曲,奏响了人才培养主旋律,开拓了工程教育改革新路径。可以预见,技术与产业变革趋势下的工程新业态,将给我国工程科技人才培养提出新要求。“新工科”计划是基于国家战略发展新需求、国际竞争新形势、人才全面能力培养新要求提出的我国工程教育改革的新方向。
随着大数据、物联网、人工智能、云计算等前沿科技逐步取得技术性的突破,以人工智能产
面向“新工科”的线上线下交叉融合模式的“C语言程序设计”课程教学实践
张定会1,王立松1,2
(1.南京航空航天大学信息化技术中心,江苏 南京 210016; 
2.南京航空航天大学计算机科学与技术学院,江苏 南京 211106)
【摘要】随着教育部关于“新工科”概念的提出,以智能产业牵动新一轮科技革命和产业革命,使得程序设计在工程领域变得越来越重要。笔者总结多年的教学经验,提出“MOOC+微课+OJ+实体”的线上线下交叉融合教学模
式,对“C语言程序设计”课程授课方法进行改革,实践表明,此方法在提高了学生学习兴趣的同时,提升了
学生进行程序设计及解决复杂问题的能力,为计算机学科与其他学科的融合打下了坚实基础。
【关键词】新工科;C语言;MOOC;微课;在线判题系统(OJ)
【中图分类号】G642;TP301  【文献标识码】A  【文章编号】2095-5065(2018)09-0023-05
收稿日期:2018-5-20
作者简介:张定会(1973—),女,重庆璧山人,硕士,讲
师,研究方向为计算机应用技术;
王立松(1969—),男,安徽宿松人,博士,副教授,硕士
生导师,研究方向为系统软件、形式化方法、航空电子系统
及安全性。
基金项目:2018年教育部人文社会科学专项任务研究项目
(工程科技人才培养研究)“基于教师跨界发展的工科优势
高校卓越师资队伍建设研究”(项目编号:18JDGC022);
2017年国家级“新工科”研究与实践项目“面向‘新工科’
的计算机基础类慕课课程及虚拟仿真平台建设与应用”(项
目编号:暂无);2017年国家级“新工科”研究与实践项目
“面向‘新工科’的教师跨界发展与评价激励机制研究”
(项目编号:暂无);南京航空航天大学信息化技术中心教
学改革项目“面向‘新工科’的学科交叉融合的大学计算机
课程教学案例设计”(项目编号:2018JG0301Y)。
23
2018年9月刊
24
业牵引的第四次工业革命正如火如荼地进行着,“新工科”需要培养适应新技术、新产业、新经济发展的工程科技人才。相对于传统的工科人才,未来新兴产业和新经济需要的是工程实践能力强、创新能力强、具备国际竞争力的高素质复合型的“新工科”人才。但就目前情况来看,我国工程教育还面临着很多问题,比如工科教育理科化,工程人才缺乏综合实践能力,工科教育的核心能力定位不明确,所学知识
技能与社会发展和产业需求不完全契合等。人才培养瓶颈对我国未来工业的发展和综合国力的提升形成了巨大阻碍[4]。
未来社会,工业化与信息化相互渗透、深度融合。“新工科”要求以信息化带动工业化,是有别于传统工科的学科交叉产物。要求人才培养方面不仅在某一学科专业上做到学业精深,还应具有“学科交叉融合”的特征;不仅能运用所掌握的知识解决现有的问题,还要有能力学习新知识、新技术以解决未来发展中出现的问题,要求具有终身学习的能力。南京航空航天大学(以下简称“南航”)是以航空航天为特的以工科为主的大学,在航空、航天、通信、自动控制、机械制造等领域培养了大批优秀的专业人才。这些领域中复杂专业问题求解的大部分落脚点都是程序设计,且信息技术和智能技术的应用已经渗透到各行各业。因此,程序设计能力在工程科学领域变得越来越重要,对学生来说,程序设计课程作为通往计算世界的大门起着极其重要的作用,对未来技术和产业起到引领作用。而C 语言一方面由于其灵活、可移植性好等特点在工程领域中被广泛应用;另一方面,程序设计方法从结构化方法走向面向对象方法,C 语言能够很好地支持结构化程序设计,学好C 语言不仅能满足现阶段学习任务的要求,也能为未来学习其他面向对象语言(如C++、Java )打下坚实的基础。
目前,南航的“C 语言”教学已从48学时缩减为32学时,在此背景下,想保质保量地完成教学大纲内容并让学生真正掌握程序设计知识,对学生和教师都提出了新的要求。对学生来说,增加了学习的挑战性;对教师来说,传统的以教师为主的课堂授课模式已经不能达到教学目标,必须改变教学方法,应用在线
开放课程,实现信息技术与教学的深度融合。因此笔者提出了“MOOC+微课+OJ+实体”的线上线下交叉融合教学模式,充分发挥学生的主动性和能动性,力争达到最佳的教学效果。
1 交叉融合模式教学
1.1 C语言学习过程中存在的问题
南航在大一下学期开设非计算机专业的“C 语言程序设计”课程,面向全校非计算机工科专业,并设置为必修课,先修课程为“计算思维导论”。通过对“计算思维导论”课程的学习,学生可初步掌握计算机解决问题的一般策略和方法,但是大部分学生从未接触过程序设计,编写程序对他们而言是陌生的、神秘的。兴趣是最好的老师,因此引导、培养学生对这门课程的兴趣尤为重要。第一次课通过引入学生熟悉的例子讲述程序的重要性及计算机语言在各学科中的作用,让学生树立目标、有学习的欲望、对编程充满好奇。
由于C 语言涉及概念复杂、规则繁多、使用灵活但容易出错等特点,长期以来C 语言被认为是较难学习的专业开发语言。如果采用传统的课堂讲授教学法,教学内容仍然是理论与实践相脱节,课堂教学显得空洞、呆板,学生缺乏学习兴趣,束缚了学生的思维发展且不能考核出学生的实际操作水平、综合分析能力及创新能力。“C 语言程序设计”课程实际教学中普遍存在的问题是,教师在教学过程中会花费大量的课堂时间和精力讲述枯燥的语法规则,但这些语法规则学生基本都能通过自学完成,因此教师花了大
量的时间,而学生却不能真正掌握和理解如何运用其语法规则,大部分学生学完此课程后只能编写简单的数学类算法问题程序,并不能解决功能较复杂的问题,也不具备利用计算机真正解决实际问题的能力。笔者总结多年的教学经验和感受发现,“C 语言程序设计”课程的教学模式需要改革,传统的课堂教学并不能满足现阶段各学科、各专业对“程序设计”课程的要求,学生需要通过大
2018年
9月刊
量的编程实践,提高程序设计和解决实际问题的能力。通过众多的编程实践,真正体会计算机工作原理,了解计算机如何解决问题,夯实程序设计的基础。
综合考虑各种因素,笔者结合多年的教学实践经验及对教学方法的不断探索,提出的“MOOC+微课+OJ+实体”教学法能弥补传统教学法在讲授“C语言程序设计”课程时的不足,也是提高学生学习兴趣、锻炼学生编程能力的有效手段之一。
1.2 MOOC+微课
近几年随着互联网的普及,MOOC等在线教育模式兴起,课堂已经不再是知识的唯一传授场所,学生可以随时随地通过网络获取各种所需的知识。作为一种大规模开放型在线课程,MOOC 具有开放获取、教学资源丰富、师生互动、学习时间自由等诸多优势,通过甄选优质的MOOC资源推荐给学生进行课前自学,帮助学生掌握C语言的基础语法知识。但是MOOC也存在课程完成率低、个别化辅导缺失、检验形式机械且单一等缺陷。因此需要在实体课堂中了解学生掌握C 语言基本知识点的实际情况,同时对课程中的重点、难点录制10分钟左右的微视频,作为MOOC 学习的有力补充。在实际教学过程中,课程组首先通过甄选,推荐给学生“中国大学MOOC国家精品课程在线平台”(www.icourse163. org/)网站上的“浙江大学的程序设计入门——C 语言(精品课程)”,让学生课前预习;其次,课程组针对课程中的难点、重点分别录制微视频,内容包括数据类型、流程控制(选择结构、循环结构)、函数(定义、调用、递归函数、作用域和存储类别)、数组(一维数组、二维数组和字符数组)、指针(指针基本概念、指针作函数参数、指向一维数组指针及字符指针)、文件的使用等知识点,然后放在校内网站上,供学生对各知识点进行进一步学习。
通过以上补充,教师有更多时间通过分析、抽取相关的典型案例,运用计算思维中问题求解的框架,构建数学模型、设计算法策略和数据结构,然后通过C语言实现算法,并对算法进行分析。学生通过不断的编程实践,提升利用程序设
计方法解决复杂工程问题的能力。如对以下问题
的求解:假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于
开启状态;有M个人(M为不大于N的正整数)
也从1到M依次编号。第一个人(1号)将灯全部
关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相
反处理(将打开的灯关闭,将关闭的灯打开)。
依照编号递增顺序,以后的人都和3号一样,将自
己编号倍数的灯做相反处理。请问:当第M个人
操作之后,哪几盏灯是关闭的,按从小到大输出
其编号,其间用逗号间隔。
其数学模型可描述为:D={d1,d2,d3,…,d N},其
中d i为任意一盏灯,其值为1或0,1为开启状态,
0为关闭状态,问题的解是经过M个人对和自己
编号倍数的灯做相反操作后哪些灯是关闭的,顺序输出灯的编号C={c1,c2,c3…},c i∈D且c i=0;算
法策略可以采用遍历的方式,每个人对自己编号
倍数的灯做相反操作;数据结构可以采用数组,
其中数组元素a[1],a[2],…,a[N]分别表示编号为1,2,…,N的灯的状态,其初值为1。最后通过编程
实现,其主要程序代码为
for(i=1;i<=M;i++)    //i表示每个人的编号
for(j=1;j<=N;j++)  //j表示每盏灯的编号
if(j%i==0) a[j]=!a[j] //如果灯的编
号是人的编号的倍数,则灯做相反处理
最后顺序输出所有a[j]=0的所有的灯编号j。
此问题尽管简单,但是对于初学程序设计语言的
学生来说,但却能很好地培养学生运用编程来解
决实际问题的能力。
1.3 在线判题系统
在线判题系统(Online Judge,OJ)是ACM (国际计算机协会)在编程竞赛中用来测试参赛
程序的在线系统,其主要功能包括:题库管理、
用户管理、在线提交程序、在线判题、在线排名等。用户在线提交各种语言(如C、C++)的源代码,系统对源代码进行自动编译与运行,并用系
统预设的测试数据来检测源程序代码的正误,主
要为ACM/ICPC(国际大学生程序设计竞赛)的
25
2018年9月刊
26
参赛者提供练习、测试与交流的平台,也是各编程爱好者的练习平台。对于“C 语言程序设计”课程,选用OJ 系统的主要目的是服务学生的平时练习。国内外不少大学都建立了各自的OJ 平台,国际上比较著名的有西班牙的Valladolid 大学、俄罗斯的Ural 州立大学等,国内的北京大学、浙江大学等都有不错的OJ 系统。C 语言学习的主要内容包括程序基本概念、结构化程序设计、数组、函数、指针、结构体和链表。程序基本结构训练是编程的基础,针对没有任何编程基础的大一非计算机专业学生,难度需要适合初学者。因此笔者选用了“信息学奥赛一本通”OJ 判题系统(以下简称“一本通”)[5],该OJ 系统的最大特点是题目从语言入门开始训练,其试题主要内容如 表1所示。由表1所示可知,OJ 系统可以实现分级教学,对于没有基础的学生从第一部分基本训练开始,为程序设计打下坚实的基础;对于有一定基础的学生,可以从基础算法开始,提高自己进行程序设计的能力;数据结构部分作为可选题目。在数据结构部分,利用OJ 系统一方面大大减轻了教师批改作业的工作量,使教师的精力可以
表1
一本通试题分类
集中在教学方面,提高教学效能;另一方面,学生也能在第一时间得知正误,并根据系统给出的评判结果进行程序的再次修改与提交[6]。OJ 系统可以统计每个学生完成的试题数、排名,在一定程度上激发了学生的兴趣,和传统课堂相比,大大提高了学生的程序设计能力。1.4 线上线下课程组织
线上线下交叉融合教学活动如图1所示,C 语言教学活动主要分为3个阶段。
(1)课前。教师布置学生通过MOOC 预习近期所要授课的内容,学生通过教师甄选的优质MOOC 视频,在线上自主学习相关的知识要点,并完成相应的测试;教师在此过程中掌握学生学习动态,通过对线上提问进行答疑的方式了解学生的学习难点,并准备相关内容的重要程序 案例。
(2)课中。主要通过课堂面授,总结所学内容难点、重点,再分析相关的典型案例,如采用何种数据结构,何种算法,并对算法做分析等。课程重点、难点以微课的方式,供学生课后复习,在课堂上,教师鼓励学生参与课堂活动,对表现出众的学生,以提高平时成绩为激励,活跃
课堂气氛。
(3)课后。学生通过OJ 系统完成一定量的编程题目,可以根据自身情况选择题目难易,通过OJ 系统自动判题,并每周提交给教师完成的试题数目和题号,教师统计学生完成情况,据此掌握学生编程能力和水平,并作为平时成绩的依据。在此环节中,教师需要注重学生的个性化 培养。
图1 线上线下交叉融合教学活动
2018年
9月刊
1.5 课程评价和考核
南航“C语言程序设计”课程对学生的最终评价主要分为两个阶段:过程评价和期末考试。
(1)过程评价。过程评价主要包括课前的自主学习完成情况、课中参与课堂教学情况和课后在OJ系统中完成编程任务的情况;另外,课程教学任务完成后,需要为学生布置完成一个具有一定规模的管理系统程序编写作业,如图书管理系统、库存管理系统等,学生可以独立完成,也可以和几位同学分组完成。
(2)期末考试。期末考试采用在线考试系统,题型主要为选择题、填空题和编程题。其中编程题4题左右,和以往相比,增加了比重,加强了对学生编程能力的考核。
2 教学实施效果
通过线上线下教学模式的应用,教学效果得到了明显的改变,主要体现在以下3个方面。
(1)从以教师为中心变为以学生为中心。课堂上学生从被动参与变成主动参与,通过对网上大量的程序案例进行分析,真正做到了从以教师为中心向以学生为中心的转变。且在教学过程中,学生通过“MO
OC+微课”的方式,基本掌握了C语言程序设计的语法规则,因而教师有更多的时间在课堂上分析实际案例,通过对实际案例的分析与讲解,既激发了学生学习的兴趣,又提高了学生解决问题的能力。
(2)学习效果明显提升。从重语法到重编程,新的教学方法和教学环境使学生的时间和精力都用在了解决问题和编程的过程中,无须专门花时间抠语法,对程序设计过程的理解程度明显提高,做到了边学习边实践。
(3)动手能力得到全面提升。从中学到大学,学生的学习方法需要做出很大的改变,许多理论知识扎实的学生不一定能编好程序,编程过程很考验学生的动手能力。“C语言程序设计”课程安排在大一,大部分学生都感觉困难,通过对学生的调查发现,学生感觉学习编程比学习“高等数学”“大学物理”还要困难。分析原因,主要在于数学、物理等传统学科,学生已经
掌握了其学习方法,而程序设计主要用于解决科
学技术和工程问题,强调学生的动手能力,之前
这样的训练很少,容易产生畏难情绪。通过网
上在线判题系统中大量的工程实例和综合型实践
项目的强化训练,学生的编程实践能力得到了加强,有效地推动了学生的成长成才,为后续的专
业课程学习打下了坚实的基础。
3 结语
随着人工智能与“新工科”建设的兴起,计
算思维是三大支柱思维之一,培养程序设计能力
是其主要任务,同时程序设计作为计算机学科和
其他学科交叉融合的桥梁,学好程序设计可为未
来创新性工科人才培养打下坚实的基础。实践证明,利用已有的优质在线教育资源,有助于为学
线上编程课排名
生未来的自主学习指明方向;另外,通过实体课
堂的参与、OJ系统的练习,教师基本已了解每个
学生的编程水平,对于能力强的学生,可推荐到“大学生科创中心”,为学生的个性化发展提供
更广阔的空间。
【参考文献】
[1] 教育部高教司.“新工科”建设复旦共识[J].高等
工程教育研究,2017,24(1):10-11.
[2] 教育部高教司.“新工科”建设行动路线(“天大行
动”)[J].高等工程教育研究,2017,24(2):
24-25.
[3] 教育部高教司.新工科建设指南(“北京指南”)
[J].高等工程教育研究,2017,24(4):20-21.[4] 赵广辉.面向新工科的Python程序设计交叉融合案例
教学[J].计算机教育,2017(4):23-28.
[5] 成都石室中学.信息学奥赛一本通[E B/O L].
(2017-5-1)[2018-5-20].ybt.ssoier:8088/.[6] 朱月秀.基于ACM竞赛的C++程序设计课程教学
改革[J].漳州师范学院学报(自然科学版),2012
(1):96-99.
27

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。