网络编程技术是网络工程专业的必修课程。该门课程主要络环境下的编程原理及方法,通过网络编程课程的学习,使网络工程专业学生掌握网络编程技术的概念、编程方法、系统组成及设计方法,并能使用相关软件工具;通过对该课程的学习,将网络与软件编程有机地结合起来,使学生通过网络软件编程加深对网络理论的理解和掌握,同时又能提高学生网络应用软件编程能力,加强学生实际工作能力。
尽管网络编程的有关课程同属网络工程、软件工程、计算机科学与技术这3个专业,但在课程内容体系结构、教学内容组织方式以及教学方法与手段上都不尽相同。笔者所指网络编程技术包括3个方面,从操作系统的角度来看,分别是应用层编程、套接字层编程和硬件接口层编程。非网络工程专业的学生只需掌握应用层编程即可。因这一层通常有着较为丰富的组件,屏蔽了大量的有关网络硬件的技术细节,软件开发较为容易。而对于网络工程专业学生而言,其培养目标是:建好网,管好网,用好网。因此,笔者将从课程群的建设、课程内容的组织、教学手段的改进这3个方面,对网络工程专业的网络编程技术课程改革进行一些探讨。
1课程群的建设
网络编程课程教学内容覆盖面广,属于难度较高的专业课程,其中所需专业基础知识涉及计算机基础理论、通信原理、网络原理等各个方面,如果没有相应的先修课程作为铺垫,很难真正掌握网络编程技术的精华。大多数院校为了降低难度,将网络编程技术课程分成两门甚至两门以上课程来讲解,其先修课程也分别由十几门课程组成,从而存在课程体系结构不明确,课程内容交叉过多、重复开设的问题。
此外,对网络编程能力的培养过程也断断续续,没有从大一贯穿至大四,缺乏连续性。例如,对编程能力的培养,在大一、大二学习期间都开有相应的编程能力培养课程,但在大三期间却中断了编程课程,而到了大四期间,每个学生都需要利用某种编程语言来完成毕业设计课题,如果能在学生4年的学习期间一直贯穿编程能力的培养,当他们面临毕业设计课题时,就能选择一种相对比较了解的编程语言去完成。
解决这个问题最好的办法就是以网络编程课程为主干课程,整合知识点,完善课程群建设。同时,将所需知识分散至每一学年的教学任务中,循序渐进地引导学生理解并掌握网络编程技术的理论与知识,培养网络环境下的编程能力。在课程群的建设过程中应把握以下3个原则:
1)课程群的建设应以学校的办学定位与培养目标为前提。
如果是研究型院校,应以软件理论研究为主要目标建设课程群;如果是应用型院校,应以软件应用开发为主要目标来建设课程群,重点各有所不同。如笔者所在学校是一所应用型本科院校,办学定位是“技术立校,应用为本”,以培养应用型人才为目标。故而,网络编程课程群的建设也应以培养网络应用编程软件的开发与应用为前提。
2)以课程结构层次化,能力培养平行化为主要目标。
为了更好地让学生掌握网络编程的关键技术、突出核心内容,按照从简至繁,从容易到复杂的原则,将网络编程课程所需知识按照如下4个层次来实施:基础编程训练、高级编程训练、网络编程训练和专业综合实验。对于大一新生,主要帮助他们理解编程理念,熟悉编程环境,培养良好的编程习惯。开设的课程主要有:高级语言程序设计、数据结构与算法、可视化编程等。对于大二学生,主要目的是提高他们系统编程的能力,熟悉系统软件开发环境,掌握系统软件开发与应用的关键技术。开设的课程有面向对象程序设计、操作系统原理、数据库原理及应用、计算机网络等。对于大三学生,进入专业课程学习的同时,进一步强化网络编程能力的培养。在所开设的网络设备与集成、网络工程设计等课程中,强化网络设备硬件接口编程能力的培养;在开设网络协议与分析课程的同时,强化网络协议的编程能力培养;在所开设的网络编程技术课程中,强化套接字编程和Web程序设计能力等。对于大四学生,在开始毕业设计之前,开设3周的专业综合实验课程,帮助他们回顾曾经学过的知识,并且学会综合利用这些知识,解决实际生活中可能遇到的问题,同时,也为完成毕业设计做好前期准备。
3)网络编程能力的培养应与掌握网络硬件的设计与配置同时进行。
这是网络工程专业学生区别于其他专业学生的根本所在。
德克萨斯州大学Yale.N.Patt教授曾说:“懂硬件特性的软件设计师所设计的程序,在运行性能上远高于那些不懂硬件特性的人所设计的程序。”这句话不无道理,在培养网络工程专业学生的网络编程能力的同时,也让学生理解“数”的系统概念,理解“工程”的系统概念。学习电路基础知识、数字逻辑、计算机组织与体系结构、嵌入式开发原理,以及网络设备与集成、网络工程设计等基本理论与知识。硬件的课程体系结构同样遵守课程结构层次化、能力培养平行化的设计原则,这样才能有效实现逐步提高学生网络编程能力的目的,设计出的程序也才会更加完善。
2课程内容的组织
网络编程课程教学内容覆盖面广,授课难度较大。网络编程课程的内容主要包括高级语言编程、面向对象编程、可视化编程、套接字编程、多线程编程、网络协议编程、网络应用编程等。除此之外,还要求学生能较好地掌握计算机网络、网络协议与分析、网络设计与组建、网络设备与配置、网络管理与维护、网络安全技术等专业知识。因此,如果没有很好地整合课程内容,在总课时的限制下,将会导致授课内容过多、顾此失彼现象的发生。另外,有些内容又重复开设课程,使得学生对所学课程渐渐失去兴趣,严重影响了教学的效果。以网络编程技术课程为例,教学内容可做如下改革。
1)理论教学内容。
首先,在络编程技术课程之前,建议先修高级语言程序设计、面向对象程序设计、数据结构与算法设计、计算机网络原理、数据库原理及应用这些课程。在有一定基础的前提下才能较好地学习该门课程。此外,在该门课程讲授的第一节课中应首先介绍课程总体框架与性质。
其次,这门课程基于套接字编程和基于应用组件的应用编程两部分而组成。基于应用组件的应用编程选择ASP.NET或者J2EE,由授课教师根据情况自由选定。这些内容在某些高校分属于两门课程,但笔者认为将这些内容整合在一门课程中,不仅可以由教师根据培养目标与授课计划进行取舍讲授,也会使得学生不仅知其然,而且知其所以然,促使他们更多地进行思考和创新。
在授课过程中,坚持理论和知识点为提高学生动手能力服务的原则。除了在第一节课,简单回顾以前学过的与本门课程有关的知识点之外,其后的每一节课,在讲解原理的同时,都将重点放在编程中可能会遇到的问题上。比如,在讲解利用套接字解决TCP的编程模式时,需要一边讲解,一边强调TCP编程模式与UDP编程模式的区别所在;在讲解利用套接字解决FTP客户机编程原理的过程中,需要提醒学生FTP服务器通过使用熟知的端口来提供服务,而客户端通过使用临时端口来发送请求。FTP协议为控制连接和数据连接提供不同的熟知端口地址。对这些网络原理细节的强调,可以有效地防止学生在编程过程中出现错误,并能较好地理解网络协议的真正含义。
2)实践教学内容。
网络编程技术课程属于实践性较强的课程,是培养学生理论联系实际的动手能力的重要环节,实践能力的高低决定了开发者的水平,因此,其实验教学成为课程重点关注的环节。在网络编程实验练习的设计过程中,应考虑不同程度的学生对实验题目难度的不同要求,采取循序渐进的方式,逐步提高学生的网络软件编程能力。
网络编程实验遵循如下3个原则:①实验不求多而全,但要使每个实验有代表性和启发性,能够启发学生解决某一类问题或能触类旁通,以促进学生思考;②每个实验要有明确的目标和宏观的功能要求,并不限定实验方案和具体的实现方法,鼓励学生发挥主观能动性,自己设计实验方案并编程加以实现;③实验难度要循序渐进,实验项目要具有可操作性。
综合实验应安排在网络编程技术课程结束后的一学期进行。安排一个稍具规模的网络编程应用开发项目,培养学生的团队协作能力和综合分析能力。这一阶段学生已经掌握了网络编程的基本技能,所以安排的项目规模不能太小。
3教学方法与手段的改进
在过去几年里,笔者研究了多种教学方法和手段。在教学方法上,对基本知识点的传授采用多媒体课件+启发式+任务驱动相结合的方式。对应用技术知识点的传授采用多媒体课件+案例教学+任务驱动相结合的方式。在教学手段上,采用现代化计算机辅助教学(网站)等手段,利用多媒体网络教室或实验室采用互动教学方式,提高学生动手实践的能力。下面给出教学过程中总结出的几点经验。
1)理解不是记忆。
在课堂教学过程中,尽量让学生理解相关概念与方法,而不是死记硬背。所以,采取“自底向上”的教学方法较好,因为在接触新概念之前,与之相关的基础知识必然都已学过,对理解新概念也就非常有帮助。采用“自顶向下”的教学方法固然能够有效提高学生的兴趣,但是,由于缺乏对底层的理解,有些学习较好的学生,通过自学相关概念能够加深对新概念的理解,而有些程度较低的学生,由于没有深究,过段时间就会忘记所学的内容。
2)自己动手,为未来作准备。
常常听到企业的人抱怨:“网络工程专业的学生动手能力越来越差了。”造成这种局面的部分原因是教师的过分“热心”,将案例设计得过于“完善”,实验准备得也过于“充分”,以至于学生不费力气就能完成题目,失去了对编程过程与艺术的体会。因此,要求学生必须在没有帮助的情况下,尽可能独立地完成编程任务。
3)发挥校企合作的优势,提高实践教学的比例。
网络编程技术是一门实践性非常强的课程,通过网络编程实践操作,使学生得到很好的综合训练,提高学生发现问题、分析问题和解决问题的能力。实验中设计性实验和创新、综合性实验在课程中所占比例较大,理论教学与实践教材的比例由原来的2:1提高到1:1,比如总课时是64,那么理论与实践教学课时各犯课时。
此外,在设计综合实验案例与实验过程中,发挥校企合作优势,采取“请进来”与“走出去”相结合的手段,请企业有经验的工程师走进课堂授课,讲解实际案例的解决方法。相应地,将校内教师送去企业挂职,以提高实践能力。
4结语