以Python为载体的“大学计算机”课程计算思维能力培养实践

    

    

    摘要:本文通过深入分析计算思维的本质特征,研究体现计算思维的核心教学内容,建立了一个贯穿计算思维的“大学计算机”课程体系,并以Python为载体构建了一个循序渐进的实验体系,采用案例驱动的启发式教学方法开展教学。六年的教学实践证明,通过以问题求解为导向的Python编程实践,能够使学生更好地理解和运用计算思维,激发学生运用计算思维方法求解问题的兴趣,使学生的计算思维能力显著提升。

    关键词:Python;大学计算机;计算思维;课程体系;实验体系

    中图分类号:G642 ?文献标识码:B ?论文编号:1674-2117(2021)07-0097-04

    十几年来,人们逐渐认识到计算思维独特的重要作用,以及计算思维能力培养的重要性和迫切性。国际一流大学纷纷将计算思维纳入各自的专业与非专业基础教学中,如麻省理工学院(MIT)、加州大学伯克利分校、斯坦福大学、卡内基·梅隆大学等高校均面向全校开设了以计算思维为核心的计算机基础课程。国内一些高校从2010年开始,陆续开展以计算思维为导向的课程改革研究,把“计算思维能力的培养”作为计算机基础教学的核心任务。然而,要将计算思维引入“大学计算机”课程,需要解决一系列的问题:①计算思维包含了众多的概念,面向非计算机专业的大一新生,哪些概念是学生必须掌握的?②课程教学目标究竟应该是什么,即课程应该如何定位?重点是使学生掌握必要的计算机基础知识,掌握Office和操作系统,还是使学生在理解一些计算思维核心概念的基础上,掌握计算思维的方法去解决实际问题?③既然引入计算思维,必然要有实践环节才能使计算思维能力的培养落地,必然要涉及程序设计。那么,如何避免课程演变成程序设计课程?④应该采取什么教学方法,才能使学生真正理解计算思维的概念,进而运用计算思维来解决实际问题?总之,在大学计算机课程中,怎样使计算思维能力培养真正落地是改革的关键所在。

    笔者所在学校从2014年开始,对面向全校非计算机专业本科生开设的第一门计算机基础课程“大学计算机”,从课程体系和实验体系上进行了重大改革,通过深入分析计算思维的本质特征,研究体现计算思维的核心教学内容,参照MIT、加州大学伯克利分校和卡内基·梅隆三所大学的课程教学大纲和教学内容,确定按照“计算思维基本思想→问题抽象与建模→数据结构与程序设计基础→算法设计与优化→科学计算与数据处理→工程思维及系统设计方法”的顺序,循序渐进、抽丝剥茧地讲解利用计算思维进行问题求解的方法和过程,并选择Python语言作为落实计算思维概念的编程语言。经过六年的教学实施,取得了较好的教学效果,达到了预期的教学目标。

    按照问题求解的过程构建一个贯穿计算思维的课程体系

    在当今以计算思维能力培养为核心的大学计算机教育阶段,“大学计算机”课程应重新进行课程定位,该课程既不是一门单纯的计算机知识课程,也不是一门程序设计課程或算法课程,而是一门训练思维方式和工程方法的课程。

    该课程的教学目标是:基于OBE(Outcome based on Education,以成果为导向)教育理念,通过课程学习,使学生理解计算思维的基本概念和主要思维方法(如约简、抽象、建模、分解、递归等);掌握必要的计算机基础知识;通过理论学习和上机实践,初步形成解决问题的计算思维,能够对求解问题进行合理的抽象,建立合适的可计算模型,并且具备一定的程序设计能力;使学生在各自的专业中能够有意识地借鉴、引入计算机科学中的一些理念、技术和方法,能够运用计算思维的一般方法分析问题和解决实际问题,为各专业的后续计算机能力和素养的需求提供必要的思维和能力储备。

    笔者所在学校将该课程设为48学时,其中理论教学26学时,实验教学22学时。笔者围绕上述教学目标,根据问题求解的过程,构建了一个计算思维贯穿始终的课程体系,共包括5章内容,分为13讲,如图1所示。

    第1章介绍计算思维的基本概念和主要思维方法、计算机的理论模型(图灵机)与物理实现(冯·诺伊曼计算机),同时介绍一些必要的计算机基础知识。

    后面的各章内容循序渐进,通过理论学习和实践,使学生逐步了解、体会和掌握,从而培养学生以计算思维解决实际问题的基本思维方法。针对一个实际问题,运用计算思维的一般方法进行问题求解的全过程:如何对问题进行抽象,找出待求解问题的本质,忽略非本质特征,建立计算模型;考虑如何在计算机中存储数据、采用何种方法表征数据间的结构关系;如何选择已有算法或设计合适的算法来描述求解问题的方法和步骤,如何对算法进行优化以提高计算效率;如何编程实现数据处理,如何将求解的结果显示出来,如何进行人机交互,设计图形用户界面(GUI)。

    以Python为载体构建一个循序渐进的实验体系

    在推进计算思维能力培养的进程中,应该如何设计配套的实验环节,才能使计算思维真正落到实处?这其实是一直困扰广大教师的一个关键问题。

    1.编程语言的选择

    计算思维的本质是抽象和自动化,抽象是指将欲求解的问题形式化地表示为计算机所能理解的符号模型,进而用程序语言描述该模型。自动化是指计算机自动执行程序,实现问题求解。要实现问题的自动求解,必须选择合适的程序设计语言,编写相应的程序。

    尽管“大学计算机”课程不是一门程序设计课程,但要想使学生深入理解计算思维,逐步形成计算思维方式,掌握计算思维的一般方法,编程训练是必不可少的重要环节。

    目前,国内在程序设计教学中编程语言大多选择C或C++或Java,但是,这几种高级编程语言对语法要求比较严格,对初学者来说不容易上手,导致学生花费过多的时间在语法细节上,而忽略了对科学计算问题求解过程的理解,所以并不适于非计算机专业学生学习。目前,美国的MIT、加州大学伯克利分校、卡内基·梅隆大学、斯坦福大学、密歇根州立大学等知名学府都是将Python语言作为计算机导论课程的编程语言,或者作为新生入门编程语言。国内的上海交通大学、国防科技大学、同济大学、北京理工大学、哈尔滨工业大学、北京交通大学等也在“大学计算机”或“程序设计”课程中讲授Python语言。

    Python语言的优点是语法简洁、简单易学、功能丰富、代码优美、且包含编程语言所必须包括的编程思想,如条件、分支、循环、递归等。Python语言支持面向过程和面向对象两种程序设计方法,同时提供了丰富的标准库和大量开源的高质量库,有利于帮助学生迅速学会编程,激发学生对程序设计的兴趣,进而掌握运用计算思维理念、利用计算机通过编程解决各种计算问题的方法。该语言只关心计算问题的求解,其轻量级的语法和高层次的语言表示表达了应用计算机解决问题的计算思维理念。

    因此,笔者围绕Python语言讲解程序设计基本知识,并设计了相应的实验环节,来深化学生对Python语言的理解和应用。

    2.实验体系的构建

    围绕程序设计、数据结构、算法、科学计算、可视化这几个课程核心内容,笔者构建了一个层次化、循序渐进的实验体系。通过以问题求解为导向的Python编程实践,使学生更好地理解“计算思维”求解问题的思想,掌握其方法,从而将计算思维的培养真正落地,提高学生应用“计算思维”方法求解问题的兴趣。

    实验体系分为基础级别实验、进阶级别实验和综合设计实验三个层次(如图2)。每年组织助教团队开发新的实验,2020年共设计了平时实验项目39个,综合设计实验项目5个。其中,基础级别实验4次,旨在夯实学生编程基础与基本数据结构使用和设计方法。通过实验训练,使学生能够运用Python基本语法进行问题模型的描述和简单问题的求解。进阶级别实验4次,目标是以实验项目训练掌握算法思维及科学计算类问题的求解,重点训练内容包括基本算法以及较复杂算法(如动态规划、贪心法)的设计与实现、图形绘制、插值、拟合和GUI设计。

    综合设计实验(大作业),提供若干综合了多个知识点、具有一定应用场景的选题,只提作业要求,并不给出實验指导。大作业题目难度系数不同,学生任选一个自主设计,独立完成。大作业是课程学习成果的关键考评指标之一,着重考查学生的自学能力、自主设计能力、综合运用知识解决实际问题的能力。大作业答辩环节要求学生进行PPT演讲和现场答辩,锻炼其总结、表达、思辨能力。

    教学实践与教学效果

    1.案例驱动的启发式教学方法

    计算思维包含若干核心概念,但是比较抽象,学生一般难以理解。因此,课程团队设计了115个体现计算思维主要方法,具有趣味性和实用性、能够激发学生思考的教学案例,使抽象的概念具体化,来引导学生的思维。

    在教学过程中,则采用案例驱动的启发式教学方法:先抛出问题,再给出设计思路,重点讲解设计技巧和难点。通过分析计算机解题的思路和方法,着重讲解如何运用知识将实际问题转化成机器语言的思考过程,包括问题抽象、模型建立、算法设计、选择或设计数据结构、编程实现,最终交由计算机自动求解,从而促进学生对计算思维抽象和自动化本质特征的理解,掌握计算思维面向典型问题的问题求解方法。最后,现场运行程序,使学生目睹实际运行结果,增加感性认识。

    例如,在第1章“计算思维与计算机模型”的最后一节,通过三个典型的案例,分析了计算思维的主要方法的实际应用:通过网络协议的一个经典问题——两军问题,来分析其中蕴含的通信和协作的思维,并引入网络通信、通信协议等概念。通过计算机网络从客户端到服务端的访问过程,来分析计算机网络及其模型蕴含的抽象、分解、关注点分离、建模等计算思维重要方法。最后一个案例从RSA算法的安全性来分析计算的效率问题,使学生理解为什么说RSA算法理论上是不可攻破的?并思考RSA密钥长度是不是越大越好,对计算效率有何影响。在第4章中,针对该实例进一步讨论,在进行加密和解密时,如何通过优化算法来提高加密和解密的计算效率。

    2.教学效果与评价

    从课程教学的实际效果来看,学生学习了计算机基础知识,掌握了计算思维基本思想,能熟练运用Python语言的基本语法和基本数据结构完成实验,如常用算法设计、找最短路径、字词统计和显示、绘制各种图形、进行科学计算和处理、GUI设计等。

    学生认为学习该课程最大的收获是拓展了分析问题的思路,学到了新的思维方法。例如,有的学生认为,“该课程锻炼了我们的计算思维,我们的逻辑思维能力也有大幅度增强。还有的学生认为,该课程的一个很重要的作用就是指引,它让我们见识到了许多有力的工具,许多有趣的思想;最有用的是Python语言,它拥有太多优质的模块。相信在今后的学习工作中,它们会成为我得力的助手。

    尤其是在大作业中,学生充分发挥自己的想象力,创新设计,上网查阅资料,自学更多的新知识,完成的作品各有特色,精彩纷呈,颇有创意。一些优秀作品不仅实现了所有必做功能,还部分实现甚至全部实现了选做功能,有的学生还创新设计实现了几个新的功能。

    结语

    时代的发展和社会的进步要求大学应培养高素质的专业创新人才,大学计算机素质教育应传承计算文化、弘扬计算科学和培养计算思维。计算思维的养成不是一朝一夕的事,还有许多问题值得我们思考和研究,如如何结合后续专业课程,设计一些有针对性的与专业相融合的案例?如何针对不同专业需求实施分类教学?如何结合MOOC开展混合课堂、研究型教学等新的教学模式?

    笔者将针对上述问题开展研究和探索,进一步深化课程改革,使“大学计算机”课程真正成为一门对学生有用、受学生欢迎的计算思维导论课程。

    参考文献:

    嵩天,黄天羽,礼欣.Python语言:程序设计课程教学改革的理想选择[J].中国大学教学, 2016(02):42-47.

    作者简介:艾明晶(1965—),女,湖北省宜昌市人,博士学位,北京航空航天大学计算机学院副教授,虚拟现实技术与系统国家重点实验室研究人员。从事EDA技术、数字系统设计和大学计算机的教学,研究方向为虚拟现实、视频编码与图像处理、嵌入式系统等。