刘杰彦,向 渝,詹思瑜
(电子科技大学 计算机科学与工程学院,成都 611731)
计算机网络编程的教学与实验探讨
刘杰彦,向 渝,詹思瑜
(电子科技大学 计算机科学与工程学院,成都 611731)
计算机网络编程是一门融合多门专业知识的计算机专业核心课程,具有实践性强的特点。为了解决计算机网络编程教学和实验中存在的普遍问题,文中对该课程的教学方式和实验建设进行了相关探讨,尝试将系统的思想贯穿教学过程,以具体的案例驱动教学,注重多门知识的融会贯通,丰富实验内容和层次。通过这些方式让学生形成较完整的知识体系并提升对问题的综合解决能力。
网络编程;系统思想;案例;实验
计算机网络编程课程是一门理论和实践紧密结合的课程,课程的实践性和应用性较强[1],涉及的专业知识广泛,学生通过学习这门课程,能够深化网络通信知识的掌握,了解一般网络应用软件的设计原理和方法,同时积累一定的实际编程经验,提高理论应用于实际的能力。而科学的教学方法和合理的实验设计是实现上述教学目标的关键,本文在分析现有教学常见问题基础上,对这门课程的教学方法和实验设计进行了一些探讨,提出了系统化的教学理念以及层次化实验设计方法。
计算机网络编程是面向计算机专业大三学生的专业课程,开设在大三学年下学期,涉及的专业知识众多,实践性强,具有一定的教学难度,而现有的教学过程中普遍存在以下常见问题。
1.1 教学过程中系统性思维把握不足
由于教学任务重、教学内容多,在课堂教学中教师主要根据教材、教案来完成相关知识点的介绍。但是讲授时往往局限于对教材指定内容的静态演绎,忽视系统思维的把握,缺乏系统的教学设计,造成学生的思维容易局限在指定的教学内容上,缺乏对问题的深入思考与探索,对各个知识点间的联系以及知识架构的全局把握较为茫然。
1.2 学生综合运用专业知识的能力有待提高
计算机网络编程以多门专业课程为基础,包括计算机网络、操作系统和程序设计等。网络编程涉及多门专业知识的综合应用,学生虽然学习了各门专业课程,但知识体系处于分散状态,不知如何综合运用多门专业知识来分析和解决实际问题,对各门专业知识的综合性、系统性应用缺乏实战经验。
1.3 实验内容较局限
目前课程的实验内容主要限定在基础的编程原理、基本的客户端算法和服务算法的设计和实现,实验层次较单一,学生依据基本实验步骤就能轻松完成实验。实验内容与实际需求存在一定差距,缺乏对系统分析问题和创新能力的锻炼。导致学生在后续毕业设计、课题参与以及工作实践中,面对实际的问题和项目难以尽快入手,不易学以致用。
针对课程教学目前存在的问题,结合多年的教学实践,我们对计算机网络编程的课堂教学方法进行了深入分析和探索,力求在教学过程中重视系统思想的贯穿,突出对问题分析和解决能力的培养。
2.1 教学设计要重视系统思想的贯穿
教材内容是以网络编程中基本的知识点、知识的进阶层次来分章节模块介绍。教材内容是静态的,而教学过程则是动态的[2-3],教师不能仅仅局限在对教材内容按部就班地讲授。具体而言,教学过程中,教师不仅要关注问题本身,还要注重问题的来龙去脉的引入,注重知识点间内在逻辑联系的分析,注重局部到整体的归纳。借助于实例分析、问题表述、问题引申以及归纳演绎等多种教学方法,培养学生以系统化的思维模式学习,实现对问题的宏观把握和微观分析,进而提高学习效率。这种教学方式对其他课程的也是适用的。
2.2 以具体案例、课题驱动教学
为了让学生形成完整的知识架构,培养他们系统性的思维能力和问题分析能力,可以采用具体案例和课题驱动教学的方法[4-5]。具体操作如下:根据教学的进度,适时引入具体案例加以分析,案例可来源于实际项目或典型应用,案例应该包括对所学的多个知识点的综合应用。通过探讨案例的解决办法,让学生分析该案例涉及的知识点,分析这些知识点之间的联系,进而综合运用这些知识点来解决问题。
例如,当讲授了客户的基本算法和并发服务器的基本算法后,可以给定一个具体的案例,如并发的面向连接的Echo服务的设计实现。这个案例包括了多个知识点的有机融合,包括套接字函数使用、客户端的算法、服务器端的算法、客户和服务器的通信流程、模块封装的思想以及服务器的选型等。在对实际的案例分析和解决的过程中,学生掌握了之前所学各个知识点间的有机联系,实现了知识从点到面的扩充。
2.3 注重与其他专业知识的融会贯通
教学中不仅要注重网络编程的知识点到知识面的扩充,还应注重与其他多门专业课程的融会贯通,进而才能实现知识面到知识体的演化。由于计算机网络编程涉及多门专业知识的综合应用,该课程开设在相关的基础课程开设之后,这些基础课程包括计算机网络、操作系统和程序设计等。为了让学生建立完整的知识体系,在教学中注重网络编程的原理与其他专业知识的融会贯通,对各门专业知识在网络程序设计中的结合应用作深入分析,让学生对问题的综合分析及应用能力得到真正提升。
例如,学生在本课程之前通过学习计算机网络已经掌握了客户/服务器的通信原理,通过学习操作系统已经了解了进程、线程的概念,了解了同步机制的基本原理,但是对实践却缺乏直观感受,对网络通信和操作系统知识的综合应用没有实际经验。因此在讲授网络中并发的服务器的设计时,不仅要对网络服务器算法流程进行深入分析,还要注意与操作系统知识的结合,结合多进程、多线程、单线程三种并发方式各自的原理和特点,具体实现技术、系统资源的占用情况、优缺点、实际应用场合以及进程/线程同步机制等多个方面进行深入的剖析,力求做到融会贯通,这样才能让学生知其然并知其所以然,进而形成完整的知识架构。
对于网络编程这门实践性和应用性非常强的课程,实验的重要性不言而喻,理论上所学的知识最终要在具体案例中得到应用才具有实际意义[6-7]。我们在设计实验时,力求学生能通过实验,掌握基本的网络应用软件开发技术,积累一定的网络程序编写经验,最终能够学以致用。为了达到这一目的,我们以课程内容为基础,从实验开设的多方位、多元化出发[8],遵循从简单到复杂,从基础到提高,面向实际应用的原则,将实验内容设计分解为三个层次,如表1所示。
3.1 专题类实验
学生通过这类实验,巩固对客户/服务器通信的原理、基本通信流程和算法的掌握。这类实验包括教材上的主要专题内容,如TCP/UDP客户端的设计、循环的TCP/UDP服务器的设计、并发的TCP/UDP服务器的设计、多种并发方式(如多进程、多线程、单线程)的具体实现等。作为基础性的实验,这些实验的主要目的是能够掌握网络编程的基本原理,懂得基本套接字函数的应用,能够编程设计完成基本的客户/服务器通信,设计简单的各种类型服务器,理解模块封装的概念和优点并懂得具体应用。由于具体服务不是这类实验的重点,因此可以选择Time、 Daytime和 Echo等简单的网络服务来完成上述各个实验。
表1 实验内容设计
鉴于实验课时有限且这类实验难度不高,可选择部分专题实验作为实验课的基本内容,而部分则由教师在理论课上根据教学进度适时穿插,进行分析和演示。
3.2 综合类实验
为了加强学生对知识的综合理解和应用能力,综合类实验应该作为实验的重点内容。综合类实验不再局限于具体的某些章节知识或简单的某种基本算法,而是对多个章节知识的综合应用,是对若干基础类实验的有机合并和深入。例如,设计一个多服务服务器。要求同一个服务器能同时提供对多种服务的响应,在同一个服务器中能同时提供Time、Echo、Daytime和Chargen等多种服务。该多服务服务器的设计综合了以下基础知识点:
(1) 对多服务服务器的理解。单服务服务器即一个服务器只能处理某一种服务的客户请求,而多服务器则要对多个单服务服务器进行有机合并。
(2) 服务器的选型。选择以哪种并发的方式来实现让同一个服务器能同时提供多个服务。
(3) 各种服务的基础协议选择。针对各种服务,逐一确定服务器是以TCP方式还是UDP方式来响应客户请求。
(4) 各种服务的处理方式。针对各种服务,逐一确定是服务器以循环还是并发的方式来响应客户。如果以并发方式响应,则还要进一步考虑同步问题。
(5) 客户端的设计。 对各服务的客户端进行设计,以便最终能对服务器提供的服务加以验证。
(6) 各个服务的设计。设计服务器对各个服务的响应过程。
(7) 模块的封装。服务器设计中如何划分模块并注意模块间的联系,以形成系统。
从这个例子可以看出,综合类实验考查了学生的系统分析能力和对基础知识的综合应用。学生要从整体上对系统功能加以分析,进一步对系统功能进行分解,分成不同的基础模块加以设计实现,最终将各个模块进行有机合并加以测试,才能成功完成这类实验。
3.3 应用类实验
与前两类实验相比,应用类实验涉及的知识面更广,来源于实际项目或具体案例[9]。与具体应用结合更为紧密,对学生的问题分析能力和知识综合运用能力要求更高,在有限的实验课时内难以完成,可作为本课程的课外实验或课程设计,学生完成后给予创新学分激励。
这类实验由教师给出一系列题目,如设计简单的邮件服务,即时聊天软件、Web 服务、FTP服务等。学生自由组成实验小组,根据熟悉课题的情况自主选择题目,通过小组内的分工协作来完成任务。应用类的实验要求学生具有系统性的问题分析和解决能力,从软件工程的角度出发,考虑系统的功能需求、总体设计、模块划分和各模块的详细设计与集成,最终还要根据功能需求完成相关测试,分析问题并改进。这类实验涉及的知识面较广,包括相关的网络协议、客户/服务器的通信方式以及客户软件/服务器软件的设计算法等。除此之外,还需考虑服务器对客户的认证、鉴别、授权、服务器资源保护等问题,且在具体应用环境中还要考虑对服务器性能进行优化。
学生通过开展此类实验能够深化对所学知识的灵活掌握,真正做到学以致用。同时了解项目运作的原理,学会分工和协作,培养团队精神。实验过程中教师要和学生多沟通,了解实验的进度,及时发现问题并给出指导。
面对社会对计算机专业人才的需求,培养具有较强的专业知识综合应用能力的学生是专业教学的最终目标。我们经过多年的探索和实践,从传统的教学方式和实验设计存在的问题出发,探讨了计算机网络编程课程的教学新思路和实验设计方法,致力于通过系统的教学方法和丰富的实验内容提升教学效果,让学生形成完整的知识体系,真正做到学以致用。
[1]Commer D E, Stevens D L.用TCP/IP进行网际互连第三卷-客户-服务器编程与应用(Linux/POSIX套接字版)[M].赵刚,译.北京:电子工业出版社,2008.
[2]马宁,白燕.系统化程序设计思想培养模式初探[J].计算机教育,2005(3):25-28.
[3]沈军.对本科“计算机网络”课程教学的一点认识和思考[J].计算机教育,2008,11(22):105-107.
[4]钱雪忠.实例化教学法在计算机类课程中的应用[J].中国电力教育,2008(9):108-110.
[5]杨潇潇,李光文.任务驱动教学法在计算机基础教学中的应用[J].中国信息技术教育,2010(12):14-15.
[6]张科,马立香,雷维礼,等.《接入网技术》实验教学研究与探索[J].实验科学与技术,2011,9(5):227-229.
[7]阮尚全,邱艳,刘凯,等.实验教学能力培养探索[J].实验科学与技术,2010,8(5):79-81.
[8]刘杰彦,易发胜.“计算机网络”课程的实验教学探索[J].计算机教育,2008,11(22):57-58.
[9]李红梅,张红延.面向能力培养的软件工程实践教学体系[J].高等工程教育研究,2009(2):84-87.
Discussion of Teaching and Experiment Methods on Network Programming
LIU Jieyan, XIANG Yu, ZHAN Siyu
(School of Computer Science and Engineering, University of Electronic Science and Technology of China, Chengdu 611731, China)
Network programming is a practical-oriented curriculum which comprises multiple specialist courses of computer discipline. To solve the common problems existing in the teaching and experiment process of this course, this paper makes a discussion on the teaching methods and the experiment construction. Firstly, the systematic teaching method should be adopted through the teaching process. Secondly, the appropriate projects or examples are useful in improving the efficiency of teaching. Thirdly, teachers should focus on how to help students to make a comprehensive understanding of multiple specialist courses. And lastly, it is important to enrich the contents and levels of the experiment. These approaches are useful in helping students to build up the global knowledge architecture to solve problems with multiple expertises.
network programming; systematic thought; project; experiment
2013-11-23
电子科技大学教改项目资助(2013XJYSL013)。
刘杰彦(1978-),女,博士,讲师,研究方向:计算机网络。
G642.4; TP399
A
10.3969/j.issn.1672-4550.2015.01.036