朱雄泳 张菲菲 陈忆群 陈国明 周如旗
摘要:传统《Python程序设计》课程教学无法满足新工科的建设要求,针对计算机专业学生,以简单的猜数字游戏项目开始,不断提出新问题,融入Python编程知识点,引导学生解决新问题完善该项目的同时,快速培养学生的计算思维能力。然后引导学生构建一个面向领域的搜索引擎项目,培养学生的综合项目应用能力,并在教学中融入课程思政,以真实案例对学生进行思想教育。同时,利用校企合作的平台,引入企业实际项目,锻炼学生的理论与实践相结合的能力。实践表明所提出的教学模式有效,学生能得到全面地提高。
关键词: 新工科;Python教学; 项目驱动;课程思政; 实践教学
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2020)24-0131-03
Abstract:The traditional teaching method of Python programing cannot satisfy the requirement the development of emerging engineering. Therefore, let computer major students start with the construction of simple guess number game project, and constantly put forward new problems integrated with Python programming knowledge, guide the students to solve them and improve the project. It will be training the students computational thinking ability quickly. Then lead students to complement a field-oriented search engine project that can foster students comprehensive project application ability. Also, the courses for ideological and political education will be applied for students with real cases. Meanwhile, it introduces the real projects of enterprises to exercise the students ability of combining the theory with practice by the platform of the school-enterprise cooperation.
Key words:emerging engineering; python teaching; project driven; courses for ideological and political education;practice teaching
2017年教育部發布《关于开展新工科研究与实践的通知》等文,全力推动现代工科领域的新定义、新认识、新工程范式、新工科教育、新工科的研究与创新、新工程实践等多个方面的建设[1]。由于Python语言拥有庞大的生态系统,在数据分析、大数据处理、机器学习、人工智能、网络编程等领域中得到广泛的应用[2],使得《Python程序设计》成为新工科人才计算机能力培养的重要课程。
然而,对于计算机相关本科专业而言,程序设计仍然以C/C++、Java语言为主,而将《Python程序设计》教学重点放在了相应的理论教学上,缺乏对应用能力的培养,难以培养出较高水平的专业人才。为此,本文针对新工科对人才培养的需求,结合我校的《Python程序设计》课程教学,以及面向广东省中小学信息技术教师的Python编程培训经验,对该门课程进行改革的探索,融合课程思政,注重培养学生计算思维,以及项目的应用能力。
1改革程序设计教学方式培养综合应用能力
“新工科”建设要求从学生专业需求的角度出发,培养学生的计算思维与解决实际问题的能力,这是传统的知识点讲解并辅以实验例证的模式的不足之处,故需改变思路,不断探索新的教学模式。
1.1 快速熟悉规则让Python编程事半功倍
对学习过C/C++等编程语言的计算机相关专业本科学生,再讲解Python语言的基本语法等理论,将会显得相对枯燥无味。实际上,Python的语法相对简单,且学生已有一定的编程基础,不建议采用先讲解语法规则后做实验的传统授课方式,而应该将所有知识点融入项目实践当中。
因此,可在指导学生安装部署开发环境后,即让学生掌握以终端、集成开发工具两种开发模式练习“Hello World”例程,而展开语法规则的学习,并简单介绍Python与C/C++等语言在变量、逻辑语法、数据结构等方面的异同比较,令学生能快速上手,从而展开计算思维的培养与项目应用能力的培养。
1.2 以解决问题为导向培养计算思维
大学应该讲授计算思维已经得到了普遍认同[3],对于具有一定编程基础的学生来说,我们可以从最简单的猜数字游戏为例,不断提出新问题,将知识点融入新问题中,引导学生解决。要求每次解决问题时必须先绘制流程图后编写代码,从而利用有限的学时,培养学生解决实际问题的能力,锻炼计算思维,并能迅速掌握各知识点。
问题1:计算机先取一个1-100的整数,玩家猜中则通关,否则提示两个数字的比较结果并继续猜,限制10次机会,如何编程实现?怎么猜数字最快?
由于规则比较简单,学生也具备了一定的编程基础,很快就能编写好程序代码,将能更熟练运用已学过的三种程序逻辑结构,从中了解Python语言部分内建API函数的使用方法,并令学生更深入理解折半查找法及其应用。
问题2:计算机所取的数字是个固定值,写死在程序代码中,每次重新玩游戏猜的都是同一个数字,用户很快就失去了玩该游戏的乐趣,该怎么解决?
可引导学生采用random类库模块生成随机数解决该问题,进而可让学生了解Python面向各种领域的常用类库,但不需要刻意的记忆。
问题3:如何实现玩家无须重启程序,即可重复玩游戏?
该问题可引导学生将程序的固定循环结构改为条件循环结构,添加退出游戏的操作,并进一步以函数封装猜数字游戏、退出操作以简化主程序代码,从而了解Python语言函数之间传递参数的方法。还可以引导学生改用函数式编程方法简化代码,体会更接近数学计算的编程思想。
问题4:如果函数太多,该如何处理?
该问题可引导学生采用文件的形式来存放不同的函数模块,从而提高代码的可重用性,更深入理解库函数、文件的作用。
问题5:除了可以采用文件形式存放函数之外,还能不能更进一步封装?
该问题将引导学生将猜数字游戏的数据及对数据操作的方法,用类封装起来,培养学生从具体到抽象的思维能力,并加深面向对象编程的理解。
问题6:在基于字符的用户界面玩猜数字游戏的体验太差了,能不能改用更先进的图形用户界面?
该问题的解决,将引导学生学会从众多的Python图形用户界面框架中选型,学会设计猜数字游戏的图形用户界面,并学会图形用户界面的事件驱动的开发方式,重构整个猜数字游戏的工程代码。
以问题的不断演化为导向,引导学生深入思考,从而解决问题的方法贯穿面向过程、面向函数、面向对象的编程思想,在培养学生解决问题能力,快速培养学生的计算思维的同时,加深对编程思想的理解,激发学生的学习兴趣,为培养学生的项目应用能力打下坚实的基础。
1.3 以完整项目驱动培养应用能力
结合“新工科”建设要求,探索工程实践项目驱动的Python课程教学改革[4],可让学生通过构建一个面向领域(比如学校图书馆的书籍信息)的搜索引擎项目,所涉及的专业问题并不需要过于复杂的算法,又可将Python在人工智能、网络编程、数据库等领域的应用,融合本科专业中各门基础课程,令其成为一个有机整体,培养学生工程实践能力。项目要求指导学生展开调研,了解搜索引擎的种类、原理,学会将项目分解成多个小的功能模块,包括爬取数据、存取数据、分词、Web开发等。
其中,爬取数据实际上就是模拟浏览器获取到网页文件并提取文件中的信息。不建议在课程教学中使用Scrapy等爬虫框架,由于课时有限,而且爬虫框架复杂,对理解爬虫原理的帮助并不大。此时可建议学生使用requests库,模拟浏览器请求网页,并学会伪装UA(User-Agent)破解服务器的检验请求。还需要告诫学生,绝不可开启太多线程爬取同一个网站,导致服务器压力过大,网页响应速度变慢,引起运营商的诉讼。
爬取到网页文件后,要先观察分析所需提取信息在网页代码中的特征,然后引导学生采用BeautifulSoup类库查找到所需字符串信息,并编写正则表达式对字符串信息进行关键词分词提取,从而加深学生对Python类库的熟悉,以及学会正则表达式在文本编辑与处理、网页爬虫等应用场景的重要应用。
然而,正则表达式以及传统方法对字符串特别是中文的分词,并不智能,很多时候会发生错误。于是便可引入Jieba与SnowNLP这两个中文文本分析工具库,让学生体会智能中英文分词,它们都是国内优秀的中文分词第三方库,可激发学生的民族自豪感与爱国热情。同时,这些库使用到了机器学习的相关知识,可以引导学生将《概论论与数理统计》等数学基础课程与计算机专业应用关联起来,不再觉得数学无用,并可激起学生对后面的人工智能、大數据等课程的学习兴趣。
提取的关键词数据,可以存放在文件中,也可以存放在数据库中。若存放于文件,可以Excel格式存放,而操作Excel文件的类库比较多,又可引导学生从支持的平台、操作、用时等参数学会对类库的筛选,培养学生分析问题的能力。提取的关键词数据也可以存放于Python语言内嵌的SQLite3数据库中,从而将Python语言与数据库知识结合起来,加深学生对数据库的理解。
而搜索引擎的字符串输入与检索结果的显示,涉及Web网络编程的知识。由于本项目页面较少且简单,故可以选择容易上手的Django框架,提高Web开发的效率。这就需要学生掌握安装Django库、创建工程、Web应用与启动服务器的方法,了解生成的Web文件的作用并能根据需要进行修改,学会Django操作数据库、编写业务逻辑、整合HTML页面等方法,并掌握各种测试工具的使用方法,最终构建出面向某个特定领域的搜索引擎。
通过完整项目的锻炼后,可以培养出学生的综合应用能力,从而为学生解决实际生活中待解决的问题,完成相关项目软件作品,参加各类创新设计大赛打下坚实的基础。
2融入课程思政实现立德树人
习近平总书记在全国高校思想政治工作会议上强调,要坚持把立德树人作为中心环节,把思想政治工作贯穿教育教学全过程,实现全程育人、全方位育人,努力开创我国高等教育事业发展新局面[5]。而新工科是基于国家战略发展新需求,国际竞争新形势,立德树人的新要求而提出的我国工程教育改革方向[6]。由于Python语言通过开源模式,构建了庞大的生态系统,从数据分析、大数据处理、机器学习、网络编程等领域均有广泛的应用[7],因此,需要在《Python程序设计》中融入课程思政,提高学生的综合能力,得到全面发展。在掌握专业知识的同时,要让学生明白计算机编程技术犯罪会给人们工作、学习、生活带来的巨大经济损失,要培养积极向上的爱国热情[8]。为此,在教学过程中,可以采取以下3个案例,对学生进行思想教育。
2.1 避免技术被利用作恶
2007年,王某开发了一款基于P2P技术的视频播放软件,并创立了公司。截至2012年9月,该播放软件总安装量已超过3亿,而同年6月的中国网民数量为5.38亿。该软件为普通用户提供了一个解码功能强大、播放流畅的播放器,也提供了一套便利的视频网站“建站工具”,使普通用户可以通过该播放器直接点播观看站长上传的视频资源,王某的公司从中获利。由于在众多个人视频网站中,存在大量视频资源没有版权或属于淫秽色情内容,以至于盗版和色情成了该公司如影随形的两大阴影。
2014年8月,王某被依法抓捕归案后,以“技术中立原则”作为辩护理由,但法院判决认为其不能适用,因为“技术中立原则”不能滥用来掩盖违法犯罪行为[9]。
因此,青年学生掌握了技术,应该用它为社会做贡献,而不能利用它违法牟利,否则将会受到法律的制裁。
2.2用户隐私不可侵犯
在大数据时代,网络爬虫成了获取数据资源的重要手段,而Python下的Scrapy等网络爬虫框架使得程序员非常方便从数据网站、手机App等应用中收集数据,这就很容易会带来诸多法律的风险。
2015年,武汉某公司恶意爬取深圳谷米公司的公交数据,用于自家软件运营。2018年,该公司程序员邵某等5人被深圳市南山区人民法院判决认定,构成非法获取计算机信息系统数据罪,成为商业化利用爬虫爬取企业数据的刑法适用的第一案[10]。而另一家科技公司则非法利用爬虫技术窃取用户隐私信息,整合了多达2.2亿份简历、100亿个用户识别ID组合与1000亿多用户综合数据,绘制出涉及中国8亿人口的多维数据,并从中牟利。最终,公司被查封,集体被抓。
技术本身虽不违法,但涉及入侵到别人系统去获取数据,则必然存在法律风险。
2.3 科技不再无国界
在3GPP(The 3rd Generation Partnership Project)于2016年召开的5G通信标准技术会议中,作为中国企业的某集团及其旗下的子公司对华为的Polar码方案投了反对票,后来华为痛失数据信道编码标准的话语权。该集团总裁宣称“技术无国界”,并打响题为“荣誉保卫战”的舆论战[11]。
然而,继2018年4月美国制裁我国某大型通信企业并尝到甜头后,2018年12月,华为任正非的女儿孟晚舟在加拿大被捕,案件至今未完结。紧接着,2019年5月16日,美国将华为列入实体清单,在未获得美国商务部许可的情况下,美国企业将无法向华为供应产品。时隔一年,美国再次升级对华为的制裁,要求使用美国芯片技术与设备的外国公司,要先获得美国的许可,才能将芯片供应给华为及其关联的企业。
美国随意制裁中国科技公司的霸权主义表明,科技不仅有国界,还是制裁的重要手段。但反而激发了广大青年学生的爱国热情,积极学习知识,为我国的科技发展贡献自己的力量。
信息技术双刃剑的效应可以教育计算机专业的学生在认真学习专业技术的同时,还要了解相关的法律法规,遵守职业伦理和规范的要求,更要激发学生为国家和民族富强贡献力量的信念。
3校企合作优化教学效果
由于本系软件工程专业近年设置了大数据课程群,并于2020年增设“数据科学与大数据技术专业”,其先行课程均为《Python程序设计》。通过对该课程的学习,学生已经具备了一定的计算思维以及项目应用能力。
因此,于2020年4月份,计算机科学系与广州泰迪科技有限公司合作组建了广东第二师范学院与泰迪智能双创工作室,推荐学有余力的学生加入工作室,形成年级梯队,利用泰迪公司的云课堂平台,由泰迪公司的资深工程师,使用录播+直播+微信群答疑等方式,带领学生展开大数据应用的项目开发。学生参与的项目包括:二手车交易数据爬取、基于图像深度学习的岩样智能识别等。通过企业实际项目的训练,课堂教学与实践充分结合,进一步激发学习兴趣,为学生参加计算机作品设计比赛、将知识融入具体的应用场景以解决实际问题,有助于学生更好地适应未来行业的新发展。
4结束语
本文对计算机专业《Python程序设计》传统课程教学不能适应新工科建设要求,解放思想,从实际情况出发,以问题为导向,将知识点融入解题中,培养学生计算思维能力;以完整项目,培养学生项目应用能力。同时,融入课程思政,展开对学生的思想政治教育,培养其良好的职业素养以及爱国热情。利用校企合作平台对学有余力的优秀学生做进一步的企業实际项目训练,令其更好适应未来的行业发展。实践结果表明,提出的教学改革模式能较大程度上激发学生的学习热情,得到较为全面发展,真正实现以学生为主体的Python程序设计课程教学。下一步目标将探索Python与《高等数学》《离散数学》《数字图像处理》等课程结合,提高学生的学术研究能力。
参考文献:
[1] 顾佩华. 新工科与新范式:概念、框架和实施路径[J]. 高等工程教育研究, 2017(6):1-13.
[2] 嵩天,黄天羽,礼欣.Python语言:程序设计课程教学改革的理想选择[J].中国大学教学, 2016(2): 42-47.
[3] 孟凡芳.基于计算思维的Python程序设计语言教学改革[J]. 计算机产品与流通, 2020(2): 215.
[4] 文欣秀等.工程实践项目驱动的Python课程教学改革探索[J]. 计算机教育, 2019 (9): 134-137.
[5] 习近平.把思想政治工作贯穿教育教学全过程, 开创我国高等教育事业发展新局面[N]. 人民日报, 2016.12.09(1).
[6] 钟登华. 新工科建设的内涵与行动[J]. 高等工程教育研究, 2017 (3): 1-6
[7] 王德志.基于Python语言构建面向“新工科”的计算机课程体系研究[J]. 工业和信息化教育, 2020 (5): 29-33.
[8] 章英,汪毅,陈仲民.程序设计类课程“课程思政”教学探索与实践[J]. 教育教学论坛, 2020(3): 157-158.
[9] 曹宇,袁力.由“快播案”谈网络犯罪案件审批中“技术中立原则”的适用[J]. 经济研究导刊, 2020, 423 (1): 195-197.
[10] 许娟.利用爬虫技术侵犯企业数据知识产权法益的司法解释[J]. 苏州大学学报(哲学社会科学版), 2020, (1):47-58.
[11] 王琴,欧阳果华.理解技术民族主义:集体记忆、身份认可与国际竞争——基于联想5G投票事件的观察[J]. 西北民族大学学报(哲学社会科学版), 2020 (3): 59-67.