APP下载

面向新工科的Python程序设计交叉融合案例教学

2017-09-01赵广辉

计算机教育 2017年8期
关键词:程序设计新工科

赵广辉

摘 要:针对高校工科专业程序设计课程教学的现状和存在的问题,依据新工科建设中工程专业对程序设计等信息技术的需求,探索以计算思维为核心、以利用信息技术进行复杂专业问题求解能力培养为导向的思路,构建依托MOOC资源、以学科交叉融合案例研讨为主的教学模式,提升教学效果,为解决复杂专业问题提供信息技术支撑。

关键词:新工科;Python;交叉融合;程序设计

0 引 言

目前,我国高校工科专业均为本科学生开设一门程序设计课程,主要讲授C语言,少量Visual Basic和Fortran语言。非计算机专业的程序设计课程定位是通识教育,对不同学科、不同基础的学生采用相同或相近的教学大纲和基本相同的教学模式。教学目标侧重于程序设计的基本知识和方法,未能很好地将程序设计方法与专业问题求解结合起来,课程定位与专业需求不匹配。学生不知道如何利用程序设计解决专业问题,学习目的不明确,学习动力不足。

工程教育专业认证标准中要求学生具备能够应用信息技术对复杂工程问题进行预测、模拟和求解的能力[1];要求计算机类课程内容能够对专业问题求解提供一种信息技术的支撑,使学生能够具备运用信息技术解决复杂专业问题的能力,而这个能力目前未能明确体现在程序设计课程大纲中,在教学过程中经常被忽视。这种支撑作用的缺失可能会导致非计算机专业开设程序设计课程的必要性被质疑。

1 新工科建设对信息技术的要求

我国拥有世界上最大规模的工程教育。2016年,工科本科在校生538万人,毕业生123万人,专业布点17 037个,工科在校生约占高等教育在校生总数的1/3。然而,我国工科人才培养的目标定位不清晰,工科教学理科化,对于通识教育与工程教育、实践教育与实验教学之间的关系和区别存在模糊认识,工程教育与行业企业实际脱节太大,工科学生存在综合素质与知识结构方面的缺陷 [2]。前不久,教育部提出新工科的概念,新工科是有别于传统工科的学科交叉产物,强调以信息化带动工业化。相对于传统的工科人才,未来新兴产业和新经济需要的是工程实践能力强、创新能力强、具备国际竞争力的高素质复合型“新工科”人才[3]。他们不仅在某一学科专业上学业精深,还应具有“学科交叉融合”的特征;不仅能运用所掌握的知识解决现有的问题,还有能力学习新知识、新技术以解决未来发展出现的问题,对未来技术和产业起到引领作用。

以“AlphaGo”为标志,人工智能进入2.0时代,智能制造是“中国制造2025”的主要方向,物联网、大数据、云计算、人工智能、脑认知、芯片等新概念层出不穷,创新业态催生大学教育转型,传统的理科和工科已不足以应对时代变革,需要重构一些核心知识,原来的老知识要升级换代[4]。在这个建设过程中,需要大量以程序设计为核心的信息技术对各专业提供支撑,需要构建全新的、适应新工科建设的程序设计教学体系。

2 Python程序设计语言

20年前,曾经广泛应用于工科程序设计教学的Pascal、BASIC逐渐被C语言取代,但从解决计算问题角度看,C语言过分强调语法和性能,语法复杂,入门困难,并不适合非计算机专业学生解决一般工程和科学问题。从Tiobe统计数据看(表1),C 语言自 2005 年以来总体呈现下降趋势,2015年后急剧下跌至 7% ,并且没有回升的势头。C语言的进化很缓慢,疲势尽显,很多学校和老师都在寻求一种更适合用于非计算机专业学生的程序设计教学语言。

传统程序设计教学侧重于语法、算法等基础知识的讲授,重知识、轻能力。在这个技术更新异常迅猛的信息化时代,这种模式已经无法跟上时代的节奏。《斯坦福大学2025计划》提出轴翻转的概念,将“先知识后能力”反转为“先能力后知识”,能力成为大学生本科学习的基础[4]。新工科是一个动态的、相对的概念,不断地推陈出新,因此需要一门以能力培养为导向、可快速掌握、快速解决问题的程序设计语言。

Python是一种面向对象的解释型计算机程序设计语言,作为适应新技术时代的轻语法程序设计语言,具有简洁性、易读性和可扩展性的特点,可以让我们把更多的精力投入到应用与问题求解上,极大地降低学习难度、简化开发复杂度和实现快速开发,非常适合工科学生学习。Python语言被广泛用于科学计算、数据处理、可视化、图像处理、网站运维、自然语言处理、Web开发、机器学习、大数据、数据挖掘、人工智能等领域。目前国际上排名前100的高校中80%都在开设Python程序设计,国内众多高校在正在构建基于Python的程序設计教学体系,Python逐渐成为学习程序设计的第一选择[5]。

3 Python程序设计教学

3.1 建设通专融合的程序设计教学模式

