APP下载

改革程序设计课程 探索计算思维能力培养

2017-09-03文欣秀顾春华王家辉杨泽平王占全

实验室研究与探索 2017年8期
关键词:程序设计建构主义思维能力

文欣秀, 顾春华, 王家辉, 杨泽平, 王占全

(1. 华东理工大学 a. 信息科学与工程学院; b. 理学院, 上海 200237;2. 上海理工大学 光电信息与计算机工程学院, 上海 200093)

改革程序设计课程 探索计算思维能力培养

文欣秀1a, 顾春华2, 王家辉1b, 杨泽平1a, 王占全1a

(1. 华东理工大学 a. 信息科学与工程学院; b. 理学院, 上海 200237;2. 上海理工大学 光电信息与计算机工程学院, 上海 200093)

以计算思维能力培养为切入点的程序设计课程教学改革需要转变教学观念和教学方式,在建构主义指导下帮助学生构建学习情境,鼓励学生明确学习目标,激发学生进行协作学习。我校的程序设计课程教学改革从以下四个方面展开:将计算思维特征渗入教学实践环节中培养学生思维能力,开发经典实验案例提高学生学习兴趣,设计分层实验作业满足各类学生需求,研发教学辅助平台提升实验教学质量。实践表明,该方法能够帮助学生根据个性化需求主动完成学习意义构建,增强学生解决专业问题的能力,培养学生的团队合作能力。

计算思维; 程序设计; 建构主义; 教学改革; 教学辅助平台; 实验教学

0 引 言

自2006年美国卡内基·梅隆大学的Jeannette M. Wing教授提出了计算思维Computational Thinking(CT)[1]的概念后,以提高学生解决问题能力、培养学生计算思维能力为目标的非计算机专业的程序设计课程教学改革引起了国内外教育者的广泛关注[2-9]。Stephen Cooper等[2]认为程序设计课程是培养计算思维能力的重要组件,而提高解决问题能力是学习程序设计课程的核心。他们通过开展数百种专业开发培训项目(目标群体是教师和学生)并进行结果分析,推断出学习程序设计课程、利用计算机解决问题能够提高学生的自信心、创造性和独立性。Henry M. Walker[3]认为计算思维能力的培养需要包含编程模块,编程语言能够精确解决问题的优点可以帮助学生理解程序正确性、效率、分析等关键词的内涵,非计算机专业程序设计课程应该淡化语法细节,关注解决问题过程。韩建平等[4]构建一种“课内外贯穿、竞赛教学融合”程序设计教学模式,从课内基本实验、课外自主实验、训练与竞赛等引导学生提高程序设计能力,实践表明该模式能够激发学生的学习兴趣和热情。刘在英等[5]分析了程序设计课程实践教学中制约学生创新实践能力培养的多种因素,并从教学内容、教学方法、考核形式及平台建设等方面进行了相应的改革,逐步提高了程序设计课程的教学质量和学生的编程能力。

Java、C、C++、Python、C#等程序设计语言不仅是世界流行的编程语言(2017年5月TIOBE编程语言排行榜前5名)[10],也是国内外大部分高校为非计算机专业学生开设的程序设计课程。然而,由于学生基础差异大、理论和实验课时有限、实验案例与具体应用缺少关联等多种因素,程序设计课程的教学质量一直不容乐观。建构主义提倡在教师指导下的、以学习者为中心的活动,教师的主要任务是辅助学生实现有意义的学习目标[11-13]。本项目组以建构主义为指导,尝试从思维训练、案例引导、作业分层及过程监控等四个方面展开程序设计课程教学改革。

1 传统程序设计课程存在的问题

计算思维是一种科学思维,与理论思维、实验思维一起构成了人类的三大思维[14-16]。国内外传统的程序设计理论课程大多以教师讲解知识点为中心,实验作业单调统一,产生了一系列的教学问题,具体表现在以下两个方面:

(1) 思维模式的拓展培养不够深入。 程序设计课程的核心思想是打破学生固有的思维模式,引导学生理解计算思维的特征,帮助学生运用计算机高效地解决实际问题,编程语言本身只是一种载体。然而,传统的程序设计课程以教师活动为中心,以知识点讲解为主线,过于强调编程语言本身的完整性和系统性,忽略了抽象、分解、自动化等计算思维特征在教学过程中的渗透,缺少算法分析与设计过程的积极引导。经过调查发现,学生总体感觉以知识点讲解为主线的程序设计课程理论与实践脱节、语法细节过于繁琐,导致学习兴趣日益缺失。

