在过去的几个月里,我们大约每三周举办一次社区教程。社区反响很好,每次90分钟的课程都有50-100人参加。
Dask 团队历来在 SciPy 等会议上举办教程。由于 2020 年的情况,今年的大部分内容都将以虚拟形式呈现。随着越来越多的人习惯参与虚拟教程,我们觉得为社区提供定期虚拟教程(不依赖于我们可能参加或发表演讲的会议)将是一项很好的服务。
教程对开源项目来说很棒,因为它们吸引了多种类型的学习者。
许多开源项目提供文档,一些项目还在 YouTube 上制作教学视频,但对于提供一套对许多用户都有价值的内容来说,教程是无可比拟的。
用户越能分享知识、信息和技能,他们就会越多地使用和参与该项目。拥有优秀的学习材料来源对于将感兴趣的新人转化为用户,并将用户转化为贡献者至关重要。
这对维护者也很有益。Dask 是一个大型项目,由许多具有不同功能的开源仓库组成。每个维护者倾向于参与他们的专业领域,但在日常工作中并不涉及所有事情。让维护者举办教程可以鼓励他们为了提供材料而增加对他们很少接触领域的知识,这有助于整个项目。
在这篇文章的其余部分,我们将讨论我们为提供教程所进行的准备和后勤工作。希望这能为其他想举办类似活动的人提供蓝图。
开始编译材料时,考虑几个问题很重要:“这是为谁准备的?”,“应该多长时间?”,“现在已经存在什么?”
对于 Dask 教程,我们的目标用户是刚接触 Dask 或已经使用一段时间但想了解更广泛项目的人。毕竟 Dask 是一个大型项目,当你尝试用它解决特定的挑战时,你可能不会发现许多功能。
在大型会议上,举办三小时的教程是很正常的,然而,如果在正常工作日安排教程,这可能要求太高了。人们习惯安排通常持续 30-60 分钟的工作会议,但这可能不足以举办教程。因此,我们决定定为 90 分钟,足够涵盖大量内容,又不至于太长而让人望而却步。
我们已经有一个旨在填补 SciPy 教程三小时的“官方”教程。这个教程也被设计成“从第一原理学习 Dask”风格的教程,我们探索 Dask 的工作原理,并最终扩展到 Dask 如何实现像 Numpy 和 Pandas 这样熟悉的 API。这对于让人们彻底了解 Dask 很有帮助,但考虑到我们决定用 90 分钟,我们可能不希望从低级代码开始,因为在达到通用用法之前时间可能不够。
在研究已有的材料时,我被指引到为O'Reilly 活动创建的Mini Dask 2019 教程。这个教程从 dataframe 和 arrays 等熟悉的 API 开始,最终深入到 Dask 的基本原理。由于像这样的教程内容通常以开源许可证发布并在 GitHub 上提供,能够在他人的工作基础上进行构建是很棒的。
结合这两个教程的结果是Dask 视频教程 2020。它遵循迷你教程相同的结构,从高级 API 开始,然后深入挖掘。它还包含了一些关于部署和分布式方法的新内容。
为了确保这些内容面向我们之前讨论的不同类型的学习者,我们需要确保我们的内容包含一些东西。
作为基础,我们应该整理一系列页面/文档,其中包含我们试图传达的信息的书面版本,供书面学习者使用。我们还应努力包含图表和图片,以帮助视觉学习者理解这些信息。
由于我们分享的是开源软件项目的知识,我们还应该尽可能地使其具有互动性。使用 Jupyter Notebooks 作为我们的文档格式意味着我们可以包含许多代码示例,这些示例既提供了书面示例,又可编辑和执行,以帮助动觉学习者感受事物在实践中是如何工作的。
在内容讲授时,讲师将同时讲解内容,并为听觉学习者叙述他们正在做的事情。重要的是要尝试以一种结构化的方式进行,大声解释内容的每个部分,而不是直接照着屏幕上的文字念,那可能会让人分心。
我们还想确保人们正在吸收知识,而实验是包含内容中小型测试的好方法。在示例的末尾设置一个未完成的部分意味着你可以给听众一些时间自己尝试弄明白。有些人能毫无问题地完成。对其他人来说,他们会遇到错误或犯错,这对教授如何调试和解决项目问题很有帮助。而对于那些对突击测验感到可怕回忆的人来说,他们可以轻松跳过,不用担心有人会检查他们。
对于你想包含在教程中的每个内容部分,我建议你创建一个包含解释、示例和一些供听众自行解决内容的 notebook。对每个部分(在 Dask 教程中我们有 9 个部分)都这样做,听众很快就会熟悉流程,并能够预测接下来会发生什么。这将使他们感到舒适。
一旦你整理好材料,你需要与参与者分享。
GitHub 是存放材料的好地方,尤其是如果你包含一个开放许可证。对于叙事性教程内容,通常使用 Creative Commons 许可证,该许可证要求修改也要共享。
由于我们已经将内容整理成 Jupyter Notebooks,我们可以使用Binder,让人们无需在本地下载或确保其 Python 环境正确设置即可运行材料。
接下来,我们必须决定如何展示材料。由于这是虚拟教程,我们将需要使用某种视频会议或直播软件。
这些工具通常分为两类:使用 Zoom、Hangouts 或 Teams 等工具的私密会议,以及在 YouTube 或 Twitch 等网站上的公开直播。
这些选项中的任何一个都可能是好的选择,它们允许演示者与参与者分享他们的视频、音频和屏幕,并且参与者可以使用一系列工具进行交流。
您需要做出的主要决定是是否限制人数。您希望教程的互动性越高,您就需要越能控制人数。对于我们最初的教程,我们希望参与者随时提问并快速获得回应,因此我们选择使用 Zoom 并限制人数,以免被问题淹没。但是,如果您想向尽可能多的人展示,并接受您可能无法一一回应他们,那么您可能想使用直播平台。
同时进行两者也是可能的。例如,Zoom 可以直接流式传输到 YouTube。如果您想向尽可能多的人开放,但又想将互动性限制在特定群体(可能是先到先得),这可能会很有用。对于 Dask 教程,我们决定不进行直播,而是举办多个教程,这样每个人都能获得互动体验,但我们很幸运拥有资源这样做。
您可能希望提前注册参与者,原因有几个。
如果您想限制人数,您当然需要某种方式来注册人们并限制该人数。但即使您正在进行通用直播,您也可能希望让人们提前注册,因为这允许您在活动前期向他们发送提醒邮件,这可能会增加出席人数的确定性。
由于我们的活动是私密的,我们使用Eventbrite注册了参与者。这使我们能够限制人数,并安排自动邮件作为提醒,同时也分享私密 Zoom 会议的详细信息。
在举办 Dask 教程时,我们发现注册人数中约有 50% 实际到场,因此我们考虑了这一点,并将限制人数设置为我们期望人数的两倍左右。
以下是我们创建的活动详情示例
活动标题:Dask 教程
组织者:演讲者姓名
活动类型:研讨会或讲座,科学与技术,在线活动
标签:dask, pydata, python, tutorial
地点:在线活动
日期和时间:单次活动,添加时间
详情:
来参加由 Dask 维护者提供的在线免费 Dask 教程吧。
这个九十分钟的课程将结合 Dask 社区领导者的概述讨论和演示,以及参与者的实时 notebook 会话中的互动练习。将提供计算环境。
如果您想查看类似内容的示例,请访问 https://tutorial.dask.org.cn (尽管本教程将涵盖适合本次较短课程的不同材料)。
我们期待与您相见!
图片:https://i.imgur.com/2i1tMNG.png
直播视频内容:不适用
文本和媒体:不适用
资源链接:教程内容(在线 Jupyter Notebooks)https://github.com/jacobtomlinson/dask-video-tutorial-2020
门票费用:免费
门票参与者限制:150 人
我们还设置了一系列自动邮件。您可以在活动管理页面的管理参与者 > 发送邮件给参与者下找到此功能。
我们安排了活动前两天、活动前两小时和活动前 10 分钟发送邮件,告知参与者前往何处,并在活动结束后几小时发送另一封邮件收集反馈。我们很快将讨论反馈邮件。
您需要确保准备好材料链接和会议地点,以便发送这些邮件。在我们的案例中,我们将内容推送到 GitHub,并提前安排了 Zoom 通话。
两天和两小时前
大家好!我们期待很快与您相见 <明天很快>。我们想与您分享一些重要链接,帮助您连接到会议。
课程材料可在下面的 GitHub 链接获取
<材料链接>
此仓库包含我们将一起学习的 Jupyter notebooks。您无需在教程前安装任何东西。我们将在在线服务 mybinder.org 上运行 notebooks。您只需一个网络连接。
会议本身将通过以下 Zoom 链接进行视频通话
<Zoom 链接和密码>
我们期待很快与您相见!
<组织者姓名>
十分钟前
大家好!
我们即将开始。以下是会议详情的最终提醒。
<Zoom 链接和密码>
一会儿见!
<组织者姓名>
几小时后
大家好!
非常感谢您参加 Dask 教程。我们真诚地希望您觉得它有价值。
如果您能回答几个简单的反馈问题,帮助我们改进下次的教程,我们将非常感激。
<Google 表单链接>
此外,我们想提醒您,教程材料始终可在 GitHub 上获取,您可以随时自行学习或与他人分享。
<材料链接>
谢谢,
<组织者姓名>
现在我们有了 Eventbrite 页面,我们需要告诉人们这件事。
您可能已经拥有可以联系社区的现有渠道。对于 Dask,我们有一个活跃的 Twitter 账户,拥有大量粉丝,因此在教程开始前一周发几次活动链接的推文就足以填满席位。
如果您有邮件列表或任何其他平台,您可能也想在那里分享。
务必在参与者加入之前加入会议。我建议这至少在最终提醒邮件发出之前完成。我个人通常提前 20 分钟左右加入。这可以确保会议正在录制,并且参与者加入时处于静音状态。
考虑用户的体验。他们会在网上报名参加活动,收到几封包含 Zoom 会议详细信息的邮件,然后加入会议。如果在几秒钟内没有任何迹象表明他们进对了地方,他们可能会感到焦虑。
为了解决这个问题,我倾向于显示一些图片,让人们知道他们进对了地方。您可以使用像OBS 与 Zoom 配合使用的工具来创建自定义场景,或者只是分享屏幕,显示一个简单的幻灯片,上面写着“Dask 教程即将开始”。
分享屏幕的唯一缺点是您在教程开始前的准备时间无法继续使用您的电脑。
当我们举办前几次教程时,我们也在进行 Dask 用户调查,因此也在等待屏幕上包含了调查链接,让人们有事可做。
准时打招呼,欢迎大家参加教程。但是由于是虚拟活动,参与者会迟到,所以不要在开始五分钟内启动,否则您只会收到大量询问发生了什么的问题。
在这段等待时间里,一个有趣的活动是让每个人在聊天中自我介绍。可以说“请在聊天中打个招呼,并告知您的姓名和您来自哪里”。
这对您作为讲师来说是很好的反馈,可以了解人们来自哪里,同时也能让参与者感到自己身处在一个满是人的房间里。这类活动的好处之一是它具有互动性,所以务必回复人们的招呼。
我非常不擅长正确发音姓名,所以我倾向于列出他们说他们来自的地方。这仍然让他们觉得他们的消息被看到了。
一旦准备好开始,介绍你自己和教程内容的概况。然后利用聊天应用程序中可能有的任何互动工具。在 zoom 中,参与者可以点击带有“快一点”、“慢一点”、“是”和“否”等标签的按钮。这些在运行教程时非常适合获取听众的反馈,但最好确保每个人都知道按钮在哪里,并尝试使用它们。我倾向于解释按钮在哪里,然后提问,例如“您成功启动 binder了吗?”,“您以前使用过 Dask 吗?”或“您是 Pandas 用户吗?”。您会了解一些关于您的听众的信息,他们也会熟悉这些控制。
互动意味着您也可以回应用户的问题。在 Dask 教程中,我们默认将所有参与者设为静音,并鼓励他们在文字聊天中输入问题。我们还有一位额外的讲师,他不负责讲解材料,他可以关注聊天并实时回答问题。如果他们觉得某个问题/回答对整个群体有益,他们可以取消静音并打断主讲人,以便将问题提出。请准备好应对来自聊天的各种问题,包括教程中未积极涵盖的主题。这通常是参与者唯一能与核心维护者实时交流的机会。
您可能没有资源为每次教程安排两位讲师,Dask 幸运地拥有强大的维护团队,因此您可以考虑在每个部分结束时安排休息时间来回答问题。实验期间是回去回顾任何问题的好时机。
互动性是直播教程相对于视频的一大优势。
一旦设置好,所有人都就位,就可以开始讲解材料了。考虑到我们之前为准备材料所做的充分准备,这一步相对简单。所有内容都已摆在我们面前,我们只需按部就班地讲解。
我发现手头有一份包含时间安排的部分列表非常有帮助,我可以参考它来控制节奏。
由于我们有另一位讲师回答问题,我倾向于忽略聊天,并尽可能慢地讲解每个部分,同时又不超时。就我个人而言,我的默认速度太快,所以强迫自己慢下来,同时通过一些时间安排来保持进度似乎效果很好。但是您应该做对您有效的事情。
在实验期间,我倾向于将麦克风静音,并加入到回答聊天中的问题。
当接近尾声时,留一些时间进行最后的提问是很好的。人们可能想问一些他们之前没有机会问的问题,或者一些没有适合任何特定领域的问题。
如果您遇到复杂的问题或者想深入探讨,您可以提议在结束后留下继续讨论,但您的参与者会感谢您在预定时间结束,因为他们可能紧接着还有其他安排。
留下一些额外的资源总是好的,无论是文档链接、他们可以了解更多信息的社区场所(如 Gitter 聊天)等等。
完成后,将教程的录像上传到 YouTube 也是很有益的。如果您进行了直播,这可能自动发生。如果您使用了 Zoom 这样的工具,您需要自己上传。
将来观看的人将无法获得互动的好处,但仍然应该能够通过跟随材料获得大部分益处。
您要做的最后一件事是规划下一次。Dask 团队决定每月左右举办一次教程,但轮换时区,以尽量覆盖尽可能多的用户。我们还讨论了举办特别深入探讨的教程,它们具有相同的时长和形式,但深入探讨特定主题。
为了帮助您规划未来的活动,您可能希望获得参与者的反馈。您可以使用 Google Forms 等工具创建一个简短的问卷,在活动后发送给参与者。根据我们的经验,约有 20% 的参与者会填写一个包含 10 个问题的调查。
这些反馈对于内容或格式的修改非常有帮助。例如,在我们的第一次教程中,我们全程使用 OBS 进行片头屏幕和屏幕共享。然而,Zoom 将网络摄像头限制在 720p 并进行严重压缩,因此参与者的视频质量不佳,50% 的调查提到了视频质量差。在后续的教程中,我们只使用 OBS 进行片头屏幕,然后使用 Zoom 内置的屏幕共享工具,这提供了更好的体验,并且在调查中没有用户报告任何音频/视频问题。
以下是我们询问的一些问题示例以及它们在我们的教程中如何回答。
在编写材料时,我们说我们的目标用户是“刚接触 Dask 的人,或者已经使用了一段时间但想了解更广泛项目的人”。我们的反馈结果证实我们正在触及这些群体。
我们可以更具体地要求人们评估他们的能力。但问题越复杂,人们填写问卷的可能性就越小,因此这是一个权衡。
根据您项目的复杂性,您可能需要在您拥有的时间内对可以涵盖的内容做出妥协。Dask 是一个大型项目,因此我们无法涵盖所有内容,所以我们想检查是否涵盖了基础知识。
我们从回答“否”的人那里收到的反馈大多数是关于高级主题的,例如 Kubernetes、Google Cloud 部署、对内部工作原理的深入探讨等。我相信这些不应该出现在本教程中,但这支持了我们将来举办深入探讨的计划。
这里我们收到的一个有用反馈是“我应该何时使用 Dask,何时坚持使用 Pandas?”。这绝对是入门教程应该涵盖的内容,所以我们的材料在这里显然有所欠缺。因此,我们可以回去进行修改并改进内容。
掌握节奏很难。如果你的目标是不同能力的群体,很容易对很大一部分参与者来说太快或太慢。
我们的反馈显示,人们普遍感到满意,但我们倾向于速度过快。考虑到我们正在利用分配的时间,这可能表明我们应该削减一些内容以放慢速度。
通过询问哪些部分信息量最大,我们可以确定将来需要放慢速度时可以削减的内容。这也显示了我们可能需要花费更多时间并添加更多内容的领域。
我们必须根据前面讨论的标准决定使用哪个视频平台。对于我们的教程,我们选择了 Zoom。通过进行用户调查,我们能够检查这对人们是否有效,并查看是否有人们更喜欢的替代方案。
我们的结果证实人们对 Zoom 感到满意。这些结果可能有点偏差,因为我们使用了 Zoom,但我相信我们可以继续使用它,并且人们会有一个良好的体验。
最后一项检查是人们是否度过愉快时光。当看到 100% 的人说他们会向同事推荐时,作为讲师,这会给您带来巨大的乐趣。
这些结果可能有偏差,因为如果人们不推荐它,他们可能不会费心填写调查。但嘿,我接受了!
在这篇文章中,我们讨论了为什么以及如何为开源项目举办社区教程。
总而言之,您应该举办教程,因为
您可以通过遵循以下步骤举办教程