陶维亮+刘艳+许贤泽+赵小红
摘要:《程序設计基础》是一门编程方面的基础课,在各行各业都有广泛的应用,是一门非常实用的课程。现有的教学方式往往关注编程语言的教学,忽略了编程方法和思维的训练。在实践方面也用常规的应用题来考察学生对语言的掌握程度,脱离了实践。造成学生即使掌握了课堂内容,仍然不会解决实际问题。针对这一问题,作者提出课堂教学注重方法和思维训练,降低语言本身教学的比重,引入行业问题或科研案例,引导学生分组协作,分解复杂问题,在任务驱动下解决问题,激发学习兴趣。
关键词:程序设计;科研实践;任务驱动;教学案例
中图分类号:G642.3 文献标志码:A 文章编号:1674-9324(2017)51-0228-02
一、引言
《程序设计基础》是教授程序设计理念与方法的一门实用课程,通常以C语言为主要编程语言来讲授。在多数学校,课程教材和教授方式往往本末倒置,用大量课堂时间来传授C语言的概念和语法,却忽略了程序设计思维的培养。实际上对于课程目的而言,C语言只是一个辅助教学工具,学生通过该门课程的学习,最终应该能够了解和掌握结构化的编程思想,能够设计小规模应用程序,通过各种数据类型的常量、变量以及函数、结构体等编程元素,将复杂问题分解为若干较简单的子问题。总而言之,本课程最主要的目的是培养学生用程序解决实际问题的能力。如何处理C语言语法学习和程序设计思维方法学习之间的矛盾,是一个急迫需要厘清和解决的问题。
二、教学改革思路
在该教学目的的指导下,C语言的编程规则和语法作为基础知识向学生讲授,不求面面俱到,但要把应用性强的内容精心挑选出来,进行简单的介绍。课程内容重心则应尽早转移到算法思想、设计理念的构建上。授课方式也从精讲细讲的教授式转变为激发兴趣、启发思路为主的引导式教学。当然,C语言的语法和规则是比较枯燥的内容,而算法思想、设计理念的讲述也容易变成照本宣科或说教式的教学,势必打击学生的学习兴趣和热情。因此我们考虑引入工业或相关行业具体问题来介绍和提供给学生练习,让他们能够运用学到的C语言的基础知识来解决实际问题。杜绝只教不学,没有具体目标,只学细节,没有总体观和大局观的现象。
三、教学案例的设计
由前面介绍可知,具体行业问题引入《程序设计基础》课程有很大的好处。但行业问题或科研课题与实际教学结合的实施方案实现起来并不那么容易。整个过程可分为:语言知识结构体系构建;案例选题;介绍背景,设计实施框架;分解模块,确定接口;分模块解决问题;联合调试;总结,撰写报告。
1.语言知识结构体系构建,在进行教学案例实施之前,用6个课时讲述基本的C语言知识,让学生了解常用数据类型和变量,常量的基本使用方法,了解程序流程控制命令的使用方法,了解函数的基本使用方法,为后续的应用实验打好基础。基础知识的介绍不要求面面俱到,只是让学生了解或熟悉C语言的基本概念和基本语法,详细的细节根据后续案例实现过程中的需要再逐渐补充。
2.案例选题,分析教学大纲,根据教学内容选择合适的科研课题或行业问题。要注重案例的难度,由浅入深,并且能够仅使用大纲范围内的知识即可解决。科研课题或行业问题要有一定的实用性,能够让学生完成后体会到所学知识在现实工作生活中的实际作用。
3.介绍背景,设计实施框架,介绍案例背景知识,激发学生兴趣和热情。带着任务去学习,对学习的语法内容就不觉得枯燥,也更容易理解和掌握。厘清案例的重难点,引导学生分析和找到正确的解决思路。
图1所示为课程中我们引入的河工模型地形流速同步测量系统案例的组成框图。在框图的基础上展开介绍,帮助学生理解河工模型断面垂线流速全自动实时快速测量系统工作原理。
4.分解模块,确定接口,采取小组讨论的方式,根据程序总体框架和实现内容,对整个系统进行功能模块分解,确定各模块的具体实施人。逐渐推敲应用细节,改善程序框架,形成模块之间相互关联的通道,通过合适的接口相互协调和通信。同时还要注意模块的独立性,即可以通过局部运行来调试和实现模块的内容。
某小组确定的程序各模块如图2所示。
5.分模块解决问题。小组每个成员对自己负责的模块进行内容的进一步细划和扩充,使每部分内容都具有可操作性。在大的结构、流程确定后,还要考虑调节策略及将来的扩展性。各成员在确定模块实施细节后,马上进行小组讨论,对涉及到的接口变动进行及时的协调。
图3为某小组成员对测桥行走控制系统的实现流程。
6.联合调试,各成员独立完成功能和调试,碰到问题则小组讨论或教师指导解决。定期形成进程文档并相互讨论和修正方案,形成会议辑要。最后整体联合调试,共同解决问题。
7.总结,撰写报告。在整个过程中学习控制算法、自顶向下的设计方式、模块化的程序结构,培养学生的协作能力。根据需要学习C语言中的结构体、链表等内容。最终合作撰写完整的实验报告,对整个设计过程中的收获、碰到的问题和解决方法都进行总结和反思。
结语
通过引入案例,在教授程序设计基础课程时引导学生分组协作,建立模型,确定算法,利用自顶向下的设计理念分解复杂问题,在任务驱动下解决问题,在设计和实现过程中发现故障,排除故障,最终熟悉和掌握程序设计方法,在实践中巩固C语言编程中的常量、变量、程序结构、函数等知识,激发学习兴趣,了解程序设计在本专业领域中的应用状况。
Abstract:"Programming Foundation" Course is a basic course of programming,are widely used in all walks of life,is a very practical course. The existing teaching methods tend to focus on programming language teaching,ignoring the programming methods and thinking training. In practice also used to examine students' routine problem mastery of the language,out of practice. Students even mastered the content of the classroom is still not solve practical problems. To solve this problem,the author puts forward the teaching method and focus on the training of thinking,language teaching is reduced,the introduction of industry or scientific research case,guide students in groups,the decomposition of complex Miscellaneous problems,solve the problem under the task driven,stimulate interest in learning
Key words:programming;scientific research practice;task driven;teaching case