Nbdev:普及最佳实践的文化编程环境

2020-11-21 12:20:21

在GitHub,我们在使软件开发民主化方面投入了大量资金。这部分是通过作为开源之家并为教育者和学生提供工具来实现的。我们还正在构建降低软件开发入门障碍的功能,例如代码空间。但是,要使软件开发更容易实现并使其更易于采用最佳实践,例如持续集成,分发和软件文档,还有许多工作要做。

这就是为什么我们决定协助fastai为Python开发一种名为nbdev的新的,有文化素养的编程环境的原因。可以在此博客文章中找到有关nbdev背后动机的讨论以及有关扫盲编程历史的入门知识。对于唐纳德·努斯(Donald Knuth)所描述的未开始的,有文化的编程,它是:

…远离了按照计算机施加的方式和顺序编写计算机程序的步骤,而是使程序员能够按照其逻辑和思想流所要求的顺序来开发程序。

尽管来自识字编程的思想的一部分已经出现在诸如Swift Playgrounds,Jupyter和Mathematica之类的工具中,但仍然缺乏涵盖整个软件开发生命周期的工具。 nbdev建立在Jupyter笔记本的基础上以填补这些空白,并提供以下功能,其中许多功能已与GitHub集成:

从托管在GitHub Pages上的Jupyter笔记本自动生成文档。这些文档是可搜索的,并且通过反省您在反引号中包含的关键字,可以自动将它们链接到相应的文档页面。该文档的一个示例是fastai官方文档。

GitHub Actions为您设置了持续集成(CI),它将为您自动运行单元测试。即使您不熟悉GitHub Actions,也可以立即开始工作,而无需任何手动干预。

nbdev环境由用于预览docs站点的Web服务器,用于编写代码的Jupyter服务器以及一系列CLI工具组成,可与GitHub Codespaces一起使用,这使入门变得更加容易。这篇博客文章详细讨论了CodeSpaces如何与nbdev集成。

作为一个预告,这是Codespaces中这种识字编程环境的预览,其中包括一个笔记本,一个文档站点和一个IDE:

笔记本和源代码之间的双向双向健壮同步,允许您使用IDE进行代码导航或根据需要进行快速编辑。

直接在笔记本中编写测试的能力,而无需学习特殊的API。这些测试可以通过单个CLI命令以及GitHub Actions并行执行。

nbdev允许开发人员在与源代码相同的上下文中编写单元测试和文档,从而促进了软件工程最佳实践,而无需学习特殊的API或担心Web开发。同样,GitHub Actions默认情况下会自动运行单元测试,而无需任何使用这些工具的经验。我们相信消除编写文档和测试的摩擦会促进高质量的软件,并使软件更具包容性。

除了使用nbdev创建Python软件之外,您还可以扩展nbdev来构建新型工具。例如,我们最近使用nbdev构建了快速页面,这是一个易于使用的博客平台,允许开发人员直接使用Jupyter笔记本创建博客文章。 fastpages使用GitHub Actions和GitHub Pages自动将笔记本转换为博客文章,并为Python开发人员提供了多种其他功能,从而使知识共享更加民主化。我们还使用了nbdev和fastpages创建了covid19-dashboard,它演示了如何创建交互式仪表板,该仪表板会随着Jupyter笔记本自动更新。

我们对nbdev使软件工程更具包容性,友好性和健壮性的潜力感到兴奋。我们也希望像nbdev这样的工具能够激发下一代识字编程工具。要了解有关nbdev的更多信息,请参见以下资源:

博客文章由创建者杰里米·霍华德(Jeremy Howard)讨论了nbdev背后的背景和动机

最后,如果您正在使用nbdev构建任何项目或希望进行进一步的讨论,请随时与nbdev论坛或GitHub接触。