APP下载

网络程序设计教学改革探索

2013-09-17崔广才从立钢

重庆与世界(教师发展版) 2013年8期
关键词:C语言程序设计编程

祁 晖,崔广才,从立钢

(长春理工大学计算机科学技术学院,长春 130022)

一、网络程序设计课程教学现状

网络程序设计是计算机专业的一门重要的专业基础课,对培养学生的程序设计能力,加深理解计算机系统、网络协议等起到非常重要的作用。不论学生将来是从事软件工程、网络工程项目还是计算机网络相关的科研工作,都极有可能需要进行网络程序设计开发,由此可见这门课程的重要性。但在实际教学过程中,我们发现不少学生存在程序设计能力不强、操作系统及网络协议基础知识不扎实的问题。主要体现在以下几个方面:

1.C语言编程能力不强,尤其是对C语言的编译链接以及IO编程。因为多数学生在学习C语言的时候使用的开发环境是VC,是一种完全图形化的开发方式,整个编译链接过程都是由VC自动完成,因此无法了解编译链接的每个步骤[1-2]。结果在调试教材示例代码时就容易出错,而且不知道如何解决问题。此外,在学习C编程时,注重语法学习,算法学习,而忽视了IO编程,而IO编程却是实际开发中经常遇到的,尤其是网络编程。

2.操作系统基础薄弱。主要是因为目前本科操作系统教学以理论教学为主,实验也主要是注重一些算法的实现,对于操作系统如何实现进程、线程等概念很少提及。因此,学生在学习服务端编程时,如多进程、多线程、信号、同步、互斥等技术时,感到吃力,尤其是做实验时,更不知如何操作和调试。

3.网络协议基础薄弱。一方面,一些学生在学习网络程序设计的同时,正在学习计算机网络课程。因此,在讲述Socket编程时,他们对于建立连接、地址、端口绑定等内容理解困难。另一方面,计算机网络课程教学注重理论教学,介绍的网络技术比较全面,对网络各层协议均有涉及,而实际应用比较广泛的还是TCP/IP协议,不少学生在这方面的知识还有待进一步加强,尤其需要掌握一些网络数据分析的常用工具和方法。

4.网络程序设计教材过于注重编程知识,而少了一些基础知识铺垫、常用网络数据分析方法介绍。学生有时只是照着教材例子编程,但却不知道为什么要这么编程,当运行程序出问题时,不会利用常用的网络数据分析方法来分析并解决问题。

针对以上问题,本文对网络程序设计及相关课程的教学顺序、课程的理论教学及实验教学内容提出了教学改革设想,并在网络程序设计课程的教学过程中进行了实践,实践结果表明新方案在培养学生学习兴趣、增强基础知识方面有一定积极作用。

二、相关课程的教改方案

(一)课程的教学顺序

和网络程序设计相关的课程主要是C语言程序设计、计算机操作系统和计算机网络。这三门课程最好是在学习网络程序设计之前学完,因为这三门课程是学习网络程序设计的基础。一般来说这4门课程的学习顺序可以如图1、图2或图3所示。从图中不难看出,课程顺序的一条核心原则是C语言程序设计、计算机操作系统,最后是网络程序设计,而计算机网络则比较灵活些,可以和计算机操作系统或者网络程序设计一起学习。这三种教学顺序在教学实践中都有遇到过,但一般来说推荐前两种,因为如果在没有学习计算机网络的情况下学习网络程序设计,会使学生无法很好理解一些编程方法以及编程步骤的原理。因此,按照图3所示的教学顺序进行教学时,需要对网络程序设计的教学内容做出一定调整。即讲述Socket编程之前需要先简要介绍TCP/IP协议,尤其是IP地址以及TCP端口的含义,并可结合类似Wireshark这样的工具为学生演示TCP建立连接、收发数据以及关闭连接的过程。

图1 课程教学顺序1

图2 课程教学顺序2

图3 课程教学顺序3

(二)C语言程序设计的教改方案