由于各学科、各专业对程序设计的需求不同,有些专业关注科学计算,有些专业关注数据处理,有些专业关注通讯与控制。面对不同的需求,如果还是单纯地将程序设计课程定位于通识课程,只讲授编程基础知识是不能满足实际需求的;可将专业需求凝练成案例、作业和练习题,将通识教育与专业需求有机结合在一起,实现从程序设计知识教学到程序设计能力培养的升华,达到培养具备利用程序设计技术解决复杂工程问题能力的卓越工程师的目的。

计算思维在复杂专业问题求解方面的落脚点是程序设计。随着信息技术和智能技术的飞速发展,程序设计在工程科学领域变得越来越重要。对学生来说,程序设计课程作为通往计算世界的大门起着极其重要的作用,利用Python替代C语言程序设计,构建全新的教学体系和教学模式,将极大地提升学生学习编程的兴趣,提高程序设计课程的教学效果。

Python完全不同于C语言程序设计,其语法简单,入门容易。教学过程中可轻语法、重实践,加强实际问题求解能力的培养,弱化实验报告等形式性内容,适当增加实践学时和实践训练量,从而达到让学生具备应用程序设计技术解决专业问题的能力的目的。

3.2 基于MOOC开展学科交叉融合式案例教学

目前普遍存在的一个问题是承担非计算机专业程序设计课程教学时,教师不关注学生有哪些专业问题需要用程序求解,不按培养程序员的模式组织教学,轻能力培养,重语法和程序性能,教学案例多半是简单数学问题求解和经典算法的程序实现。这些教学案例与学生专业问题相去甚远,学生无法将这些案例与自己的专业问题关联起来,学习目标不明确,学习动力不足,这是目前非计算机专业程序设计课程教学效果普遍不好的一个主要原因。

随着MOOC等在线教育模式的兴起,教师已经不再是知识的唯一载体,学生可以随时随地从网络获取到各种所需的知识。依托MOOC资源,实行MOOC+SPOC的教学将是未来一段时间的主流教学模式。在这种教学模式下,学生可以通过MOOC获取语法等基础知识,教师从基础知识教学中解放出来,深入所授课专业调研、分析、抽取问题、构建数学模型并设计与专业相关案例用于教学,用这些案例搭建程序设计与专业问题之间的桥梁,使理论知识与应用实践相结合。学生明确了学习目的,自然会提升学习兴趣,学以致用,用以促学,从而达到提升利用程序设计方法解决复杂专业工程问题的能力。

笔者在给材料专业学生授课的过程中,通过调研专业需求,设计了一些与专业相关的案例用于教学,取得了较好的效果,如用材料专业学生工作中经常用到的X射线衍射图谱绘制(图1(a)),把分散在各章的文件操作、文件遍历、二维数据的格式化和处理、列表类型的操作、函数的调用、绘图(数据源、线型、颜色、粗细、标注)等知识点连成线、串成串,用18行代码完成X射线衍射图谱绘制,实现从知识到能力的升华。对这个实例的代码进行少量修改,便可以实现态密度(图1(b)、1(c))、能带(图1(d)) 等类似数据的可视化。通过这一系列的训练,学生可以扎实地掌握数据可视化相关的知识,熟练运用这些知识解决类似的专业问题,从而实现将能力培养落到实处的目的。

程序清单如下:

import pylab

def loadData(flieName):

inFile = open(flieName, 'r')

x = []

y = []

for line in inFile:

