在过去的几个月里,我们大约每三周举办一次社区教程。社区的反馈非常好,每次 90 分钟的会议都有 50-100 人参加。

开源项目为何要举办教程

Dask 团队历来在 SciPy 等会议上举办教程。由于 2020 年的情况特殊,大部分内容今年都在线上进行。随着越来越多的人习惯于参与线上教程,我们觉得独立于我们可能参加或发言的会议,开始定期举办线上教程将是对我们社区的一项良好服务。

教程对开源项目很有益处,因为它们适合多种类型的学习者。

  • 教程材料为文字和视觉学习者提供了很好的基础。
  • 使用 Jupyter Notebooks 这样的交互式工具,让实践型学习者可以跟着操作并探索自己的路径。
  • 由讲师实时讲解材料,为听觉学习者提供了口头信息来源。
  • 此外,来自世界各地的一群人参与直播活动本身也很有趣。这能增强社区归属感。

许多开源项目提供文档,有些还在 YouTube 上制作教学视频,但教程在制作一套对许多用户都有价值的内容方面确实是无与伦比的。

用户之间分享知识、信息和技能越多,他们使用和参与项目的程度就越高。拥有优质的学习材料来源对于将感兴趣的新人转化为用户、将用户转化为贡献者至关重要。

对维护者来说也很好。Dask 是一个大型项目,由许多功能各异的开源仓库组成。每个维护者倾向于专注于自己的专业领域,但并非每天都涉猎所有内容。让维护者举办教程鼓励他们增加对平时很少接触领域的了解,以便传授材料,这整体上对项目有利。

如何操作

本文的其余部分将讨论我们为举办教程所做的准备和后勤工作。希望这能为希望举办类似活动的其他人提供一份蓝图。

编写材料

开始编写材料时,考虑几个问题很重要:“这是为谁准备的?”,“应该多长时间?”,“现在已经有哪些内容了?”。

对于 Dask 教程,我们的目标用户是刚接触 Dask 的人,或已经使用了一段时间但想了解更广泛的项目的人。Dask 毕竟是一个大型项目,有很多功能您在尝试用它解决特定挑战时可能不会发现。

在大型会议上举办三个小时的教程是很正常的,然而当试图将其安排在个人正常工作日的一部分时,这可能要求过高。人们习惯于安排通常持续 30-60 分钟的工作会议,但这可能不足以举办一个教程。因此,我们决定了 90 分钟,这足以讲解相当多的内容,又不会太长让人却步。

我们已经有一个“官方”教程,它是为填充 SciPy 教程的三个小时而设计的。这个教程也被设计成一种“从基本原理讲起”的 Dask 风格教程,我们在其中探索 Dask 如何工作,并最终扩展到 Dask 如何实现熟悉的 API,如 Numpy 和 Pandas。这对于让人们透彻理解 Dask 很有帮助,但考虑到我们决定时长为 90 分钟,我们可能不想从底层代码开始,因为在讲到一般用法之前,时间可能就不够了。

在研究现有内容时,有人向我推荐了为 O’Reilly 活动创建的 Mini Dask 2019 教程。这个教程从数据帧和数组等熟悉的 API 入手,最终深入探讨 Dask 的基本原理。由于这类教程内容通常采用开源许可并在 GitHub 上提供,能够在他人的工作基础上进行构建真是太好了。

将这两个教程结合起来的成果就是Dask 视频教程 2020。它沿用了迷你教程的结构,从高级 API 开始,然后深入讲解。它还包含了一些关于部署和分布式方法的新内容。

内容结构

为了确保这些内容能够针对我们之前讨论过的不同学习者类型,我们需要确保我们的内容具备以下几点。

作为基础,我们应该为文字学习者准备一系列包含文字版本信息的页面/文档。我们也应该努力包含图表和图片,以便为视觉学习者阐明这些信息。

由于我们分享的是开源软件项目的知识,我们也应该尽可能地使其具有交互性。使用 Jupyter Notebooks 作为我们的文档格式意味着我们可以包含许多代码示例,这些示例既提供了书面范例,又可编辑和执行,从而使实践型学习者能够亲身体验实际操作。

当内容正在讲解时,讲师会同步讲解内容并为听觉学习者叙述他们正在做的事情。重要的是尝试以一种方式组织内容,即您大声解释内容的每个部分,但不要直接照着屏幕上的文字念,那样可能会令人反感。

我们还想确保人们有所收获,而实验练习是内容中加入小测试的好方法。在示例的结尾设置一个未完成的部分,这意味着您可以给观众一些时间让他们自己尝试并解决问题。有些人能够轻松完成。对于其他人,他们会遇到错误或犯错,这对于教授如何调试和解决项目问题很有益处。对于那些害怕突然测验的人,他们可以跳过这部分,而不用担心有人检查他们。