(2) 统一设置的实验案例不够合理。长期以来,程序设计课程的实验作业大多是统一布置,较少考虑学生基础、个性化需求以及实验案例与具体应用的关系。大部分学生缺少明确的实验目标,只是被动地接受教师指令,机械地完成上机作业,学生的主体地位没有得到充分体现,动手实践能力和自主探索能力也难得到真正提高。调查结果表明,各专业学院教师对程序设计课程的教学满意度不高,主要问题在于程序设计与专业后续课程衔接比较困难,课程结束后学生不能融会贯通地使用计算机分析、解决专业问题。

2 面向计算思维能力培养的程序设计教学改革

计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为[1]。面向计算思维能力培养的程序设计课程必须合理规划教学模块和实验内容,引导学生自主学习,提高学生协作能力。建构主义认为,理想的学习环境应该包括:情境、协作、交流和意义构建[11-12]。

2.1 构建新型的课程体系

建构主义认为,在教学设计中,创建有利于学习者构建学习意义的情境是非常重要的环节[13]。计算思维的本质是抽象和自动化[1],程序设计课程是培养计算思维能力的有效载体。程序设计课程主要知识模块(面向过程和面向对象共有)包括简单数据类型、三种基本结构,复杂数据结构、函数、绘图、文件等,其中涵盖了抽象、类型、递归、转化、折衷等一系列计算思维特征。因此,重新梳理了程序设计课程的知识体系,阐明了每个知识模块需要渗入的具体特征,构建了新型的课程体系框架(见图1)。课程大纲设计着重强调知识的基础性、原理性、系统性,简化繁琐的语法细节,淡化与公共基础、专业知识案例无关的知识点,将节省出来的课时用于专业案例分析和实际问题解决。

2.2 精心设计经典实验案例、增强学生计算机应用能力

教师应当充分认识和尊重学生在课程中的思维活动和思维规律,鼓励学生进行有意义的学习而不是机械的学习[13]。为了提高学生解决实际问题的能力,在调研学生公共必修课程(如:高等数学、大学物理等)的基础上,鼓励优秀学生开发了一系列公共课经典实验案例(面向过程、面向对象两种版本),帮助学生解决平时学习过程中的实际问题,潜移默化中培养学生的计算思维能力。在此基础上,进一步激发学生解决专业问题的动力,不断提高学生抽象、分析各种问题的能力。

图1 程序设计课程思维特征

根据课程分类,已经设计完成的经典实验案例主要有:① 高等数学。包括求极限、微分、泰勒展开、不定积分以及定积分;② 线性代数。包括矩阵运算、行列式、特征值、范数、条件数;③ 数理统计。包括基本统计量计算、回归分析、聚类分析、主成分分析、数据可视化; ④ 大物实验。包括杨氏拉伸,动态杨氏,光栅衍射,密立根油滴;⑤ 实验化学。包括分光光度法测反应平衡常数、PH法测醋酸电离平衡常数;⑥ 基础化学。包括式量&配平、气体状态参数计算、溶液依数计算。

(1) 解题思路。该问题无法给出解析解,可以利用二分法进行求解

(3) 操作步骤。

步骤1:计算f(x) 在有根区间[a,b]端点处的值f(a),f(b)

步骤2:计算f(x) 在区间中点(a+b)/2的值f((a+b)/2)

步骤3:如果f((a+b)/2) 与f(a)异号,则根位于区间(a,(a+b)/2)内,此时以(a+b)/2代替b

如果f((a+b)/2) 与f(a)同号,则根位于区间((a+b)/2,b)内,此时以(a+b)/2代替a

如果f((a+b)/2) =0,输出结果

该实际问题的人工计算过程如表1所示。在解题过程中,学生发现手工计算的过程非常繁琐,精确度也不够高,通过对该问题进行抽象分析,学生发现简单数据类型可以解决数据存储问题,选择结构可以解决区间定位问题、循环结构可以解决重复计算问题。因此,学生运用计算机解决问题的主动性被大大调动起来。

表1 人工计算过程

(4) 程序方法。

#include

#include

int main()

{

float a = 1.0 , b= 1.5;

float root = 0 , tmp = 0;

float fa = 0 , f = 0;

int i = 0;

for(i = 0; i < 20; i++)

{

tmp = (a + b) / 2;

f = tmp * tmp * tmp - tmp - 1; //计算f((a+b)/2)

fa = a * a * a - a - 1; //计算f(a)

if (f == 0) break; //如果f((a+b)/2) =0,输出结果

else if (fa * f < 0) b = tmp; //如果f((a+b)/2) 与f(a)异号,此时以(a+b)/2代替b

else a = tmp; //如果f((a+b)/2) 与f(a)同号,此时以(a+b)/2代替a

}

printf("the root is %f", tmp);

return 0;

}

