1. 引言
计算机科学与技术的飞速发展,加快了经济信息化和社会信息化的发展进程。国家信息化步伐的加快和高等教育规模的扩大,社会对计算机专业人才的需求不仅体现在数量的增加上,而且体现在质量要求的提高 [1] 。因此,加强计算机教育也越来越在世界各国备受重视,熟练掌握计算机理论与技能已成为21世纪人才素质的基本要素之一。
计算机网络程序设计对于计算机专业人员,或者是智能制造领域都是十分重要的知识。掌握网络程序设计的前提是掌握程序设计语言,熟练掌握并能够自如运用一门编程语言是非常重要的,当然也是必不可少的。随着信息技术的发展,各种编程语言不断产生,接踵而至,并且越来越趋于简单化,智能化。几十年来,作为计算机软件的基础,程序设计语言不断得到充实和完善。功能全面,使用方便的程序设计语言相继问世。但计算机网络程序设计作为一本需要兼备计算机语言的编程和计算机网络原理知识能力的课程,需要学生在学习基本理论知识的同时,学会自己去主动发现问题并通过各种途径分析和解决问题的能力,从而培养和提高学生主动探索未知问题的兴趣和自信,通过本课程的学习,培养学生从工程化的视角来思考和解决网络软件的开发问题,逐步具备工程化的创新思维方式。
然而近几年来计算机程序设计基础教育出现了很多新情况和新问题,其中最为突出的就是传统的教学方式与教学内容与现有的创新思维模式的教育目标与能力培养之间产生了背离。例如,在大学学习期间,很多学生在程序设计课程学习时表现出各种各样的不适应,一是,大多数学生对程序设计课程内容显得非常陌生,二是缺乏对程序设计在实际应用中的了解。这就使得他们虽然在学习计算机程序设计基础知识时并不困难,但却无法解决实际问题或出现面对实际应用表现出能力不足的问题 [2] ,产生了“一看就懂,一用就不会”的现象 [3] 。当学生毫无任何实际开发程序的经历时,培养学生的抽象思维能力,程序设计实践能力上学生需要掌握什么?什么知识可以在实践过程中逐步学习?如何引导学生正确学习一门课程,不仅仅局限于课本的学习,更能在实际中进行应用的能力,特别是像网络程序设计中知识要素零碎,网络协议规则又极其灵活,实用功能又如此强大的计算机专业课程,如果仅用书本上的知识对学生进行灌输,除了培养眼高手低的优秀应试学子以外并没有带来除此之外的好处。针对这些问题,本文就以网络程序设计的学习为例展开深度学习方法的研究,以提高学生用所学知识去解决实际问题的能力,并培养学生逐步具备创新思维能力。
2. 研究现状
计算机网络程序设计主要是基于TCP/IP协议栈的套接字网络编程技术,是网络编程的核心技术;在学习了计算机网络体系结构原理之后,只有掌握套接字编程,才能更深入地了解和运用计算机网络。近年来,以“教师,课堂,课本”为中心的传统教育已经不能及时的为社会提供所需要的人才 [4] 。随着互联网的普及,计算机的更新换代,多媒体教育也在不断发展。于是网络课堂应运而生,不仅扩大了招生范围,而且以低教学成本获得丰富的教学资源,自主安排上课时间,课程也可自动录制方便学生学习。随着信息技术爆发式的发展,在线教育也在不断发展,近年来,微课在网络教育中的应用,使得特定人群可以获得有针对性的传授知识与信息。微课以内容简短丰富,主题突出,碎片化的数字信息形式来展现 [5] 。对学生而言,微课能更好的满足学生对不同学科知识点的个性化学习,按需选择学习。对教师而言微课将教师的教学应用更具有针对性和实效性 [6] 。因此,在忙碌而快节奏的时代,微课凭借其课程资源共享,教学时间短,教学内容形象直观受到教师与学生的热捧,并广泛应用于教学领域。互联网的发展使得学习资源不仅丰富且易获得,也可以帮助学习者更好的掌握知识技能。但这种学习方式仍然达不到创新思维能力培养的要求,因此,本文将研究激发学习者开展深度学习的热情,从而来培养他们具备创新思维的能力。
3. 学习方式和主要存在的问题
目前,本科教育对本科生科研素养的要求较低。导致大部分学生所学到的知识似乎仅仅局限于书本的理论,更关乎考试所涉及到的内容,所收获的结果也只是能顺利通过各科考试。而真正被人们所看重的实践操作能力几乎都被淡化了。尽管每周都会有上机实验课,但由于同学们对这门课程的重视程度不同,导致学习效果出现明显的分化,于是部分同学一拖再拖以至于最后不能获得较好的编程能力。这其中的原因可归结为以下几个方面。
1) 因不了解而兴趣索然
事实上,有很多学生都会有这样一个问题,对于计算机的使用除了日常办公软件以及在学习过程中上网查阅资料之外并没有过多的了解。而且也有一部分的学生选择计算机专业并不是自己的意愿,所以很多学生在未了解学习相关计算机专业课程的目的到底是什么的时候就已经开始了编程的学习之路。按照老师的教学内容亦步亦趋,对网络程序的原理经过了解进入编程阶段,进行输入,编译,链接,执行。但是一节课下来之后,并不知道自己到底在干什么。运行显示出来的“网络已经连接”怎么这么繁琐?这些都已经是成熟的技术了,还有必要一点点的学习吗?带着诸多疑问又继续了更为高深莫测的网络编程学习。久而久之,随着疑问的积累,对计算机由最开始的不接触而不了解逐渐转变为不理解而失去兴趣。
2) 错误的学习意愿
众所周知,作为一个人口超级大国,我国一直采用的是应试教育来选拔人才 [7] 。从幼儿园开始都被一直教导要好好学习,考一个高分永远是孩子取悦家长最为直接也是唯一方法。所以在校学习时学生也只是对考试获得高分的追求,于是这种根深蒂固的思想一直延续到了大学。在大学学习期间,家长不在督促学生的学习,学校只要学生能顺利毕业走向社会获得工作即可。教育的突然放手让学生感到无所适从,急于逃离那个人生追求只有考试和高分的世界,继而放纵自我。整日无所事事也很少去主动学习,只有在期末考的时候,为了能够顺利通过考试,才会主动拿起书本去四处询问考试大纲或考试范围,也不会静下心来好好学习一番。考试分数的追求也只奢求及格过线就好。然而,对于像网络程序设计这样的程序编写类课程,由于上机实验课程时代码抄袭的方便性,使得大多数的上机实验只是流于形式,时间长了学生更是放松对自己的要求,很少有人能够静下心来编写程序。如此所做的一切似乎只为了应付考试,而不去思考学习的重要性。
3) 缺乏合适的学习方式
高效地学习没有固有的学习模式,传统的大众学习方式只能让学生对知识了解运用,而不能使用这些知识去发展自身。由于年龄,年级,智力等各方面的不一致,他人的方法可能在一定人群中发挥作用,但不一定适合每个人,甚至会适得其反。大学时代的学习方式很明显不适用于高中生,小明的学习方式也不一定适用于小强。除此之外,对于不同的课程,其学习方法也不尽相同。每个学科都有其特定的研究对象,学生在对这些研究对象进行学习时,会形成各自的思维方式 [8] 。例如,学习数学知识时,可能需要一页纸的演算就能够达到所期望的结果。但是对于一门视动手能力的强弱为最终走入社会是否具有价值指标程序编程课程时,仅仅局限于书本的学习则永远得不到能力的发展。没有编程能力,则永远徘徊在计算机专业学习的大门之外。所以,对于计算机网络程序设计课程的学习,要抛开传统的学习方式,不能只是满足于书本知识的掌握,而忽视实验课时手动敲写代码的能力。要将理论与实践结合起来寻找一种适合自己的学习方法。
4) 忽略及时复习的重要性
学习任何一门知识都是永无止境的,特别是对于大学时代的学习,不再像高中时代那样,答案或解决问题的方法都是相对固定的。在大学课程学习中,每学期都会有新的大量的,全新的知识需要学习,很多学生能够做到在学习的时候认真,一旦在新的学期学习新的知识时,便无暇再顾及上学期知识,随着时间的久远,学过的知识因为没有及时复习和巩固而逐渐淡忘。一旦再次用到,仿佛需要再次学习。而导致出现学了芝麻丢了西瓜的现象。这就要求将后期知识的学习与之前的相结合,保证知识的贯通性与实用性。例如,计算机网络程序设计作为一门计算机专业和网络工程的专业课程,它需要前期的课程为铺垫,由于其中所用的很多基础编程知识,如C或C++语言课程开设的比较早,有些同学甚至只学了C语言而没有选修过C++语言,这使得他们需要耗费大量的时间学习基础的编程语言甚至于重新学习C语言,这样可能会浪费大量的学习精力而导致新的课程学习效果不好。
4. 深度学习专业知识的激发策略
近三十年来,信息技术革命导致了教育事业改革的世界潮流,靠单纯地传授知识,培养知识型人才的传统教育,已经不能适应现代化社会发展的需要 [9] 。培养大学生自学能力和独立研究能力,是当代大学生适应社会的两个重要方面。如何独立自主的顺利学习一门知识技能也是当代大学生所渴求的。
4.1. 动机
随着互联网的普及,知识更新的速度日新月异。信息化时代已然来临,而社会对于计算机人才的需求也越来越大。网络带来的便利已经涉及日常生活的方方面面,人们对于学好计算机的意愿也越来越强烈,然而很多计算机专业的学生由于缺乏对计算机学习的正确认识而导致毕业后也未能进入计算机专业工作领域的门槛。这就是当今教育强调创新思维能力培养的关键所在,创新思维是指以新颖独创的方法解决问题的思维过程,通过这种思维能突破常规思维的界限,以超常规甚至反常规的方法、视角去思考问题,提出与众不同的解决方案,从而产生新颖的、独到的、有社会意义的思维成果。
对于计算机专业的人才培养,如何顺利让学生通过学习运用计算机,掌握计算机网络程序设计的原理和方法,是现在网络发展趋势下的必然选择。如何学习计算机专业知识,本文以计算机网络程序设计的学习为例展开叙述,就大学生在专业知识学习中的现状提出原因和问题,也指明了解决这些问题的方法。深度学习的应用,无论是对于编程语言的学习还是计算机网络程序设计的学习,都是可以通过创造条件来满足其要求的。
4.2. 激发深度学习的主动性
深度学习的动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据。这就需要学习者以主动学习的态度,在可促进学习者有效学习的学习场所或活动空间中,通过积极感知学习情景、识别学习对象的特征,采用合适的学习资源与便利的互动工具,自动记录学习过程和评测学习成果。深度学习是普通数字化学习环境和主动学习的高端结合形态,是教育技术发展的必然结果。为培养深度学习的习惯,需要从以下几个方面来开展工作。
1) 逐步了解,培养兴趣
不管是学生还是社会人士,学习任何一门知识都是因为觉得自己的知识欠缺而需要继续学习。万事开头难,很多人总会因为对于所学知识的不了解而疲于应付,以致没有浓厚的兴趣作为坚持学习的后盾而半途而废。所以不论学习什么,不要急于求成,首先通过逐步深入了解,去尝试体验这门课程知识所带来的便利,继而思考它是如何为人们服务的。兴趣是最好的老师,它能使学生以最持久的精力去认真学习自己所感兴趣的东西。即使所学的知识十分辛劳甚至枯燥,也总能充满热情。有了兴趣,学生才能把学习视为一件简单的事且能够不知疲倦的去学习,没有兴趣学习总是无味且繁重的。
逐步培养想去了解学习的兴趣,有了兴趣才有学习的动力,才有了想要深入学习而不会放弃的精神,如图1所示。
有了兴趣,在学习的时候才能高度集中注意力,思维也会异常活跃,想象力也会得到极大地发挥。不仅会有最旺盛的学习热情,学习效率也会最高。即使学习过程很辛苦,学生所得到的也会是获得成就的喜悦。所以由了解继而产生兴趣是学习最为关键的一步。正如,在学习计算机网络程序设计之前,首先要了解它到底需要掌握哪些基础知识?作为一门编程应用型的课程,它与计算机到底有着怎样的联系?学习计算机网络程序设计可以做些什么?这些问题,都可以通过查阅资料或者向身边从事计算机行业的老师和企业工作人员进行了解,从而得到我们日常使用的软件,包括大部分电子设备中已有的网络通信软件的操作界面,都是在计算机网络程序设计的原理上通过编程实现的,而C++语言是可以实现网络程序设计的众多编程语言中的一种。通过代码编写我们可以设计出更多能够满足人们生活、工作和娱乐需要的便利软件。
2) 树立正确的学习观
作为一名计算机专业的学习者不仅要知道学习的重要性,更要意识到学好计算机网络程序设计的重要性。进入大学后家长的不约束不代表学生可以不学习,而恰恰是说明,学生从此可以开始自由的学习
自己所感兴趣的东西,很可能这些是大学毕业以后的未来工作方向。所以,作为一名计算机专业的学生,在学习计算机网络程序设计前,掌握一门专业的编程语言,如C++语言,是十分必要的,它通常被选作学习计算机编程的第一门课程,除了它是最重要与最广的一门语言之外,还因为它具有极大的兼容性。熟练掌握C++语言之后,对于其他编程语言的学习都会变得简单易懂。特别是,C++语言作为一种程序设计编写语言,眼高手低是绝对不能学好C++语言的。此外,在计算机网络程序设计的学习中,书本上的知识只有将其应用到实际假想的应用场景中,知识学习的价值才能体现出来。上机练习有时甚至更比理论知识的学习更为重要,仅仅依靠应对考试知识的学习只是冰山一角。所以,在学习计算机网络程序设计的过程中,要充分重视实际动手和操作能力的培养。特别是在实际编写代码的过程中,你能够学习到课本中被忽略甚至没有掌握的知识。
3) 区分课程,正确学习
不同课程的学习方法不是千篇一律的。不同知识技能的学习需要不同的学习方法,选择一个合适的学习方法不仅事半功倍更能学的深彻,如何正确的选择合适的学习方法,如图2所示。
正如在计算机网络程序设计的学习中,很多学生将其视为与其他语言类学习科目并无差异的课程来学习,只不过多了一些上机的实验课而已。理所当然的认为只要书本知识掌握透彻,程序的运行只差一个输入而不予理睬。事实上,理论和实践是对知识的两种不同的陈述框架,理论的作用就是指导实践,不能指导实践的理论只能归属于无用的空谈。而实践才是检验理论的唯一标准。因此,一味地从事理论学习,当真正面临实际操作时才发现连最简单的代码输入也是漏洞百出。自主编写代码的能力更是没有,这时才发现所谓对知识的掌握仅限于编写规则的认识,没有深入的理解而导致学到的东西并不能运用到实际中。因此,在计算机网络程序设计的学习过程中,若想要编写一个完整的并且没有错误的程序,首先要有全面的知识。这样才能保证程序在编译过程中出现错误时,明白如何去消除错误通过编译。其次要由浅入深,循序渐进。学习任何一门知识都不是一蹴而就的,特别是像计算机网络程序设计这种永远都要学习的科目更是如此,其对计算机网络原理和技术的应用更是高深莫测,要清楚的认识到最初的接触不可能直接就能设计软件。先从环境搭建开始入手,然后循序渐进理解计算机网络程序设计的基本原理。然后,再一点点的穿插很多编程案例,引导学生关注编程的小细节,慢慢完善。在掌握开发环境和

