日期:2023-01-24 阅读量:0次 所属栏目:学前教育
1 问题的提出
大多数地方高校本科教育的培养目标是:培养高素质应用型人才。而应用型人才的重要特征是:学生的专业素质能够适应市场的需要。通信工程的学生要想适应市场需要,必须坚持“软硬兼通”的培养模式[1]。据统计,通信领域70%以上的增长靠软件,在一定的硬件设施基础条件上,软件业务是通信产业的主要业务增长点。因为硬件基础设施是相对稳定的,而软件业务的发展变化是非常快的,他既要满足客户的需求,还要满足现如今的发展趋势。因此通信软件的发展带动了整个通信行业的发展,进而成为推动整个IT行业向前发展的主要动力。目前,在大学教育扩招的背景下,对于纯硬件职位,用人单位在招聘本科人才时,几乎都要求有相关工作经验。也就是说,站在公司的利益上讲,没有公司肯愿意让应届毕业生来直接介入到硬件工作中去。而单纯懂软件,不懂硬件也不利于系统搭建。事实上,约有80%的行业应用软件是由非计算机专业的人编写的。而既掌握本专业知识,又掌握相当计算机应用知识,已经成为各行企业对各高校培养人才的要求。在此背景下,C语言程序设计和软件设计基础作为计算机软件的基石成为我校通信工程专业的必修课[2]。
为了更好地加强通信工程专业学生的软件编程能力,课程教研组编写《计算机软件基础实验及课程设计指导书》,充分利用动态链接库的优越性提出“跳跃性分级设计任务”,把验证型实验和设计综合型实验相结合[4],促进了学生软件学习的兴趣。尽管上述教改工作取得一定的成效,但是在毕业设计中,教研组发现学生对于软件设计类课题仍然缺乏认知度,对教师下达的任务无从下手,大部分学生都是靠“百度”和“google”完成毕业设计,这使我们反思,为什么学生还是这么惧怕软件呢?
教研组深入调研了市场上相关的计算机培训机构,发现他们在授课时具有小班上课,灵活机动,以案例教学为基础,用任务驱动教学等特点,这种授课方式对于有一定基础的学生来说,可以更好地聚焦他们的注意力,激发他们学习软件设计的兴趣。因此课程组提出《软件设计基础》课程案例式教学设计,试图引入20-30个案例,把基础理论与应用实践紧密结合,把案例和应用任务作为教学内容的主线,力争在4个学时内讲完案例(当然需要学生课下配合),最终提高学生的软件编程能力。
2 案例设计原则与实践
通信工程专业与计算机软件相关的课程主要为:计算机基础(1)→C语言程序设计(1)→Visual Basic程序设计(3)→软件设计基础(4)→Matlab及其应用(4)→单片机原理与应用(5)→DSP技术(5)→软件无线电技术(5)→嵌入式系统及应用(6)→数据通信网(6)→通信系统课程设计(7)。其中括号里的数字表示开课的学期。《软件设计基础》是计算机软件的核心课程,其主要内容包括数据结构,操作系统,数据库系统概论。开设这门课程的目的是让学生具有初步的软件编程能力,掌握数据结构的相关算法,理解操作系统的基本概念,熟悉数据库的基本操作。为了培养学生的软件素质,此课程也有相当数量的常规上机实验练习,但是这些练习缺少连贯性和系统性,一般都是以章节为主,学生所练习的题目范围比较小。更为突出的是:上机内容仅仅从计算机专业的角度加强学生的软件素质,并没有结合通信工程的专业特点,以至于在大四进行的通信系统综合课程设计中,学生对硬件有较好的掌握,但对串口编程等通信软件知识所知甚少,影响课程设计的进度。由此可见,结合通信工程专业的特点,科学有效地培养学生的软件素质,把案例教学引入到软件设计基础课程中,对于培养应用型人才起着至关重要的作用,具有现实意义[3]。
案例教学因其在美国哈佛大学商学院的成功应用而闻名于世,被教育界所广泛推崇。我国于20世纪80年代开始引入案例教学,但多年来一直主要用于法学、医学、经济学和管理学等学科领域,在工科类课程的教学中, 采用案例教学的偏少。案例教学法是运用案例进行教学的一种方法,通过对一个包含有问题在内的具体情境的描述,引导学生对这些特殊情境进行讨论的一种教学方法,是一种教师和学生直接参与共同对案例或疑难问题进行讨论的教学方法,其目的是培养学生批判性、分析性的思维能力和信心,论证和说服的技能,以及解决不同实际问题的应变能力。
软件设计基础课程的教学对多媒体的依赖性需要借助案例教学来吸引学生的注意力,并促使学生同步思维[5]。计算机软件的使用必须在计算机上进行,为加强直观性,提高教学效果,软件设计基础课程的教学就离不开多媒体设备。软件设计基础的教学,主要是要求学生掌握软件的各项功能和各种算法操作,对于一个较复杂的软件来说,其功能是很强大的,操作也非常多,且各种操作之间并无明显的联系,因此,单纯地向学生讲授零散的知识点,不利于学生的深入理解和联系记忆。可见,软件设计基础课程知识点的零散性需要利用案例来建立各知识点之间的联系,以利于学生理解和深入。
软件设计基础与其他课程的关联图如图1所示,案例式教学的例子尽可能与信息论、数据通信网、通信原理等通信老牌基础课相关。主要培养学生如下能力:问题分析能力、查阅新技术新资料的能力、工程实践能力、编写代码,撰写文档能力。具体实践如下:
(1)编写《软件设计基础》案例式教学实施方案,关键是要选择典型而准确的案例。因为案例教学法就是运用具体案例进行教学,如何选择案例,选择什么案例,对案例教学有着决定性的意义。故所选择案例应该是“准确”而又“典型”,“准确”是指案例内容与有关理论相吻合,“典型”是指该案例具有代表性,具体选择哪一个案例取决于教学的内容和目的。只有通过一个个精选的案例使学生轻松地掌握各个知识点的实际应用及其差异,才能达到预期的教学目的和教学效果。学生在学新课时,总是会问:“这门课程的知识到底有什么用?”这是学习过程中常常困扰学生的一个问题。案例教学将理论和实践引入特定的教学环境,从不同的角度审视两者的关系,在理论和实践之间架起了一座桥梁,使理论与实践有机结合在一起。案例分析促使学生对理论运用的方式、原因等作更深入的思考,在思考过程中,学生可以将有关的理论知识融会贯通, 并与实际应用联系起来,这样就使学生在学习知识的过程中记忆更加牢固。案例教学是把学生到社会去实践的过程提前到教学过程中, 让学生在学习的过程中, 就具有一定的实战经验。例如“约瑟夫环问题”是一个很好地讲述队列的案例,在讲完队列基本原理后,引导学生用队列解决“约瑟夫环问题”,具体编程时,根据学生的学习能力,可以采用分层次教学,例如对于接受能力快,编程基础好的同学可以引导他们用VC或C++Builder实现可视化编程。对于其他同学只要求编写控制台程序即可。当然为了方便学时学习,可以事先把相关接口做成DLL,这样使学生把精力都放在队列技巧的应用上。 (2)尝试探究式课程学习。所谓探究式课程学习是指在课程讲授中,以学生自主学习和合作讨论为前提,以案例指导书为基础,在教师的启发诱导下,学生自由表达观点、质疑探究问题,并通过个人、小组、集体等多种形式,结合自身的知识来解决疑点和难点。探究式课程学习特别重视培养学生的自学能力,发展创造性思维,开发学生智力,并通过自我探究,掌握科学方法和学会学习,为终身学习奠定基础。教师作为探究式课程学习的引导者,其任务是调动学生的积极性,促使他们自己去获取知识、发展能力,做到自己去发现问题、提出问题、分析问题、解决问题;与此同时,教师还要为学生的学习创设探究的情境,营造探究的氛围,促进探究的开展,把握探究的深度,评价探究的成效。学生作为探究式课程学习的主人,根据课程学习的条件,明确探究目标,思考探究问题,掌握探究方法,敞开探究思路,交流探究内容,总结探究结果。课程学习结束后,可通过让学生自发组织小组答辩,课堂现场测试评定最后的成绩[6]。
凡是教过程序设计的教师都有这样的体会:语句教到一定的程度,学生会渐渐感觉到编程过难,无法继续学下去的想法。语句相当于程序设计的工具,只有大量的掌握好语句,才能在编程上如鱼得水。导致上述反常现象发生的原因有很多,其中最重要的一点就是长期以来程序设计的观念不是以如何处理好对象为出发点,而是以如何使用好语言为基点。受这种思想的影响,传统的程序设计教学是以讲解语法规则和语句格式为目标,而不是以解决问题为重点。也就这样导致学生在拿到任务后首先想的是该有哪条语句,而不是怎样把任务进行合理的解析。因此课题组尝试使用问题驱动的教学方法,先提出问题,然后介绍解决问题的方法,最后归纳总结其一般步骤。在讲述软件基础相关课程时,把每节的内容用案例引出,然后分析解决。这样学生容易明白本节的内容,增强其学习的积极性。
(3)探索“案例式作业”综合实训。在传统的授课中,都是按部就班地进行讲授―作业――点评――讲授……,学生在做作业时,基本上失去了兴趣,很多教师都反应目前学生作业的雷同度太高,实际上就是几个“作业范本”在学生中传来传去……。实际中可以采用“案例式作业”,所谓“案例式作业”指的是教师直接把一个综合案例项目作为作业,一门课程若交5次案例作业,每次教师准备4个案例,例如2009级第1次作业使用案例1-1,2010级第1次作业使用案例1-2,就可在某种程度上防止师兄学弟间的“作业交流”。实训时,教师将之前已经完成的实训项目运行给学生看,让学生对实训作业项目的结果有个感性认识,同时,在作业指导书中,对项目的功能、性能提出进一步的要求,学生可以参考运行项目的外观和功能特性,对项目进行改观、优化和创新。教师则以学生对项目的功能完成情况、性能指标达到情况、项目外观改观情况、优化情况和创新情况作为实训作业结果的考核指标对学生进行考核。由于软件类所需的主要设备――计算机已经非常便宜了,所以软件类的课程作业实训可以脱离实验室,在宿舍,在教室,只要有一台2000元的笔记本就可以完成实训作业,而教师也可以从批改“雷同”作业的烦恼中解脱出来,重点考察学生的软件编程能力[7]。
在布置实训作业时,要在框架程序中预设问题。在实训之前展示实训项目的运行框架,并不是预先实现项目的所有部分,而是将学生必须要掌握的知识部分和通过学生查阅资料可以解决的问题部分,在所展示的项目中将其空出来,并以文字的形式注明学生必须自行完成该部分的设计和编码。在展示实训项目时,可以有意识的将问题分类,例如,分类为一般难度、中等难度和高难度的问题,并对不同难度的问题在考核评分时赋予不同的分值,这样,可以督促学生解决预设,同时还可以激发较为优秀的学生解决高难度的问题的欲望,进而使得各种层次的学生在作业实训时都能有所作为,同时避免了作业抄袭。
3 案例设计示例
在传统的软件设计基础课堂上讲授时间复杂度知识点时,往往仅强调时间复杂度的概念及数学表示,学生能从教师简单的示例中大概知道时间复杂度的含义,但缺乏对其本质理解。如何设计与之匹配的案例,让学生不仅深刻的理解时间复杂度,而且能够有意识地运用时间复杂度解决实际问题呢?授课时,首先向学生提问,大家用的手机是如何存储照片的?存储照片的格式是什么?运用的数学原理是什么?多年授课经验表明,与生活常识密切相关的问题,往往会引起学生的注意,并踊跃回答问题。这样很自然地引出了二维离散余弦变换(简称2D-DCT),由于学生之前学习过高等数学,信号与系统,熟悉傅里叶级数分解,简单说明DCT与傅里叶级数的关系后,就会引起学生的思考,这个与信号系统相关的概念与时间复杂度有什么关系呢?2D-DCT公式列出如下:
(1)
(2)
接下来提问,如何利用C语言编程求出?如何简化运算,降低时间复杂度?
为了节约课堂时间,提出问题后,请学生在课下自觉编程,尝试独立解决问题。课下,教师可以通过课程博客与同学们在网络上互动。上课时,教师提问,2D-DCT编程需要多少重循环?常规算法需要的乘法次数是多少?降低时间复杂度的解决方案是什么?信号与系统课程中是否有相关算法的提示?在引发学生深入思考的同时,给出下列公式:
(3)
(4)
(4)
通过引导学生复习信号与系统函数组正交的概念,启发学生把式(3)看做式(1)的等价形式,进而提示学生可以把2D-DCT看做2个1D-DCT运算的组合,若N=8,传统直接的2D-DCT需要的乘法次数为64*64=4096,需要4重嵌套循环;若把2D-DCT按照式(3)分解,则可以看做是2个3重嵌套循环的组合,需要乘法的次数为64*8*2=1024,可见简单的数学变换可以节约4倍的计算量。学生听到这里一定兴趣盎然,没有想到时间复杂度会与考研重点课程《信号与系统》密切关联,进而会迫不及待地尝试编写程序,实现上述思想。 接着再次提问,实际编程中如何组织数据呢?学生经过思考,基本上都能给出利用数组实现,
设一个大小为8的数组SL(8),先读取一个8*8块的第一行资料值,赋给SL(8),对SL(8)进行一维DCT变换后得到一个新的SL(8)数组,再把SL(8)数组覆盖到原来的8*8块中相应的地方去。做完第一行后再做第二行,一直做完8行,一个8*8块的一维DCT即告完成,然后再做列方向的第二维DCT变换,变换公式一样,只是由SL(8)取8*8块的行资料变成取列数值。做完后覆盖回原值,即得到一个8*8块的DFT系数块,再重复这两个过程做第二个8*8块......。上述过程实现后,如何验证算法的正确性呢?当然,仿真工具Matlab是一个验证的好工具,学生会马上调出它,验证上述算法。
从上述案例可见,一个时间复杂度问题引出了《信号与系统》和《Matlab及其应用》两门课程的知识点,充分调动了学生的学习兴趣,使学生深刻地认识到学习软件编程知识是有用的,能够解决大问题,进而增强他们的好奇心和学习的动力。事实上,笔者认为,案例式教学是一种使学生快速理解知识点,增强学习兴趣的手段,在这个原则下,可以尝试编写多个案例,尽可能与通信的主干课联系起来,最终增强电子信息类专业学生的软件编程能力。
4 结语
实践中尝试使用案例式教学对《软件设计基础》课程进行改革,提出“案例式作业”,通过案例给学生展示作业实训项目的运行框架,使学生对作业实训项目有一个感性认识,对项目的功能、性能和逻辑有一个初步的了解,为学生对作业项目进行设计和对项目元素进行创新奠定了基础,通过设定项目难度系数,有效避免了作业抄袭。
设计符合通信工程专业特点的《软件设计基础》案例,把精讲原理与精选案例相结合,尝试探究式课程学习,把基础理论与应用实践紧密结合,把案例和应用任务作为教学内容的主线,进而提高学生的软件编程能力。
本文链接:http://www.qk112.com/lwfw/jiaoyulunwen/xueqianjiaoyu/234772.html