在该问题的分析过程中,学生既理解了计算思维的特征(抽象、转化、类型等),思维方式得到了拓展,又利用所学知识解决了实际学习问题,学生的兴趣度和成就感倍增,也愿意积极尝试解决各种专业问题。

2.3 面向对象设计递进式作业、有效实施分层分类指导

建构主义学习理论强调以学生为中心,满足学生的个性化需求[13]。国内程序设计课程一般是大学一年级下学期的必修课程,由于学生来自不同的地区,编程基础差异非常大,主要分为以下三个层次:① 零基础的学生:从未接受过编程方面的任何知识和训练。② 少量基础学生:初高中部分或系统学习过一门编程语言。③ 基础扎实学生:参加过计算机大赛或具有一定项目经验。

在学习过程中,我们鼓励2~3名学生进行合作,综合多道作业完成一套系统的研发,例如3名同学将高等数学、线性代数、数学绘图、科学计算等作业进行结合,开发出了一套数学辅助计算系统。此外,为了提高学生学习的主动性,在辅助教学平台上设置了刷题排行榜(题目由包含重要知识点的客观题以及和实际生活相关的主观题组成,系统自动评测并公布一、二、三等奖),督促学生主动掌握重要知识点和提高分析问题的能力。

2.4 充分利用教学辅助平台、提升实验过程自动监控

建构主义认为,学习者与周围环境的交互对学习内容的理解起着非常关键的作用[13]。为了方便实验教学管理和推动学生协作学习,基于Python开发了一套电脑、手机同步的“π课堂”教学辅助平台,该系统主要包括以下功能:① 碎片时间学习。学生可以根据自己的基础随时在平台上选择实验题目,通过手机或电脑完成不同层次的作业,对自己的学习情况进行有效评估,并获得相应的分数;② 成绩随时查询。学生可以通过系统随时查看自己的平时分数(各项作业分数、主客观题练习分数),督促学生及时调整学习节奏和努力方向;③ 图表自动分析。通过对学生实验答题情况、集中错误的图表自动分析,帮助老师对整个班级和特定学生的情况进行充分了解,从而及时调整课程进度;④ 消息及时推送。通过手机、网页、邮箱实现消息同步推送,及时实现教师和整个班级、个别学生之间关于实验问题的良好互动,同时帮助学生实现大作业设计的互相协作。

3 教改效果分析

建构主义强调学习的目的是通过学习者的主动追求完成意义构建[13],学生计算思维能力的提高和解决各种问题能力的增强是程序设计课程改革的目标所在。在3年的程序设计课程改革中,除了精化教学内容强调思维能力培养、开发经典实验案例提高解决问题能力提高外,还积极鼓励同专业学生自由组队、自主选题,通过沟通和协作解决专业学习中的各种问题,设计并完成与专业结合的课程设计大作业,不断提高综合分析能力。如化工学院的学生用C语言进行卧式储罐计量计算、材料学院的学生用C语言解决物体物理性质的计算、生工学院的学生用Python语言进行DNA序列查询、信息学院的学生用Python语言解决电路输入输出问题、化学学院学生用C#语言实现实验数据拟合等等,大幅提高了教学质量。在此基础上,将课程大作业与计算机创新实践基地紧密结合起来,选拔有潜力的大作业进入创新基地继续研发,指导学生参加各级大学生创新活动,并积极推荐参加上海市、全国各级计算机大赛(近3年我校学生在国家级、上海市级比赛中获得了30多个奖项)。值得一提的是,在推进公共课案例整合和专业系统开发方面也取得了优异的成绩:理学院同学开发的“基于 Python 的辅助计算系统”获得了2015年中国大学生计算机设计大赛全国一等奖,化学学院同学开发的“Chembook化学助手”获得了2016年中国大学生计算机设计大赛全国一等奖。

4 结 语

以计算思维能力培养为目标,团队在建构主义指导下围绕优化课程设计、开发经典案例、设计分层作业、监督实验过程等方面展开了程序设计课程改革,帮助非计算机专业学生创建学习情景,鼓励学生主动学习,满足学生个性化需求,增强学生沟通与协作,取得了良好的改革效果,不仅引导学生运用计算机解决了实际问题,还通过各类竞赛拓展了学生的团队协作能力和创新实践能力。下一步的工作是继续引导学生在程序设计课程中主动追求有意义的学习,努力解决各类专业问题,通过程序设计课程建立通识教育与专业教育的桥梁。