C 语言程序设计课程是高校计算机教育的基础与重点,但多年来,C语言程序设计一直是在Windows操作系统下教学,开发过程也趋向于完全的图形化开发。这样可能使学生不能很好地理解C语言的整个编译链接过程,对于深入理解C语言的原理以及操作系统的原理都是不利的。对计算机专业的学生而言,C语言的基础对于后续的学习是至关重要的。因此,在C语言教学中,尤其是在计算机专业的C语言教学中,最好是脱离图形化的集成开发环境,使用文本编辑软件编写源代码,而用gcc这样的编译程序进行C语言程序的编译链接。这样能使学生体验C语言编码、编译、汇编以及链接的全过程,对深入理解C语言的原理是非常有益的。此外,在教学内容上,除了C语言语法之外,可以适当增加IO编程的比重,因为IO编程在实际应用中是很常用的,网络编程更是如此。在实验教学上,则应当增加设计类实验题目的比重,这有助于提高学生的分析、思考与解决问题的能力[3]。

(三)计算机操作系统的教改方案

从目前的教学实践来看,计算机操作系统的教学在教材内容、上机实习等方面还无法满足实际需求[2]。主要的问题在于,教学内容偏重于理论,都是介绍各种调度算法、页面置换算法等。而一个实际的操作系统在这些方面的代码并不多,相反,教学上比较忽略的IO在操作系统代码中却占有很大比重[4]。此外,操作系统实验也比较偏重算法,而没有分析或者验证一个实际的操作系统。因此,学生对于一个操作系统具体是如何实现进程、线程、虚拟内存等概念不是很清晰。

本文所提出的教改方案的核心是在操作系统教学时应基于某一具体的操作系统,借助操作系统的一些源代码来讲解操作系统的一些概念是如何实现的,这能使学生更好地理解操作系统。当然,考虑到现代操作系统的代码量一般比较庞大且复杂,不适合一行一行分析,因此可以考虑使用Linux系统的早期源代码,或者可以利用Linux的早期代码来做相关的验证实验,这是一种很好的能让学生了解操作系统运行的方式。

(四)计算机网络的教改方案

文献[5-6]对计算机网络课程的教学改革做了探讨。计算机网络课程的教学现状同样是偏重理论、算法,并且介绍的协议太多,重点不突出。实际上目前广泛应用的是基于TCP/IP的5层网络协议,而且重点应该是网络层和传输层。因此,本文建议在网络理论教学中适当增加TCP/IP协议的比重。此外,计算机网络应单独设置实验课程,且与理论教学有同等重要的地位[7-8]。纯粹的理论介绍无法很好地向学生展现网络的运作方式。在实验环节,应重点让学生掌握网络常用的数据捕获、分析等工具和方法,这样有助于学生更好地理解计算机网络的原理,并掌握检查、分析和排除网络故障的方法,为进一步学习网络程序设计以及调试网络程序打下坚实基础。

三、网络程序设计的教改方案

(一)理论教学的教改方案

网络程序设计实际上是一种应用程序设计,一般是在传输层之上进行程序开发,主要的编程接口是Socket。针对网络程序的这一特性,提出以下几点理论课教学的教改思路:

1.开发平台以Linux操作系统为主。因为Linux是一个开放平台,而且在Linux平台上有很多支持网络数据捕获和分析的优秀软件,这些都可以免费获得,并且能根据自己的实际需要进行修改。另外,学生在进行网络数据捕获和分析时一般是在本机上进行,Linux平台的软件工具非常完美,因为Linux平台有环回接口,而Windows平台无环回接口。

2.在讲解Socket接口之前必须对TCP/IP协议做简要介绍。重点是网络层和传输层,尤其是IP地址、端口等概念,以及 TCP建立、关闭连接的过程、TCP与 UDP的异同等。

3.在介绍应用层协议设计时可以选择HTTP协议作为案例。因为HTTP是目前使用非常广泛的一个应用层协议,而且协议相对简单,容易实现。在介绍协议的过程中必须结合使用网络流量捕获分析工具。

4.重点以服务器端编程为主。虽然从理论上看,客户端和服务端是平等的,但实际上服务端一般都是要服务多个客户端,因此在服务端编程时,需要考虑的问题更多。在服务端编程时需要引入进程、线程、信号等概念以及高级IO技术。因此,服务端编程相对客户端编程更复杂,对编程能力和基础知识的要求更高。服务端编程要采取循序渐进的方法,在实践中可以采用对一个案例不断改进的方式进行教学。如一个HTTP服务器,可以从一个最简单的文件读写的服务器开始,改进成一个多进程服务器,再到多线程服务器,直至多路复用的多线程服务器。

