摘要: 随着Linux被越来越多地使用,Linux程序设计在高校Linux课程体系中也占据了重要的一席之地。本文从教学方法、实验平台、网络学习管理平台、作业检查和评测这几方面对该门课程的教学进行了探讨。
关键词:项目驱动;压力驱动;Code::Blocks; Moodie
1 引言
Linux从问世以来,因为其开放源代码的优点,得到了全世界数以万计的程序员和黑客的共同维护和完善,现在已经成为了一个稳定可靠、功能完善、性能卓越的操作系统。与Windows相比,Linux在信息安全、价格、知识产权等方面有许多优势,所以各国政府和组织越来越多地使用Linux,这也使得Linux课程在高校计算机课程中所占的比重在逐渐加大。
《Linux程序设计》是高校Linux课程群中最重要的基础课程之一,它主要教授怎样用C语言在Linux下进行编程。C语言是 Linux的主力开发语言,Linux内核及系统软件都是用 C语言编写的,并且Linux所有源代码都是开放的。因此,基于Linux系统进行C语言教学可以使学生深切体会C语言在系统软件设计方面的应用。另外,通过引导学生阅读Linux源代码,也能够让学生深刻领会C语言的精髓,提高学习C语言的兴趣,养成良好的编程风格,树立软件开发的信心和目标。
在《Linux程序设计》的教学中,笔者发现常出现以下问题:
1)教师教学容易照本宣科,缺乏针对性和新颖性;
2)实验环境差,学生在课余时间无法做练习,导致教学效果不够理想;
3)学生对资料的调研能力比较差,无法通过在因特网的搜索找到帮助课程学习的资料;
4)作业都是程序设计,但是作业的提交和管理却是全手工(纸面)或者半手工(电子邮件)的,教师负担非常重;
5)程序抄袭的现象严重,教师检查的工作量太大;
6)学生间的交流,教师和学生间的交流手段缺乏,无法进行;
7)成绩的考核无法体现合理和公平,而且教师的手工操作过多。
对于以上问题,下面将进行一些有益的探讨,希望对提高该门课程的教学质量能有所帮助。
2 教学方法
随着高校普遍的扩大招生,不可避免地使得近年来进入高校的学生素质有了一定的下降。再加上社会主义市场经济大潮下,金钱至上和急公近利的思想有所抬头,部分学生“不想读书”或者认为“读书无用”,大学的学习风气下降严重。如何调动学生的学习积极性,使学生对学习产生兴趣,愿意去主动地学习,这是高校教师所必须解决的问题。针对《Linux程序设计》这门课程,在课堂教学方面可以采用项目驱动和压力驱动方式。
学生对编程类的课程,最讨厌的就是教师按照书上的章节一点点地讲解编程的基本语言元素,这样让学生感觉很散,而且面对大量无实用价值的小示例程序的讲解学生会产生“程序疲劳”,看不到该编程语言的实用性,从而会降低学习兴趣。项目驱动即用小项目的开发来讲解课程内容,使教学跟实际应用相结合。在《Linux程序设计》的讲授中,可以预先根据所选教材的章节划分为几个大的部分,对每一部分设计一个小型的实用项目,讲课时围绕所讲部分的小项目来展开,通过对项目实现过程的讲解来讲解该部分的重点知识内容,而对该部分的一些一般性内容可以对学生指出章节,让学生自行了解。这样学生出于对实用性项目的兴趣会主动地去学习书本或者其他资料上的相关知识,而弄懂一个项目的具体实现,对学生来说也具有一定成就感,这样相互促进,学生会进入一个学习的良性循环,在兴趣中进行学习。
学生学习的动力在于学习兴趣,而学习的成果则在于学习的科学性和高要求。大部分的学生都希望老师给自己的学习任务少一点,学习能轻松一点。而在自我学习中学生也往往自觉降低对自己的学习要求,这些态度和行为都会影响学生取得良好的学习效果。要让学生把自己的学习潜力挖掘出来,学习热情调动起来,让学生远离游戏和滥情,就必须给学生加压。
压力驱动主要通过适当地增加作业量和练习难度,增加作业成绩在期末成绩的比重来给学生增加一定压力,尽量压榨学生一直被自己低估的潜力,以此提高学生适应压力和自我解决问题能力。这种教学方式,哈尔滨工大的孙志岗老师已经做了尝试,效果良好,被证明是可行的。
3 实验平台
对于编程类课程来说,良好的实验平台是保证教学效果的利器。尤其对Linux编程来说,首先必须要求有Linux环境,这对高校以Windows作为主流的大多数机房来说,是必须解决的问题。《Linux程序设计》课程最好的实验平台当然是专门的Linux或者Unix机房,这在很多重点高校已经实现了;有些高校为了节约资金,在原来的Windows机房机器上安装Windows/Linux双系统,这也是可以的。另外还可以安装一台专用的Linux服务器,给每个学生都分配一个普通账号,学生所有的实验记录、编写的代码以及各种实验情况都记录在服务器上,教师能够及时地查询、跟踪和统计学生的实验状况,检查和批改学生的实验报告和编写的代码。笔者不建议使用VMware等虚拟机软件安装Linux虚拟机,因为Linux虚拟机中的设备大多是虚拟的,在出现故障时难以分析故障导致的原因,另外在虚拟环境中编写的应用代码,特别是内核模块、设备驱动程序等涉及底层操作的程序,往往会出现一些莫名的错误。
Linux下的编程实验平台建议选用GCC + GDB + Code::Blocks。GCC是由Stallman所开发的GNU的一个项目。是一个用于编程开发的免费的自由编译器。最初,GCC只是一个C语言编译器,它是GNU C Compiler 的英文缩写。随着众多自由开发者的加入和GCC自身的发展,如今的GCC已经是一个包含众多语言的编译器了。其中包括 C,C++,Ada,Object C和Java等。所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。也就是 GNU编译器家族的意思。当然,如今的GCC借助于它的特性,具有了交叉编译器的功能,即在一个平台下编译另一个平台的代码。GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。在 UNIX平台或者Linux平台下做软件,GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。一般来说,GDB主要完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境。它由纯粹的C++语言开发完成,使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。Code::Blocks支持Windows,Linux,Mac操作系统,支持多种编译器,像 Microsoft C,GNU C,Borland C,Intel C等等,在Windows下有附带GNU C的版本。所以,用户在Windows下或者在Linux下都可以用Code::Blocks来开发Linux应用程序。