面向工程思维与创新能力培养的 “程序设计实践” 课程实践

2022-02-18 06:59杨晴虹路新喜
科教导刊 2022年35期
关键词:程序设计选题知识点

黄 坚,宋 友,杨晴虹,路新喜

(北京航空航天大学软件学院 北京 100191)

程序设计实践课程通常依托于某一门编程语言设立,通过大量习题的演练提高低年级本科生对编程语言的掌握程度[1-2]。近年来,随着新工科理念[3]、卓越工程师培养计划[4]等教育改革与人才培养计划的提出,程序设计实践的 “实践课” 属性被重视起来,诸多高等院校开始在课程建设中引入项目驱动、专题性实践等教学方法,增强学生独立解决复杂工程问题的实践能力[5-6]。然而调研可知同类课程多采用复现应用案例的实践方法,在实践选题的应用需求设定、技术路线选择等方面多有限制,制约了学生工程思维和创新能力的培养。为此,本研究结合具体教学实践,对程序设计实践课程体系的建设进行了探索。

1 课程设置与问题分析

北京航空航天大学软件学院是首批特色化示范性软件学院,在 “形成一批具有示范性的高质量软件人才培养新模式” 的建设要求下,将创新精神和软件技术攻关能力作为人才培养质量的重要指引。在此背景下,程序设计实践课程作为学院本科生接触的第一门实践课,也承担了培养工程思维和创新能力的责任。为此在多年建设中课程团队对课程进行了系统化的革新,实现从 “知识本位教育 “向 “能力本位教育” 转变。

目前该课程在大一下的暑期开设,包含16学时的软件开发基础知识学习和为期一周的开发实践。学生通过开放式自主命题,不限制技术路线,在课程实践中独立开发完成一个1千行以上代码,具备完善功能和应用价值的创新创意软件作品。通过课程的学习实践,填补学生从计算思维迈向工程思维中的教学空白,达到承上启下,融汇基础知识、训练实践能力、培养软件工程意识、鼓励创新创意的目标(图1)。

图1 程序设计实践课程定位

课程的建设响应了 “两性一度” 的要求。在挑战度方面,在大一新生只学习了课程基本编程语言知识的情况下,带领他们挑战完整的软件项目开发,提升了难度,学生需要 “跳一跳” 才能完成课程任务;在高阶性方面,课程强调培养学生的软件工程思维,强化学习能力和创新能力,使他们在面对未经历过的开发过程和技术问题时,能够通过探究式学习来自主寻找解决方案。

然而,上述要求显然给课程的实施带来巨大挑战:

①由于学生只具备基本编程知识,对分析、设计、开发、交付软件工程的过程缺乏了解,在此情况下能否完成完整的软件项目开发?

②该课程采用开放式选题,不限制技术路线(语言、平台、工具等),在此情况下有限的师资力量如何帮助学生解决无限的技术难题?

针对这些困难,在创新性方面课程团队进行了精心设计,从教学内容、教学方法等方面给出多种措施,保障课程的有效实施。

2 课程教学实施

2.1 提炼程序设计实践知识体系

开放式的实践选题对课程的教学内容提出了非常高的要求,学生可以选择从Windows应用程序、智能手机APP,到数据库应用系统、Web应用系统甚至人工智能应用程序等不同形态的软件作品,学生需要学习的知识点量大且分散。在没有预设实践技术路线的情况下,课程教学需要整理更全面更有针对性的知识体系来应对学生的知识需求。为此,课程组一方面在历年教学实践中注重收集总结学生学习开发过程中涉及、关心的各领域基础知识点,提炼制约开发实践的核心关键内容;另一方面,通过与百度技术学院等机构进行校企合作,从企业研发人才需求出发,总结和补充软件企业所重点关注的知识点,如软件质量保证、产品交互设计等,逐步积累形成了能有效支撑编程初学者进行创意软件作品开发的知识体系,如图2所示。

图2 程序设计实践基础知识体系

知识体系的设计以实用性为导向,主要解决缺乏知识储备的编程新手,如何在短时间内学习掌握关键知识点,实现软件开发目标的问题。课程开设了16学时的专题技术讲座,浅显易懂地讲解重要知识点(图2中前四项知识点)的内涵外延及其在项目中应用的方法。对于其他有用的知识点,由于课时限制无法安排集中授课,课程组也制作了相应的线上学习资源,供有需要的学生选学。通过上述课程教学安排,使得学生对完整的软件开发过程有了初步认识,消除了无从下手的焦虑。

2.2 任务驱动的教学方法