(二)实验教学的教改方案

1.适当增加实验课教学学时。因为网络程序设计毕竟是一门注重培养学生编程能力的课程,增加实验课教学学时使学生有更多动手练习的机会,同时教师也有更多时间指导学生,并能布置更多、更全面的实验题目。

2.实验平台以Linux平台为主。考虑到目前多数实验设备上安装的是Windows操作系统,因此可以利用虚拟机技术,在Windows操作系统上虚拟Linux系统。在实际教学中,我们自己制作了一个简易的Linux系统,无图形界面,但网络和编程软件齐备,可以运行于配置较低的实验设备上。我们测试过的配置为:CPU单核2.0GHz,内存256MB。学生在这样的平台上可以学习Linux操作系统的基本使用方法、C程序的编译链接、网络数据的捕获和分析等技术。

3.在每个实验题目中,最好都有相关的网络数据的捕获和分析,并要求学生将关键的网络数据记录实验报告。这有利于学生学习使用网络数据捕获和分析软件工具,掌握如何捕获以及过滤网络数据,如何利用这些软件工具辅助调试网络程序。

4.适当增加设计、创新类实验题目的比重。实验题目可以基于课堂教学的实例,在此基础上做一定的改动。这样使得实验教学不会脱离课堂教学,并给学生留有一定的思考空间。例如,一个HTTP文件服务器。在课堂教学时,可能只是演示了服务端向浏览器输出HTML文件的方法。实验教学时,可以以此为出发点,让学生用相同的方法输出其他任意类型的文件,并观察浏览器的反应。接着,指导学生访问互联网上同类型的文件,并使用Wireshark捕获、过滤HTTP数据,分析HTTP头部与访问HTML文件时的异同,最终修改HTTP文件服务器使其支持任意类型的文件。

四、结束语

将上述网络程序设计教改方案应用到实际教学中,我们发现学生的学习兴趣有了一定提高。学生普遍对于Linux操作系统以及网络数据捕获和分析有浓厚的兴趣。这从一个侧面反映出纯粹的理论教学是比较枯燥的,如果能将理论教学和实际应用相结合,则学习会更加生动,也会获得学生的欢迎[9]。计算机学科本身就是一门理论和实践相结合的学科,而程序设计则更加注重实践。如何将理论落到实处,让学生能够看得见、摸得着是本教改方案的核心思想。由于计算机学科也是一门发展非常迅速的学科,新的硬件技术、网络技术、编程技术在不断涌现,教学的内容和方法也得跟得上技术的发展,因此教学改革也是一个不断持续的过程。

[1] 宋劲彬.一站式学习C编程(升级版)[M].北京:电子工业出版,2011.

[2] 陈建勋,肖竟华.“计算机操作系统”教学改革探索与实践[J].高等理科教育,2007(3):68-70.

[3] 陈智俐,付沙,薛娟.计算机程序设计类课程实验教学改革与研究[J].计算机时代,2010(4):56 -58.

[4] 赵炯.Linux内核完全剖析:基于0.12内核[M].北京:机械工业出版社,2009.

[5] 刘彦保.计算机网络课程教学改革探讨[J].高等理科教育,2007(3):78-81.

[6] 陈静,符发,邢诒杏.计算机网络实验教学改革[J].实验科学与技术,2007,5(3):80 -82.

[7] 舒忠梅,尹冬生,李文军,等.计算机专业实验教学改革的实践与探讨[J].实验室研究与探索,2007,26(12):290-294.

[8] 沈安东,於晓明.计算机实验教学改革的探索与实践[J].实验室研究与探索,2010,29(4):83 -85.

[9] 葛桂萍,朱范德,罗家奇,等.计算机硬件系统实验教学改革的研究[J].实验室研究与探索,2007,26(8):98-99.

猜你喜欢

C语言程序设计编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
从细节入手,谈PLC程序设计技巧
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
PLC梯形图程序设计技巧及应用
论子函数在C语言数据格式输出中的应用