上周略读了一本github上的开源书籍《Teaching and Learning with Jupyter》,应导师之邀,写一篇推文总结归纳,作抛砖引玉之用,感兴趣的同学可以将进入该repos详细查看。
这是jupyter社区的几位用户自主发起编写的一本书,书中包含了很多jupyter notebook(以下统称notebook)在教育领域的应用和实践,为很多想把notebook应用到课堂上的教育工作者提供了宝贵经验,除此之外,计算机专业的工作者也能在本书中得到很多启发,值得仔细阅读思考。
本文的组织和该书的目录组织基本一致,接下来每一部分对应书上的一个章节。
In short, we design learning environments and experiences.
教师最大的作用就是设计学习环境和体验,以此让学生更好的参与课堂,理解知识,表达自我等等,使用notebook能帮助教师更好地达到这些目标。
书本在此章节介绍了notebook,相信本文读者或多或少都接触过notebook,故本文不再赘述,配图一张,自行理解。
图1:jupyter notebook界面概览
不仅在课堂上,学生和教师都能通过notebook获益,课堂下的练习和巩固也可以通过notebook来进行。上课的时候老师利用notebook能提升学生在课上的参与度,及时反馈学生的上课情况,增进学生的理解,改善学生的课堂表现,甚至能够让学生为自己的职业生涯做好前期准备。而学生能通过notebook培养自己的计算机思维,开源意识,自主学习能力等等。
这里举了一个及时收集学生听课反馈的案例——ticket to leave
通过代码的编写,教师直接在notebook上面出题并列出选项,如图2,学生可以点击下方的选项框进行选择,在教师端能看到答题统计情况,如图3,并以此为依据了解学生对这节课的了解和领悟水平。
图2:ticket to leave学生界面
本章介绍了notebook在教学上的应用
决定在教学上应用notebook时,教师需要做几件事情,确定自己的教学目标,理解自己的学生,完善自己的教案,安排好学习环境,为特定任务选择合适的工具。
需要注意的是,当教师使用notebook进行教学任务时,必须要防止学生对编程产生误解,IDE和notebook是编程的两个有效工具,它们分别能完成各自擅长的事,必须要让学生知道编程≠notebook,在教学时,也要介绍命令行交互,IDE的使用等等,以此正确建立学生的编程世界观。
本章引入了很多教学模式的类别,供教育工作者参考,本文介绍几种重要模式
train
和predict
的输入和输出,函数内部的逻辑空着,留给学生填,空白多少照这节课的难易度而定。离散傅里叶变换
,传统方法要从教授复数开始,然后经过很长一段路才到达DFT
,这一模式鼓励老师和学生先讲授总体的框架,比如给出DFT
函数让学生使用,再去探索内部细节。for循环
把面积加起来,但是物理系的学生可能会用积分去定义,这两种方式的结果应该是相同的,可以互相检验。jupyter社区为notebook提供了强大的生态,kernels是最重要的一个插件,通过kernels的安装,notebook可以摆脱python,支持上百种语言,包括C++,javascript,R,go语言等等,这为notebook的推广提供了极大的动力。
notebook是jupyter的核心应用,除了常规操作之外,还有很多奇技淫巧,比如,查询函数文档时,可在函数后面直接加? 如print?
,或者用shift-tab
达到同样效果;小插件的使用也能极大增加交互性和效率,见图4
图4:滑轨插件
Magic命令时notebook中特有的命令,如%matplotlib inline
, %timeit
, %debug
等命令能简化原有的python代码,增进效率;除此之外,notebook还提供了版本控制工具,类似于git中的diff命令,notebook可以使用 nbdime 进行版本控制,有兴趣的读者可以自行点击链接查看。
有三种方式可以提供给教师和学生使用jupyter,
一、本地安装,在学生自己的电脑上安装或者在实验室电脑上安装,好处是性能充足,有多少台电脑就有多少性能,坏处是每个人电脑配置不同,环境不同,安装调试很麻烦,但对于上一学期的课来说,花一节课去安装和调试是值得的。
二、在服务器上安装,无论是云端还是自己的服务器都能很好地控制环境和安装过程,学徒工只需要登陆账号就可以使用,jupyter社区提供了jupyterhub这个软件能够很好的管理用户,发放和收集作业,自动评分等等;同时也可以考虑用容器去实例化一个临时的环境,用户关闭后,实例就被关闭,每次打开都是新的,能够避免很多问题,诸如Binder的工具为我们提供了容器化notebook的解决方案。此方法的优点是学生不需要自己去安装,用浏览器打开就能直接写;缺点是对服务器性能要求较高,同时满足几十上百的学生不容易,而且对搭建服务的工程师在服务器,网络等专业领域上有较高的要求。
三、使用云jupyter,市面上有很多将notebook云端化的公司,如CoCalc,HubHero,Kaggle Kernels,微软的Azure notebooks和谷歌的Colab等等,这些产品都有免费试用版和付费版,当然,不出乎意料的,免费版都不好用,付费版能满足绝大部分需求,教师也不需要考虑性能,环境配置等种种问题。优劣显而易见。
该书最后给出了几个notebook应用教育领域的案例,包括大规模入学考试,音乐分析,高中的计算机入门教育,地理学科的应用等等,读者可以查阅该书。
jupyter notebook是数据科学领域常用的工具,本文展示了将其应用在教育领域的可能性,并有希望拓展为计算教育学的一部分,这是一个富有探索性的话题,需要奋斗在教育一线和工作者、科研人员和工程师们共同努力,不断为现代教育做出重要贡献。