trainingSet = line.split(‘ \t ')

X.append(trainingSet[0])

y.append(trainingSet[1])

return (x, y)

def plotData(x, y):

pylab.figure(1)

pylab.plot(x, y, linestyle=‘-, color=‘red , linewidth=1)

pylab.xlabel('Angle')

pylab.ylabel('Intensity')

pylab.show()

(x, y) = loadData(‘XRD.txt

plotData(x, y)

改進这个案例,通过引入pandas库,利用pandas库强大的数据处理能力对代码进行优化,可使程序代码从18行减少到5行,引导学生学习利用pandas库进行数据分析,掌握对不同格式数据源进行操作的方法。第三方库的引入可以极大地简化问题求解和学生学习的难度,培养和引导学生尽可能利用第三方库进行编程,用最简单的方法快速解决问题。

from pandas import Series

from matplotlib import pyplot

series = Series.from_csv('XRD.csv', header=0)

series.plot()

pyplot.show()

教师也可在作业和实验的设计中融入一些专业相关问题,如将实验数据处理、材料计算结果可视化和同期开课的物理化学课程热力学过程中的恒温可逆过程、反抗恒外压过程、绝热不可逆过程、绝热可逆过程的计算等问题作为案例,既能锻炼学生综合运用所学知识解决实际问题的能力,又可以较好地培养学生的学习兴趣。

程序设计是实践性很强的一门学科,编程能力不是仅靠教学就可以获取的,需要学习者通过大量的实践与应用逐渐培养。在这个信息智能时代,新工科人才应具有的学科交叉融合特征中最重要的就是融合专业知识与信息技术,利用信息技术进行创造性、主动性工作。程序设计正处于这个行业和时代的执行层中心,学科交叉融合案例教学模式将会极大地提升学生利用信息技术解决专业问题的能力。

学科交叉融合式案例教学的难点在于专业需求的获取和问题的抽象,这也是很多授课教师的困惑所在。很多教师认为自己的职责在于程序设计知识的传授,完成知识传授就完成了教学任务,学生专业需求与己无关,但是离开了应用,程序设计知识便成了无根之水、无本之木,纯粹的知识点和算法教学很难唤起学生的学习兴趣,必将严重影响教学效果。学生专业需求的获取并不需要任课教师一定具备相关专业的知识背景,也不需要教师知道问题求解的机理,只需要其找到专业问题及其数学解法,便可以迅速设计对应的程序设计案例,并不会给自己带来较大的压力。

3.3 Python专业生态圈

Python有一个很不错的生态圈,全世界的程序员都可以编写模块并共享,其强大的标准库奠定了Python发展的基石,丰富的第三方库是Python不断发展的保证,一些稳定的第三方库也会被加入到标准库里。目前,第三方库已经接近11万个,其中科学与工程类有7 000余个。Python语言众多的扩展库构成的开发环境十分适合工程技术、科研人员处理实验数据和制作图表,甚至开发科学计算应用程序,如NumPy、SciPy、matplotlib等十分经典的科学计算扩展库分别提供了快速数组处理、数值运算以及绘图功能。除此之外,每个专业领域都积累了大量功能强大的第三方,每个专业领域的第三方库构成了这个专业的Python生态圈,如材料科学领域有PyMatGen、VASPy、QuTiP、ChemTools、PyMKS等被广泛应用的第三方库;借助这些库,可以仅用少量代码甚至只调用函数就可以完成一些数据处理、可视化等复杂操作。通过第三方库中方法的调用,每条语句就可以实现数据的一类可视化,如图2所示,不仅可以极大地提高开发效率,而且能大大降低开发难度,使用户在掌握程序设计基础知识的情况下就可以解决复杂专业问题。

from vaspy.electro import ElfCar

elfcar = ElfCar(ELFCAR)

elfcar.plot_contour()

elfcar.plot_mcontour()

elfcar.plot_contour3d()

隨着可用的专业第三方库数量的增加,Python求解专业问题将会变得越来越简单,这将在根本上提升课程的教学效果,使学生在较短时间内具备解决复杂专业问题的能力。这个专业的生态圈需要每一位任课教师发掘扩大,在教学过程中,师生可以积极参与专业生态圈的建设,通过共建共享快速构建起各专业的Python生态圈,对于教学和科研都会起到很好的促进作用。笔者在授课过程中,尝试引导学生开发一个材料计算可视化的数据处理包和一个物理化学工具包,虽然都还是雏形,但是在提升学习兴趣、实践能力和创新能力方面的效果还是非常不错的。

4 结 语

随着智能时代的到来和新工科建设的兴起,程序设计教学面临着广阔的发展机遇,将担负起培养作为科学思维三大支柱之一的计算思维能力的主要任务,并为计算机学科与其他学科的交叉融合做好必要的知识和应用能力储备。用Python替代C语言作为教学语言可以将学生从复杂的语法中解脱出来,并集中精力于问题分析和求解。与专业融合的案例教学可以使学生明确学习程序设计的目的,培养学习兴趣。把解决实际工作中的具体任务作为学习的最终目标,可以增强学习动机和欲望。知识的真正价值在于实践,学习的根本目的在于运用。以能力培养为导向,把知识融于实践,再根据实践中遇到的问题来学习新知识进行求解,这样相互促进以积累实践经验并提升应用能力。从知识与实践相结合中不断发现新问题和解决新问题,才能使学生真正掌握程序设计技术。

工科专业程序设计教学在通识教育框架下应该考虑到各专业学生的知识结构和能力要求,系统、科学地设计教学案例,实施个性化教学,培养学生的复杂问题求解能力,为新工科建设和工程教育专业认证提供更好的信息技术支撑。

参考文献:

[1] 中国工程教育专业认证标准(2015版)[S]. 北京: 中国工程教育专业认证协会, 2015.

[2] 吴爱华, 侯永峰, 杨秋波, 等. 加快发展和建设新工科, 主动适应和引领新经济[J]. 高等工程教育研究, 2017(1): 1-9.

[3] 刘学东. 新思维, 新课程: 斯坦福大学通识教育改革[J]. 清华大学教育研究, 2014(5): 96-102.

[4] 王佳, 翁默斯, 吕旭峰. 斯坦福大学2025计划: 创业教育新图景[J]. 世界教育信息, 2016(10): 23-26.

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

(编辑:宋文婷)

猜你喜欢

程序设计新工科
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
“新工科”建设的五个突破与初步探索
新工科形势下高校二级学院毕业设计管理探索
新工科背景下大学生创新创业教育探索