APP下载

面向工程教育的Linux系统编程教学研究

2015-02-28豪肖梦琼谭云松

关键词:编程工程能力

金 豪肖梦琼谭云松

(1武汉工程大学计算机科学与工程学院 武汉湖北 430205;2中国地质大学教务处 武汉湖北 430070)

面向工程教育的Linux系统编程教学研究

金 豪1肖梦琼2谭云松1

(1武汉工程大学计算机科学与工程学院 武汉湖北 430205;2中国地质大学教务处 武汉湖北 430070)

本文主要探讨在Linux系统编程课的教学过程中以CDIO教育理念为指导,通过分析传统教学方法在培养学生工程思维和能力方面的不足,探讨了以项目和任务驱动为核心的一系列教学改革措施,使学生能通过一系列项目实践和训练更好地培养自己面向工程的综合编程能力。

CDIO Linux系统 系统编程 工程教育 项目导向

一、引言

CDIO (Conceive, Design, Implement, Operate)工程教育模式是由麻省理工学院和瑞典皇家工学院等大学通过多年研究、探索与教学实践建立起的一种基于工程教育的先进教学模式[1],是一项关于工程教育改革的新型教育模式与成果。其目的是有机结合课程教学,让学生尽可能接受较实际的项目训练,并通过工程实践去促进基础知识的掌握。2010年以来我国相继颁布了《国家中长期教育改革和发展规划纲要(2010-2020年)》及“卓越工程师教育培养计划”[2],[3],拉开了新一轮的工程教育改革。

本文在笔者多年的教学实践和分析本专业《Linux系统编程》课程的教学现状的基础上,结合CDIO教学理念和工程教育标准,以培养学生的系统编程能力和工程开发思维为目标,探讨了一种可行的教改方案。

二、课程教学现状

1.对编程能力的再思考

计算机专业知识的学习可粗略分为两类问题:①一类是基于理论知识的:算法和数据结构,计算复杂性理论,机器学习和人工智能,信息安全理论等;②一类是基于系统构建的:操作系统,网络系统,分布式系统,云存储和云计算,大数据分析,物联网等。理论学习的侧重面在算法的效率和优化,在限定的计算能力约束下如何把一个问题处理得更有效率。系统构建侧重于知识和经验的广度,及如何众多可用的技术中挑选出最多快好省的组合来为某个现实需求提供较完美的解决方案。

如果以一个相对较高的标准来考量IT软件人才的话,以上两方面的能力同等重要。以往计算机学科几十年的发展主要侧重理论知识的掌握和深化,在系统方面比较弱化。这带来的一个严重问题就是计算机专业的毕业生在实际工程能力方面不足以达到各IT公司的要求,往往要经过短期甚至长期的企业培训才能从事实际的项目开发。

笔者认为,从系统开发的角度来看编程能力,其核心主要包含两个层面:

1.1 从问题分析到代码实现和系统构建的能力。它反映了一个人从无到有来解决一个问题的能力,包括自顶向下细化和分析问题的能力,编码能力,良好的代码风格,错误调试的能力等。

1.2 对已有代码进行重建和优化的能力。简单说来,就是给你一份别人写的代码,这份代码从功能和结构上不一定符合你的预期目标,你对他进行修改和重建来达到你预期目标。比如说:一份开源代码从一个平台移植到另一个平台;一个开源的第三方库,在某些功能上不足以满足你的应用需求,如何完善它以满足需求?

以上两个层面,第一层面能力是高校开设的程序设计相关课程历来所着重的,而第二层面的能力是传统程序设计教学中所严重缺乏的。

2.教学现状

编程综合能力的培养需要经过大量的编程和项目开发实践,是一个需要长期投入时间和精力的过程。目前一般高校的培养计划中对于低年级本科生编程能力的培养主要是通过开设一两门相关课程,如《C语言程序设计》和《C++程序设计》。这些典型课程的开设对于引导学生进入程序设计这种领域和培养基本的编程技能是必要的,但由于课程的后续延续性教育得不到保障,学生往往在整个本科培养期间的综合编程能力得不到很好的锻炼。

综合上述情况,可以知道传统的课堂教学对于学生程序设计综合能力的培养是有所欠缺的。这其中最主要的原因是学生在“分析问题→构思→设计→编码实现”这整个环节上的训练不够,也就是编程方面的工程训练不够充分。

三、基于CDIO理念的教学改革

