赵霞++张珣++韩忠明++嵩天
摘 要:针对在财经类大学非计算机专业计算机公共课程中培养计算思维、解决问题能力和创新能力的问题,分析引入Python程序设计的优势,提出Python语言教学的四段教学法和演化式案例教学法,从心理认知机制角度探索培养计算思维、问题解决能力和创新能力的教学模式和方法。
关键词:课程改革;Python语言;计算思维;创新能力;解决问题能力
1 背 景
对于非计算机专业人才培养的计算机技术课程教学定位,近年来国内外教学领域已经形成共识,即计算机技术课程的核心价值就是培养学生的计算思维,培养学生用计算机解决问题的能力,应该以计算思维为导向进行计算机技术课程的教学改革[1-4]。在共识基础上,如何将计算思维培养在程序设计课程教学中落地是一个重要问题,由此带来一系列值得思考的问题:怎样结合程序设计内容培养非计算机专业学生的计算思维?如何结合学生所在专业(如注册会计、国际贸易、金融、食品工程、机械等)需求,培养学生使用程序解决问题的能力,同时提升学生的创新意识和创新能力?
对于非计算机专业人才培养而言,计算思维教育的目的是培养一种思维习惯和用计算机解决问题的能力,像计算机科学家一样思考、分析和解决问题,面对具体而复杂的现实世界抽象出信息处理的概念,基于概念来分析、综合和演绎问题,进一步找出解决问题的方法;在实践层面体现为利用计算机解决问题的能力,即利用程序设计语言或者软件工具,将抽象概念和解决问题的方法变成程序或者操作步骤的能力。因此,非计算机专业的计算机公共课需要选择合适的教学内容和教学模式作为计算思维和能力培养的载体,降低学生在理解计算机系统上的难度,并体现出计算思维中计算、抽象、自动化等核心概念;更需要给学生提供易于掌握的工具载体,使学生在学习和实践中能够体会到“具体问题抽象化,抽象解决方案具体化”的全过程。
2 研究现状
计算思维最早由周以真(Jeannette M. Wing)教授准确提出并完整阐述[5]。计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。这些基础概念包括仿真、递归、并行、抽象、分解、建模、启发式推理、规划、学习、调度等,希望人们能够通过运用计算思维在各自的学科领域里面进行创造性的科学发现与技术创新。
国内许多高校都在寻求计算思维培养在程序设计课程上的具体落地途径。能够讲授C语言课程的师资力量相对充足,因此许多高校开设C语言程序设计,采用传统的教学模式,从数据类型开始由浅入深讲解知识点,并配以大量的针对知识点的编程训练,然而C语言体现的是“计算机系统结构时代”的计算思维外延[6],主要培养程序的高效运行模式,其底层系统级的特性更适合计算机专业学生学习。对于刚入学的非计算机专业学生尤其是文科类专业学生,通过C语言培养良好的计算思维能力会遇到较大困难,主要有3个原因:①高中阶段的数学、逻辑及抽象思维训练尚未让学生达到顺畅理解C语言的程度,表现为学生对编程还“没有感觉”,学习C语言相对困难;②计算机体系结构相关知识和C语言语法的复杂性进一步增加了学习困难;③非计算机专业学生的专业学习和未来工作缺少C语言的应用场景,导致学生的学习动力不足。为了取得更好的C语言教学效果,教师需要在教学内容和教学方法上投入“更多”的时间和精力才能“略微”提高学生的学习兴趣。
Python语言是一门发展了近30年的通用编程语言,语法简单,接近自然语言,是使学习者不需要了解计算机底层知识而更多关注应用计算机解決问题的思路和方法,是“复杂信息系统时代”最直观的表达工具,降低了学习的门槛。Python语言发展成熟,全部开源,大量第三方扩展库为各个学科领域的专业问题处理提供方便易用的支持,学生可将其与各专业业务需求相结合,快速编写解决复杂问题的可用程序和软件,特别在图形图像、人工智能、数据处理和可视化等方面有得天独厚的优势。
Python语言是目前美国大学最受欢迎的程序设计语言,成为金融、商业、化学、工程等非计算机专业的首选语言课程。在我国,北京理工大学最早从2013年开始面向非计算机专业开设相关课程,随后,南京大学、哈尔滨工业大学、中南大学等也相继开设课程。截止2017年6月,全国近百所高校相继开设针对非计算机专业的Python语言课程,国内教学改革如火如荼。在教育部爱课程网中国大学MOOC平台上,出现了多门Python语言相关MOOC课程,在小象学院、实验楼、优才学院等商业互联网+教学平台上,也出现了几十门Python相关的课程,年均学习人数超过20万。
面对Python语言的迅速发展和普及以及互联网上丰富的教学资源和在线学习课程,国内高校面临程序设计课程教学改革的难得机遇。北京工商大学从2016年开始尝试把Python教学引入非计算机专业的计算机技术课程,已有教学实践表明,Python语言程序设计不仅是计算思维培养的良好载体,而且利用Python特有的计算生态和优秀案例、基于MOOC和SPOC的混合教学模式所衍生出来的创造性思维和能力培养成果,也是令人鼓舞的。
3 计算思维从零开始:四段教学法
面对不知道计算机编程是什么及其跟自己所学专业有什么关系的学生讲授Python语言程序设计,如何设计教学内容、节奏和方式,是一个挑战。笔者在两年的教学经历中总结出一个四段教学的基本模式,即把一个学期的教学过程从预备级到高级划分为4个阶段——认识、会读、会写、会解决问题,每个阶段的目标、做法、具体目标见表1。
第1阶段是认识Python,为期2周。课堂教学介绍计算机基础知识和Python基础知识的同时,演示各种小例子程序。课后作业是让学生执行现成的小程序,体验程序执行的结果;让学生了解用计算机解决问题的基本IPO(输入—处理—输出)模型,并且形成“Python程序蛮有趣”的认知。endprint
第2阶段是会读阶段。通过拆解例题、解释语句的含义、演绎解决问题的过程,不仅仅教学生学习Python语言的语法点,更重要的是引导学生理解程序是怎样解决问题的。程序=算法+数据结构,一个好程序里蕴含的计算思维要素,远远超出一段文字描述。教学生读程序,可以类比于欣赏一件艺术品。当我们教会学生欣赏程序时,也交给他们一把自学的金钥匙,其重要性不言而喻。这个阶段从第3周开始将一直持续下去,只是随着学习的深入,阅读程序更深入,技能更加娴熟。
第3阶段是会写阶段。对于零基础或者文科背景的学生而言,花点时间专门纠正写程序中语句对齐和程序段里的冒号是一件值得的事情。教师要让学生意识到编程是一件非常严谨认真的事情,写代码需要准确的思维和判断,不仅仅纠正的是一些学习习惯,更为重要的是心性的修炼;让学生尽快转换学习态度和思维模式是非常重要的事情。写程序可以从解决简单的问题开始(只有1~2行代码),也可以从修改一个现成的复杂程序开始(10行甚至20行代码)。教学实践表明,由于生源差异,学生素质参差不齐。修改复杂一些的程序,意外的程序执行结果会给学生带来智力挑战或者意外的乐趣,可以刺激他们深入理解程序的逻辑流程、参数的含义以及程序构造的内涵,在做作业的过程中训练逻辑性和严谨性。这个阶段一旦开始,就会一直延续至终。
第4阶段是会解决问题。期中以后,学生已经学完了Python的基本数据结构、控制结构、函数、迭代等内容,并且会使用turtle库、math库、random库等第三方库实现程序设计的基本功能,能够解决一些问题。教师可以通过更为实际的、复杂的或者专门化的案例,教授解决问题的高级技巧和方法,包括如何抽象出问题的本质概念、用数据结构表达抽象概念、用流程图表达解题思路以及借助流程图优化思路、通过复用和函数优化程序等;还可以开展与专业结合的应用案例学习,如商业数据分析处理。
影响四段教学成功的因素,除了教师有效的引导、细致的监督考评、充足的课外编程训练外,还取决于学生的学习心态和时间投入的保证。与C语言程序设计课程教学相比较而言,Python语言给学生留下的印象主要是简单的语法和丰富的生态系统资源,可以使学生更快捷、方便地做出更多功能、更专业化的程序以解决实际问题,更易于建立成就感。
4 计算思维的显化:演化式案例教学
以案例教学作为课堂教学的核心线索,以解决问题的需求组织知识点,是否具有更优的教学效果,是我们近年来一直探索的问题。传统的程序设计课程教学大都以知识点本身的内在结构和演化逻辑组织教学,用实例说明语法和知识点的用法。知识的系统性比较强,有利于学生系统、全面、深入地掌握知识,但对于零基础、非专业、缺乏学习动机的学生而言,学生容易在学习知识点的过程中迷失或者发出“我们学习这个有什么用,能做什么”的质疑。
解决这种问题的关键是回归两个基本点:课程教学目标和学习者普遍具有好奇心的心理特征。课程教学目标是培养计算思维和解决问题的能力,需要从拟解决的问题出发,分析抽取问题的本质,寻求解决问题需要的知识、工具和步骤,明确解决方案的步骤和预期的结果。就求知者的心理特征而言,在问题驱动下的学习是积极主动的,处于开放的心理状态,能够将学习到的新知识与大脑记忆中已有的知识点建立连接,所建立的知识体系与内在记忆和外在信息之间形成有机整体。如果教师能够引导学生从问题出发,就更容易使课堂教学有吸引力和挑战性,带给学生更多的成就感。
我们基于已有的教学实践和创新理念的文献[7],提出演化式案例教学法,即课堂讲授的内容以案例开头,但问题及其解决过程是逐步演化和生长的,演化方式有两种:种子生长式和关键路径式。
种子生长式以简单问题开始,逐步增加问题的变量和条件,引导学生不断扩展解决问题的思路,引入新的程序设计语法要素和解题思路,逐步增加程序的复杂度。例如,从数字、字符数据类型开始,逐步演化到列表、元组、字典;从顺序结构开始,演化到循环、分支、函数、迭代等结构;同时融入抽象、自动计算、复用等思维,编写的程序像一颗种子长成一棵大树一样,由小变大,具有越来越多的功能和越来越复杂的结构。
关键路径式以貌似复杂的问题开始,先引导学生运用流程图工具,分析问题的本质以及解决问题的关键点和关键路径,在问题空间里运用抽象、自顶向下、分而治之、逐步求精等思维拆解问题;然后再引导学生求解问题,运用系统模块图工具,在解空间里以自底向上、封装与接口、聚合等增量式思维获取解决复杂问题的最终解。编写程序的过程像建筑工人做砖头、搭架子、盖房子或盖大楼一样:起初是一个个独立功能的函数,有输入输出参数和处理过程,然后通过函数调用,连接成能够解决问题的一组程序和文件。
当然,成功的问题驱动式案例教学模式对教师有很高的要求。首先,案例设计至关重要,关键要素包括知识点的组织、问题的弹性和解决方案的开放度。文献[7]中已经提供了很多非常好的案例,如天天向上、文本进度条、七段数码管、科赫曲线、中文文本分析、网络爬虫等,无论是在趣味性、实用性还是在问题的弹性、解的开放性上都具有鲜明的特色,都可以在课堂教学中采用上述的演化式案例教学法。其次,课堂讲授是显化案例设计的过程,教师对案例理解的深度、教师的授课技能和掌控课堂能力也决定了教学效果,需要教师不断修炼提高。
5 Python 教学中的创造力培养
认知心理学有两种重要的思维模式:发散思维和聚合思维[8]。向学生提出开放性的问题,启发学生理解并发展与其专业或者兴趣相关的其他领域的新想法和新观念,是培养创新性思维和能力的关键要素之一。启发式的课堂讲授和随后的开放问题,首先向学生提供了发散思维的起始点,引发学生自发的、直觉的、扩散式的发散思维过程。在问题的驱动下,学生会在大脑中搜索、筛选新的想法和方案,综合先前分离的想法、概念或其他视觉信息、抽象符号,就可能形成创造性的激发和组合。
好的案例教学能够把学生的创造性思维通过编程显化出来,使其创作出意想不到的优秀作品,这也是Python语言程序教学实践中的现象。例如,在讲授函数和递归知识点时,以科赫曲线和太极树为案例,讲解自然界中一种普遍的分形现象:看似一个复杂的图形实际上是由一个简单的图形,在参数不断变化的条件下多次迭代产生的,如图1所示。
课后作业是根据课堂学到的知识,自己编程创作一个有新意的程序。收到的作业体现了被激发的学生的创造力,为此我们专门组织了一次延续教学以演示和讨论这些优秀的创意和作品,如图2所示。
图2(a)的3张图是同一个程序执行过程中不同阶段画出的图形。这些结果表达的是一点点微小的变异在无数次迭代情况下,演化出非常复杂的对象。背后的原理是什么、迭代次数与参数选择怎样影响结果、如何找到这样的参数等问题,可以引发学生课上充满好奇的讨论,也可以成为引导教师和学生未来展开更深入的探讨和研究的引子。
图2(b)是一名注册会计专业的学生用250行代码画出的艺术作品。在课堂讨论中,教师带领学生逐行分析源代码,现场演示如何利用列表、函数等优化这个程序,使得程序更精炼简洁,激发了更多学生的创作欲望并创作出后续的好作品。作品的创意之美令人惊叹;而学生在课堂案例中吸取有效元素(如太极树、迭代、函数、随机数、列表等)基础上展现出来的创造力,带给我们非常有益的启示,如果能够加以利用改进教学内容,可以培养出更多的优秀人才。
6 结 语
针对互联网与人工智能时代对非计算机专业人才的需求,教学实践表明Python语言程序设计是肩负这个使命非常理想的载体。在实践中探索的四段教学法和演化式案例教学法针对零基础的非计算机专业学生特点,能够激发学生的学习兴趣,培养计算思维和解决问题的能力。此外,如果能够将Python特有的計算生态资源和优秀案例与学生的专业或者兴趣相结合,就可以激发学生的创造性思维和创新能力,引导学生开展基于Python的艺术创作和科学探索,通过不断调整优化教学内容和教学方式,有效提升教学质量,达到培养计算思维和创新能力的育人目标。endprint