对于您想要包含在教程中的每个内容部分,我建议您创建一个 notebook,其中包含解释、示例以及一些供观众自行解决的问题。对每个部分都这样做(在 Dask 教程中,我们有 9 个部分),观众会很快熟悉这个过程,并能够预测接下来会发生什么。这将让他们感到舒适。

托管材料

一旦您准备好材料,就需要与您的参与者分享。

GitHub 是一个存放内容的好地方,尤其是当您为其包含一个开源许可时。对于叙述性教程内容,通常使用知识共享许可,该许可要求修改也必须分享。

由于我们将内容整理成了 Jupyter Notebooks 格式,我们可以使用 Binder 来让人们无需在本地下载或确保 Python 环境正确设置即可运行材料。

选择视频平台

接下来我们必须决定如何展示材料。由于这是线上教程,我们将需要使用某种视频会议或流媒体软件。

这些工具通常分为两类:使用 Zoom、Hangouts 或 Teams 等工具进行的私人会议,以及在 YouTube 或 Twitch 等网站上的公开广播。

这些选项中的任何一个都可能是一个不错的选择,它们允许演示者与参与者分享他们的视频、音频和屏幕,并且参与者可以使用多种工具进行反馈。

您需要做出的主要决定是是否限制人数。您希望教程具有越高的互动性,就越需要控制人数。对于我们最初的教程,我们希望参与者可以随时提问并获得快速回应,因此我们选择使用 Zoom 并限制人数,以避免被问题淹没。然而,如果您想向尽可能多的人演示,并接受可能无法 individually 回复所有问题的情况,您可以选择使用流媒体平台。

同时进行这两种方式也是可能的。例如,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 人

教程倒计时

我们还设置了一系列自动化邮件。您可以在活动管理页面的 管理参与者 > 发送邮件给参与者 下找到此设置。

我们安排了在活动前两天、两小时和十分钟发送邮件,告知参与者如何加入,并在活动结束后几小时发送邮件收集反馈。我们稍后会讨论反馈邮件

您需要确保提前准备好材料链接和会议地点。在我们的案例中,我们将内容推送到 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 幸运地拥有强大的维护团队,因此您可以选择在每个部分结束后安排休息时间来回答问题。在实验练习期间也是回顾任何问题的良好时机。

互动性是直播教程相对于视频的一大优势。

讲解材料

一旦一切准备就绪,所有人都已加入,就是开始讲解材料的时候了。考虑到我们之前在准备材料上投入了大量精力,这相对来说比较直接。所有内容都摆在我们面前,我们只需按照步骤讲解即可。

我发现有一份写明各部分及时长的清单供我参考,对于掌握进度非常有帮助。

  • Dask 概述及 Dask Dataframe(10 分钟)
  • 入门实验练习(10 分钟)及结果(5 分钟)
  • Dask GUI 和仪表盘(10 分钟)
  • Dask Array(10 分钟)
  • 带实验练习的 Dask ML(10 分钟)及结果(5 分钟)
  • Bags 和 Futures(10 分钟)
  • 分布式(10 分钟)
  • 总结和结束(5 分钟)

由于我们有另一位讲师负责回答问题,我倾向于忽略聊天,并尽可能慢地讲解每个部分,但又不超过预定时间。我个人的习惯是讲得太快,所以强迫自己放慢速度,同时借助一些时间节点来保持进度似乎效果不错。但您应该选择最适合您的方式。

在实验练习期间,我倾向于静音麦克风,并在聊天中参与回答问题。

总结收尾

快结束时,最好留出一些时间回答最后的问题。人们可能想问一些之前没机会问或不属于特定领域的问题。

如果您遇到复杂问题或想深入探讨,您可以提出在会议结束后留下继续讨论,但您的参与者会感谢您按时结束,因为他们可能紧接着有其他安排。

总是最好为参与者提供一些额外的资源,无论是文档链接、社区学习场所(如 Gitter 聊天等)。

稍后分享内容

完成后,将教程录像上传到 YouTube 也是很有益的。如果您进行了直播,这可能自动发生。如果您使用了像 Zoom 这样的工具,您需要自己上传。

将来观看的人无法体验互动性,但仍然可以通过观看材料获得很大益处。

收集反馈并规划下一次

您要做的最后一件事是规划下一次。Dask 团队决定每月左右举办一次教程,但会轮换时区,以尽量覆盖更多的用户。我们还讨论了举办特殊的深度讲解教程,它们长度和形式相同,但深入探讨某个特定主题。