对于工科学生而言,实践是巩固、深化和创造性地应用专业知识的过程,也是综合能力形成的过程,而本科4年是参与工程实践、形成工程思维、获得宝贵工程经验的极重要的时机[4],[5]。

《Linux系统编程》是一门从内容上涵盖《C程序设计》、《操作系统》、《计算机网络》、《Linux系统管理》等课程的专业课。在广度上,要求学生融汇贯通先行专业课程的许多知识点,比如《操作系统》中文件系统、进程管理等方面的设计原理,《计算机网络》中TCP/IP协议和UDP协议的内容;在深度上,要求能比较深入地理解Linux操作系统本身的设计思想和实现原理。

传统的课堂教学目标主要以验证理论相关知识、掌握实训技能为主,在实际的工程和项目能力方面比较弱化。对此,我们以CDIO“做中学”和“基于项目的学习”的核心理念为指导原则,在课程的设计中强调以项目驱动教学的方式,进行了一系列教学改革。

1.课程整体教学目标与实践

由于《Linux系统编程》涵盖内容广泛,知识点较为繁杂。因此,我们同一些理论性较强的课程区分开来,不以知识讲授为主。教师的讲授内容主要以Linux操作系统中各个模块的设计理念为主,并辅助以一系列小型的软件项目作为案例进行分析讲解,在其中来讲解和梳理相关的知识点。

在课程实践方面,我们设计了一系列同教学案例配套的实验项目,这些项目以课堂教学教师分析的案例为中心,在功能上进行一定的扩展和变化,要求学生在深入理解课堂案例的基础上来实现。

通过这种在课堂教学和实践教学中以项目为导向的教学方式,使得整个教学过程中,学生通过项目开发将各项琐碎的知识点串联起来,深化对于Linux系统编程的理解和应用。而从课堂教学的项目案例分析到实践训练中的项目开发则强化了学生“分析→构思→设计→编码”这个多环节过程中的工程思维培养,也为后续的工程能力进一步加强打下了基础。

2.面向编程能力培养的多维考核方式

在成绩评定上,采用多维的考核方式:

(1)传统的笔试成绩仅占据40%。这部分主要考核学生对于Linux系统各部分设计原理的理解和掌握情况。

(2)实验方面采用项目考核的方式,占40%。主要以小组答辩的形式对整个课程期间学生完成的一系列项目进行考核。教师会综合以下几方面来进行评判给分:①设计可行性;②代码风格;③运行结果;④代码健壮性;⑤算法效率。

(3)平时成绩占20%,主要由两部分组成:①平时的作业情况;②学生对案例项目的分析讲解。教师以分组形式组织学生讨论并发言。

3.教学效果的延续性

以往的教学计划编排,课与课之间独立性较强,导致很多同学学完课程后就再不接触相关内容。这带来的问题是课堂教学效果再好,课程后续的巩固和深入仍不够,使得整体培养效果较差。

因此,将相关性较强的多门课程组成相互关联的课程群,配套以相关性较强的综合设计,以此来保证教学效果的延续性。例如,本专业学生在该课程后设置有《嵌入式Linux》课程以及“网络应用软件”综合设计。其中,《嵌入式Linux》课程侧重于Linux编程在嵌入式系统和硬件方面的开发和应用;“网络应用软件”综合设计相比课程教学,在内容的深度和广度上加以一定的扩展,要求学生在教师简单讲解所设计知识的基础上,自行查阅相关的技术资料,从零开始进行整个项目的分析、设计和实现,从而对之前课程中所学内容进行巩固和扩展,进一步培养其面向工程项目的综合编程能力。

[1]顾佩华,沈民奋,陆小华,译.重新认识工程教育—国际CDIO 培养模式与方法[M].北京:高等教育出版社,2009.

[2]刘少雪.工程教育改革的趋向探析[J].清华大学教育研究,2012(4): 73-79.

[3]李培根,许晓东,陈国松.我国本科工程教育实践教学问题与原因探析[J].高等工程教育研究,2012(3):1-6.

[4]王春凤,刘世峰.以编程能力培养为核心的教学设计与实践[J].计算机教育,2009,10:133-135.

[5]陈国松,许晓东.本科工程教育人才培养标准探析[J].高等工程教育研究, 2012(2):37-42.

猜你喜欢

编程工程能力
消防安全四个能力
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
大兴学习之风 提升履职能力
你的换位思考能力如何
子午工程
工程
工程