Figure 2. Selection of knowledge learning methods
图2. 知识学习方法选择
工具的基础上,再逐步学习计算机网络程序设计中的各种技巧从而更加容易掌握计算机网络程序的编程。此外,在学习过程中,结合生活中的实例能够更好地加以理解,从而加强学习效率。再者,在学习代码编写过程中尽量提供详细的步骤和丰富的代码。每个程序都采用分步骤的方法实现,同时配以详细的代码和代码注释,可以很清晰的让学生知道每个技术的实现原理和方法,从而加深理解。然后,进行对比学习,对于较难理解的内容采用“由简单实现到细节完善”的方法进行学习,对于同一个案例,采用不同的实现方法并对比方法实现的代码差别与效果,从而实现对问题的本质认识与理解。最后,结合视频教学,加快学习效率,多媒体教学视频能够提供更为直观的理解与学习。
4) 合理安排,适时复习
孔子说“温故而知新”,是每个人都懂的基本道理。或许可以找到没有时间作为借口而不去复习,让学到的知识再次失去岂不是一种遗憾,而且复习学过的知识若需要十分钟,那么你再次学习的时间则需要一个小时。所以不要透支未来的时间,重视及时复习的重要性。事实上,对于相关领域知识的学习,即使看起来多么不相关,本质上仍有着千丝万缕的联系。例如计算机网络程序设计的学习,作为计算机和网络专业学习的一门课程,不是没有原因的。虽然在众多课程的学习中,它也属于需要编程实现的一门课,但它却需要编程语言和计算机网络原理作为基础,相对来说也更为复杂,这也给前期这几个方面基础差的学生在学习新知识时带来了诸多的困难。因此,通过大一的学习,逐步对计算机和网络专业有个清醒的认识是十分必要的,可以为未来的学习有个预见性,从而减少莫名的恐惧或陌生感。例如,在后续学习Visual C++时,应该知道,它相对于C++具有更加友好的操作界面,也是开始脱离控制台编程真正面向用户习惯进行编程的开始,同时它还保留了C++的灵活性和自由性。通过及时复习,逐渐掌握网络套接字网络编程基础、MFC WinSock类的编程、WinInet编程、WinSock的多线程编程、HTTP协议高级编程,以及电子邮件协议的编程等计算机网络程序设计的精髓所在。
5. 结语
传统的学习方式以教师的教学为主,学生被动的学习。学生背负着巨大的学习压力,导致他们逐渐失去学习的乐趣。信息技术的逐步发展越来越体现出传统的学习方法与现代学习者追求知识学习的不相容性。本文中通过激发学习者进行深度学习的相关策略,避免传统的“满堂灌”的逼迫式学习方法,通过对学习者学习欲望的分析,以及学习方法的精确选择,实行具体问题具体对待的方法,让学习者从了解到产生兴趣,从而使学习者主动学习知识并掌握相关技能,最后培养他们具备创新思维的能力。
基金项目
上海市教育科学研究项目(C160076),东华大学教学改革项目。