[1] Jeannette M. Wing. Computational Thinking [J]. Communication of the ACM,2006,49(3):33-35.

[2] Stephen Cooper,Wanda Dann. Programming:A Key Component of Computational Thinking in CS Courses for Non-Majors[J]. ACM Inroads,2015,6(1):50-54.

[3] Henry M. Walker. Computational Thinking in a Non-Majors CS Course Requires a Programming Component[J]. ACM Inroads,2015,6(1):58-61.

[4] 韩建平,刘春英,胡维华.“课内外贯穿, 竞赛教学融合” 的程序设计教学模式[J]. 实验室研究与探索,2014,33(6):169-171,176.

[5] 刘在英,杨 平,张丽晓.程序设计课程实践教学模式的探讨[J].实验室研究与探索,2013, 32(10):156-159.

[6] 汪红兵,姚 琳,武航星,等. C 语言程序设计课程中的计算思维探析[J].中国大学教学,2014(9):59-62.

[7] 刘光蓉. 融入计算思维的C语言实验教学设计[J].实验室研究与探索,2015,34(10):81-83,103.

[8] 何文广,周 珂,熊刚强.程序设计课程实验教学改革与实践[J].实验室研究与探索,2016, 35(6):163-165,169.

[9] 黄 云,洪佳明,覃遵跃,等. 基于云平台的“程序设计基础”课程实验教学改革[J].实验室研究与探索,2016,35(2):191-195,223.

[10] TIOBE Index for May 2017. https://www.tiobe.com/tiobe-index/,2017-5-28.

[11] Thomas M. Duffy,David H. Jonassen. Constructivism and the Technology of Instruction: A Conversation [M]. Hillsdale NJ: Lawrence Erlbaum Associates,1992.

[12] Kathryn Alesandrini,Linda Larson. Teachers Bridge to Constructivism [J]. The Clearing House, 2002,75(3):118-121.

[13] 衷克定.论大学计算机课程计算思维能力培养的人本位回归[J].中国大学教学,2015(7):51-55, 84.

[14] 陈国良,董荣胜.计算思维与大学计算机基础教育[J].中国大学教学,2011(1):9-13,34.

[15] 李 廉.计算思维——概念与挑战[J] .中国大学教学,2012(1):7-12.

[16] 姚天昉. 在程序设计课程中引入“计算思维”的实践[J] .中国大学教学,2012(2):61-62,76.

Exploration on Ability Cultivation of Computational Thinking Based on Programming Course Reform

WEN Xinxiu1a, GU Chunhua2, WANG Jiahui1b, YANG Zeping1a, WANG Zhanquan1a

(1a. School of Information Science and Engineering; 1b. School of Science, East China University of Science and Technology, Shanghai 200237, China; 2. School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)

Taking ability cultivation of computational thinking as the breakthrough point, programming course has reformed by changing teaching ideas and methods. Constructivism can help students to construct contexts of study, encourage them to set up learning objectives and stimulate them to work on collaborative learning. The programming course reform is implemented from the following four aspects: enhancing students’ abilities of thinking by merging computational thinking characteristics into teaching process, attracting students’ interests by developing classical experimental examples, meeting multi-level students’ demands by designing layered lab assignments and improving qualities of experimental teaching by developing teaching-aided platform. The results show that, the method can help students finish construction of study meaning based on their individual requests, enhance their abilities of analyzing and solving professional problems and cultivate their abilities of team cooperation.

computational thinking; programming; constructivism; teaching reform; teaching-aided platform; experimental teaching

2016-12-18

2016年Google支持教育部产学合作育人项目专业综合改革项目、全国高校计算机基础教育研究会教学改革课题(2016061)

文欣秀(1975-),女,河南新乡人,博士,讲师,研究方向:软件工程、形式化方法、计算机教育。

Tel.:13361876389; E-mail:wenxinxiu@ecust.edu.cn

TP 341; G 642.0

A

1006-7167(2017)08-0207-04

猜你喜欢

程序设计建构主义思维能力
基于建构主义理论的计算机教育
培养思维能力
基于Visual Studio Code的C语言程序设计实践教学探索
旁批:建构主义视域下的语文助读抓手——以统编初中教材为例
培养思维能力
从细节入手,谈PLC程序设计技巧
借鉴建构主义思想培养财会专业人才
高职高专院校C语言程序设计教学改革探索
PLC梯形图程序设计技巧及应用
建构主义视角下的翻译标准