开放式的选题决定了开放式的技术实现途径,因此除了公共基础知识体系部分由任课教师进行集中培训之外,学生还需为实现自己的软件开发目标进行大量的自主学习。为提高学生学习和解决问题的效率,课程组应用了任务驱动的教学方法:学生在强烈的解决问题和完成项目的动机驱动下,通过教师的引导和帮助,积极主动应用学习资源进行自主探索和个性化的学习。课程的任务驱动教学方法具有如下特点:

2.2.1 学生的主体性

学生利用各种学习资源和工具,自主完成项目任务,整个过程都需要主动地探索并解决碰到的问题,充分调动学习积极性。

2.2.2 教师的主导性

教师对学生项目开发进程中的关键问题(从技术选型、系统设计,到功能实现、错误调试等)进行把控和指导,建设和提供给学生所需的各类学习资源,并进行各种学习活动(如案例解析、在线讨论等)的组织与管理。课程组配备了应用开发经验丰富的教师和助教队伍,通过线下一对一指导,和线上GitHub讨论区、微信群等在线讨论方式,在课堂内外随时掌握学生实践状态,及时响应和解决技术问题,推动软件项目开发进展。指导过程中教师往往不是直接告诉学生面临问题的解决答案,而是向他们提供解决问题的有关线索,如问题背后涉及哪类知识原理,从何处获取有关的信息资料等,强调发展学生的 “自主学习” 能力。同时,根据需要积极组织专家讲座、学生内部讨论交流等,通过不同思路的碰撞,加深学生对问题和解决方案的理解。

2.2.3 教学资源的支撑作用

鼓励学生自主学习,而这离不开丰富的教学资源的支撑。课程经过了多年建设,积累了500个以上的学生实践作品,师生线上讨论解决各类技术问题的讨论串也达到了数千条目。在这些宝贵的课程资料的基础上,课程组积极开展教学资源建设:编撰了优秀学生作品的案例详解,作为内部教材,供学生学习了解高水平作品的实现过程;开发了课程成果展示平台,学生可以通过平台寻找与自己技术路线相似的往届作品进行案例学习;同时基于历年的线上讨论数据整理了技术问答库,方便学生遇到问题时查阅有效的解决方案。通过教学资源的建设积累,使得学生能够进行高效学习,自主解决问题,有效缓解了有限的师资力量与无限的技术问题之间的矛盾。

课程组实施的 “任务驱动” 教学法,以完成自主命题软件作品为主线,学生为主体,教师为主导,改变了以往 “教师讲,学生听” ,以教定学的被动教学模式,实现了以学定教、学生主动参与、自主协作、探索创新的新型学习模式。实践证明,这一方法有利于激发学生的学习兴趣,培养学生分析问题、解决问题的能力,提高学生自主学习及与他人协作的能力。

2.3 创新能力培养

课程以创新能力培养为重要目标。在学生选题阶段,教师积极引导和鼓励学生通过观察生活,总结痛点需求,自主寻找软件作品的创意思路,开启创新意识。学生作品的内容从工具软件、生活类APP、小游戏,到AI应用等不一而足,历年选题的重复率通常在10%以下,其中非常有创新性和应用价值的创意作品设计更是大量涌现。

然而,受限于专业基础知识不足和较短的课程实践时间,学生在课程结束时提交的作品往往不能达到最理想的实现效果。为此,教师会鼓励学生在课程结束之后继续打磨作品。对于优秀的创意,教师会对学生进行一对一的讨论辅导,给出作品迭代优化的方向和技术路线指导,帮助他们完善作品之后参加不同层级的科技竞赛。近年来,软件学院获得的十余项科技竞赛成果直接起源于本课程的作品创意,涉及的竞赛包括北航冯如杯科技大赛、腾讯T派创新创业大赛、中国软件杯大赛等。而这些竞赛成果的取得,也大大激励了下一届同学课程实践的积极性,促进更多优秀作品的产生,形成了良性循环。

3 结语

北航有一门传统的金工实习课程,学生通过设计图纸、操作机床等步骤,制作完成人生中第一件金工作品——一把金属锤子,这成为北航学子共同的校园记忆。程序设计实践课通过教学改革,帮助每个软件学院的学生创作完成人生中第一个能投入应用的软件作品,增强了他们的软件技术攻关能力和专业自豪感,培养了学生用软件改变生活的创新精神,取得了较好的教学效果。

猜你喜欢
程序设计选题知识点
一张图知识点
一张图知识点
第四页 知识点 歼轰-7A
基于Visual Studio Code的C语言程序设计实践教学探索
本刊诚征“独唱团”选题
谈诗词的选题
本刊诚征“独唱团”选题
本刊诚征“独唱团”选题
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索