APP下载

建构主义在高级C# 应用开发教学改革中的应用

2011-12-31王华秋

计算机教育 2011年10期

  摘要:针对目前高级C# 应用开发教学中存在的问题,在建构主义学习理论的倡导下,文章论述高级C# 应用开发课程的教学改革思路:组织开展互动教学、案例教学、实训教学来促进和完善学生对C# 知识体系的意义建构。这对高级C# 应用开发教学模式改革极具指导意义。
  关键词:建构主义;教学改革;互动教学;案例教学;实训教学
  
  皮亚杰提出的建构主义学习理论强调对事物的认知学习,知识是由符号系统组成的,学习者可以在软件需求背景下,借助各种帮助,利用学习资料,对客观世界作出一种合理的解释或假想,通过建构出抽象符号系统的方式获得知识。教师单方面的传授知识并不是学习的最佳途径,学生通过自主学习同样可以发挥创新潜力,这样可以让学生最大程度地获取知识。
  1高级C# 应用开发课程概述
  高级C# 应用开发课程是一门综合性和实践性较强的应用学科,其体系结构比较复杂,比如,我校该课程的体系结构如表1所示。
  在学习过程中,学生需要对实际应用有亲身体验和探索,否则就不能全面深入地掌握相关知识体系。
  另一方面,由于这一学科有实用性的特点,随着.NET技术的快速发展,该课程的知识体系是一个动态系统,技术和经验不断推陈出新,学生需要有学习的开放性和主动性,否则将无法及时更新软件技术和知识经验,其固有的知识体系就无法适应用户不断发展变化的需求。鉴于此,笔者认为教师可以借助建构主义教学观的理念,在高级C# 应用开发教学活动中延伸传统教学的“教师主导型”为“学生主导教师辅助型”,利用丰富的网络教学资源,使教学辅导过程得以拓展和延伸。
  2目前教学中存在的问题
  2.1学生的认知领域窄、自主学习能力差
  传统的教学方法不利于培养学生自主学习的习惯,对学生的探究学习未能合理引导,学生一般不会发现学习过程中的问题,更不会主动搜集资料去解决问题和探索问题。
  2.2学生的认知结构不完整、协作学习效果差
  传统的教学过程中,很少有学生在团体中为了完成一个共同的目标,进行责任分工明确的互助式学习[1]。学生一般是通过教师的讲述和组织来被动学习知识,彼此之间缺乏合作交流,学生之间或师生之间的优势无法得到互补,不仅使学生对相关的理论知识缺乏兴趣,而且遮蔽了个人对问题认识的视线,从而无法完整建构软件开发知识认知体系[2]。
  2.3学生的软件开发实战能力差
  传统的课堂教学方式主张把学习置于课堂讲述之中,知识不能适应不同的问题背景,从而在实践中不能广泛地迁移,学生没有充分对软件开发实战进行体验,不能参与其中,经过一番课堂灌输后,由于缺乏接近现实需求的完整案例学习,学生没有真正领会到什么是任务、如何分配任务、如何设计开发以及如何测试系统,学生的软件开发实战能力提高不是很明显[3]。
  3建构主义在高级C# 应用开发教学中的影响
  我校本科教育的应用性特征决定了高级C# 应用开发的教学宗旨应侧重于培养学生的专业技能水平,基于此,笔者认为,利用建构主义教学观原理进行高级C# 应用开发教学模式改革,开展多样化的教学活动和实验,这对学生建构理论与实践相结合的高级C# 应用开发知识体系是十分必要和有效的。
  3.1促进互动式课堂教学
  在“基于问题学习”教学方式下的课堂教学应充分发挥学生的主动学习性,转“被动”为“主动”,引导学生发现问题、分析问题、探索性地解决问题,这是一种建构主义所倡导的教学方式[4]。
  教师可以在讲授理论知识的同时向学生提问,让学生主动思考作出解答,与此同时,也可以适当评析一些与本课程相关的实践知识,引导学生对一些C# 软件开发的热门技术和实践应用进行探讨。例如,笔者在讲授C# 数据挖掘技术时曾向学生提出思考题:如今电子商务越来越普遍,针对由此产生的海量数据,软件企业应如何利用C# 这一开发工具,采取什么有效方法搜集Web访问信息并发掘出有价值的知识,从而对互联网用户提供个性化服务。这一问题引起学生的热烈讨论,一方面激发了学生的学习兴趣,另一方面为学生构建了“研究式学习环境”,引导学生主动面对实际问题并开动脑筋求解问题。
  这样的互动式课堂教学需要教师具备“一专多能”的业务技能,教师需要将其他学科的知识引进课堂,丰富课堂教学信息。例如,笔者在讲到分布式服务这一章时,将以前做过的单机版的绘图程序变换成分布式绘图程序,让学生加以讲解点评,开拓学生学习的思路,既让学生学习了图形编程,又让学生在感受分布式技术带来便利的同时学会了新的编程手段。当然,教师在互动教学过程中,应能把握好对学生学习指导的程度,充分考虑学生水平的差异性,尽量让大多数学生都能发挥其思维创造力。从另一方面看,教师通过这样的教学方式也能不断完善充实自身的知识和能力,这是一种“教学相长”的良性循环。
  3.2引入案例教学
  建构主义提倡在教学中适当引入案例,特别是在培养软件开发人才时,软件案例分析无疑是一种切实有效的教学方法[5]。这种方法不仅能培养学生综合运用C# 软件开发知识,提高分析解决实际问题的能力,而且能使学生在案例讨论过程中自觉吸取案例中所体现的软件开发经验,从而丰富和完善了原有的认知结构。
  在案例教学过程中,需要引用典型的C# 软件开发实战案例,为学生提供情境学习的平台,师生以及学生之间对案例进行分析、探讨,学生可以在协作中体会C# 开发过程,从而总结软件理论并提炼设计观点,最终在已有的知识体系和经验的基础上积极建构新的C# 软件开发知识体系。案例教学分析法可以采用以下两种方法:
  1) 总分法。
  可以选取一个或若干个典型案例进行讲解和分析,然后提炼出案例的相关知识点或知识体系,最后针对这些知识点再向学生提出一些实践性较强的热点问题,鼓励学生思考、讨论、回答。
  笔者以图像检索软件为例阐述个案分析的过程。该案例充分利用图像处理、分析、检索、数据库技术,实现了对图像数据库的管理和检索。该案例分为如下功能:
  ① 提供了对图像进行像素法、内存法和指针法等图像存储功能;
  ② 提供了对图像进行去色、反相、缩放、平滑、分割、腐蚀、膨胀、边缘检测等图像处理功能;
  ③ 提供了对图像颜色特征、纹理特征和形状特征提取等功能;
  ④ 提供了一些由实践证明有效的图像检索算法,主要包括基于颜色、纹理和形状等视觉特征的图像检索算法。
  该案例基本可以贯穿整个教学过程,学生可以从图像存储方式和检索算法等技术入手,剖析出像素法、内存法和指针法等图像存储的知识点,也能带出图像的颜色直方图检索、纹理检索、轮廓检索等图像内容检索算法。一直涉及到图像处理算法的开发策略,然后再向学生提出如何将这些开发策略集成的新任务,引导学生去思考、讨论和解答。
  该案例具有良好的扩展性,从人工智能的角度考虑,学生可以在此基础上加入对图像利用聚类算法进行图像分割功能。
  图1展示了该案例和高级C# 图像处理与分析教学内容的对照关系。
  本案例从设计阶段就充分考虑了高级C# 课程教学过程中所涉及到的各个环节的内容,在教学的基础理论阶段就可以引入本案例来讲解诸如图像处理、图像特征提取以及图像检索等概念,并且可以让学生发挥主观能动性来设计图像处理算法。随着课程的不断深入,逐步引入其他诸如聚类分析、图像分割等高级
  图1案例和高级C# 图像处理与分析教学内容的对照关系
  概念,可以让学生将该案例移植到网络环境下运行,更可以激发学生探索新技术的学习热情。
  
  2) 个案法。
  可以选取规模较小、业务较单一的案例,就某一技术层面进行重难点分析,这样的案例需要包含相关知识,通过对案例的深入分析和经验总结来帮助学生对某一技术透彻理解。
  例如,在讲到多线程技术这一章时,设计一个排队系统的案例,火车站有20个窗口正在售票,一共有10 000张票,每人限购10张票,每个窗口售票时,若售票数量超过现有的车票数,那么这次售票将被拒绝。这就要保证一个窗口在售票时,另外的窗口不能售票,同时车票的余量不能为负。
  这就是一个典型的线程互斥和同步的问题,线程同步来源于多个线程同时访问一个资源时带来的结果不一致问题。有了线程同步,当一个线程完全执行完任务之后,才允许执行下一个线程,这样就可以保证一个共享资源一次只能被一个线程使用。
  线程同步可以采用以下3种方法:lock()、Monitor类、Mutex类。将多种线程同步技术引入其中,让学生通过案例的设计和实施来评价各种线程同步的特点,从而让学生在今后的开发中知道如何选择合适的线程同步技术。
  下面我们可以修改案例的程序,使之使用3种不同的线程同步方法,并且我们要比较3种线程同步在效率上相差多少。通过比较,可以看到三者在效率上有比较明显的差别:
  ①lock()语句可以把某一段代码定义为互斥,这互斥的程序段在某一时间段只允许一个线程执行,其余线程必须等待这个线程执行完毕之后才执行。
  ②lock()只是Monitor类的一个表现形式,在C# 编译器编译lock()语句时,将其编译成了调用Monitor类。
  ③Mutex与Monitor类似,它防止多个线程在某一时间同时执行某个代码块,不过Mutex不具备Wait、Pulse、PulseAll功能,因此,我们不能使用Mutex实现类似的唤醒功能。尽管Mutex可以用于进程内的线程同步,但是使用Monitor通常更为可取,因为监视器是专门为 .NET Framework而设计的,因而它可以更好地利用资源。相比之下,Mutex类是 Win32构造的包装。尽管Mutex比监视器更为强大,但是相对于Monitor类,它所需要的互操作转换更消耗计算资源,但是Mutex类可以跨应用程序域边界进行封送处理,可用于多个等待,并且可用于同步不同进程中的线程。
  不过不可否认这些线程同步方法各自的优势,因此使用哪种线程同步方法还需要根据自己的需求来选择。让学生通过案例的设计和实施来评价各种线程同步的特点,从而让学生在今后的开发中知道如何选择合适的线程同步技术。
  3.3开展情景学习
  建构主义强调知识迁移能力的培养,学生在真实的情境下进行学习,可以减少知识与解决问题之间的差距。高级C# 应用开发是一门实践性较强的应用科学,是软件企业设计开发实践经验的概括与总结,教学过程除了有课堂讲授、课堂讨论、案例分析以外,还应适当增加一些操作性较强的实际技能训练,在学生的知识建构过程中嵌入更为丰富的信息。
  实训教学可由两个部分组成:
  一是建设和使用软件工程模拟实验室,实验室可以某个具体软件企业的整个开发生命周期内各阶段基本活动为主线,设置多个摸拟C# 软件开发活动模块,让学生扮演软件企业项目主管,从各个角度分析实战案例,进行开发设计,探索解决方案,在此过程中培养学生的实战能力和创新能力。
  二是组织开展与软件开发活动相关的社会实践,可考虑让学生利用课余时间或假期开展多种形式的专题调查,如市场软件需求调研、软件销售策划等,并撰写专题报告,教师对此调查过程进行事前筹划、事中督导、事后交流、检查和评估。通过调查实践,使学生参与了软件企业的实际管理活动,可以综合运用和融会贯通所学知识,达到培养实用型专业人才的目标。
  4结语
  建构主义教学理论适应了高级C# 应用开发课程的动态性和多样化,运用建构主义理论对教学过程进行改革可以完善课程知识体系,提高教学质量,当然教师的教学水平也会相应提高。高级C# 应用开发教材不仅应有基本技能的阐述,更应注重对一些实际问题的分析和研究,还应积极采用多媒体知识载体来丰富教学资源和信息。任课教师应时常关注国外新的理论和学术领域的动态,多参加学术交流和职业培训,将最新的C# 开发技术引入校园和课堂。
  参考文献:
  [1]