为了帮助您规划未来的活动,您可能会希望从参与者那里获得反馈。您可以使用 Google 表单等工具创建一份简短的问卷,并在活动结束后发送给参与者。根据我们的经验,大约 20% 的参与者会填写一份包含 10 个问题的调查问卷。

这些反馈对于修改内容或形式非常有帮助。例如,在我们的第一次教程中,我们全程使用 OBS 进行开场画面和屏幕共享。然而,Zoom 将网络摄像头限制在 720p 并进行严重压缩,导致参与者的视频质量不佳,50% 的调查反馈提到了视频质量差。在后来的教程中,我们只将 OBS 用于开场画面,然后使用 Zoom 内置的屏幕共享工具,这提供了更好的体验,并且没有用户在调查中报告任何音频/视频问题。

以下是我们询问的一些问题以及参与者在我们教程中给出的回答示例。

您之前使用过 Dask 吗?

在编写材料时,我们提到我们的“目标用户是刚接触 Dask 或已经使用了一段时间但想了解更广泛项目的人”。我们的反馈结果证实我们确实覆盖了这些群体。

我们可以更具体地要求大家评估自己的水平。但问题越复杂,人们填写问卷的可能性就越小,因此需要权衡。

Forms response chart. Question title: Have you used Dask before? 39% no, 61% yes.

我们是否涵盖了您期望的所有主题?如果没有,缺少了什么?

根据您项目的复杂性,您可能不得不在现有时间内能涵盖的内容上做出取舍。Dask 是一个大型项目,因此我们无法涵盖所有内容,所以我们想确认我们涵盖了基础知识。

Forms response chart. Question title: Did we cover all the topics you expected? 22% no, 78% yes.

大多数回答“否”的反馈都提到了诸如 Kubernetes、Google Cloud 部署、深入了解内部工作原理等高级主题。我认为这些内容不应该包含在本次教程中,但这增强了我们未来举办深度讲解的计划。

这里有一条有用的反馈是:“我什么时候应该使用 Dask,什么时候应该继续使用 Pandas?”。这绝对是入门教程应该涵盖的内容,因此我们的材料在这方面明显有所欠缺。因此,我们可以回去进行修改和改进内容。

进度如何?

掌握进度很难。如果你的目标是涵盖不同能力的参与者,很容易对很大一部分人来说讲得太快或太慢。

我们的反馈显示大家普遍满意,但我们倾向于讲得有点快。考虑到我们用满了分配的时间,这可能表明我们应该稍微删减一些内容,以便放慢进度。

Forms response chart. Question title: How was the pace? 70% Just right, 26% Too fast, 4% Too slow.

您觉得哪些部分信息量更大?

通过询问哪些部分信息量最大,我们可以确定如果需要放慢进度时,未来可以删减哪些内容。它还显示了我们可能希望花费更多时间并添加更多内容的领域。

Forms response chart. Question title: Which sections did you find more informative?

对于这样的教程,您偏好的平台是什么?

我们必须根据之前讨论的标准来决定使用哪个视频平台。对于我们的教程,我们选择了 Zoom。通过用户调查,我们能够确认这对大家是否有效,并查看是否有大家更喜欢的替代方案。

我们的结果证实,大家对 Zoom 感到满意。考虑到我们使用了 Zoom,这些结果可能有些偏差,但我相信我们可以继续使用它,并且大家会有一个很好的体验。

Forms response chart. Question title: What would be your preferred platform for a tutorial like this? 70% Zoom, <5% for options including YouTube, Twitch, Jitsi, and No preference

您会将此教程推荐给同事吗?

最后要确认的是大家是否度过了愉快的时光。作为讲师,看到 100% 的人表示会将教程推荐给同事,这会让你感到非常高兴。

这些结果可能有偏颇,因为如果人们不推荐,他们可能根本不会费心填写调查问卷。但嘿,我接受这个结果!

Forms response chart. Question title: Would you recommend the tutorial to a colleague? 100% Yes.

总结

在这篇文章中,我们探讨了为何以及如何在开源项目中举办社区教程。

总结来说,您应该举办教程,因为:

  • 您可以与具有不同学习风格的各类人群分享知识
  • 您可以回馈社区
  • 您可以发展壮大社区
  • 您可以提升维护者对整个项目的了解

您可以通过以下步骤举办教程

  • 将您的项目分解成若干部分
  • 使用 Jupyter notebooks 等工具为每个部分编写交互式文档
  • 使用 Binder 等服务让人们访问这些内容
  • 使用 Eventbrite 等服务管理参与者
  • 在社交媒体上宣传您的教程
  • 让大家加入视频会议
  • 利用互动工具
  • 讲解您的材料
  • 收集反馈

博客评论由 Disqus 提供