ActivePapers Pharo 版
ActivePapers Pharo 版,作者 Konrad Hinsen,发布于 2019 年 5 月 10 日 ActivePapers 家族有了新成员:ActivePaper Pharo 版。 Python 和 JVM 版本在两个不同的平台上实现了基本相同的想法和概念,与此相反,Pharo 版本追求不同的目标:探索可重复、可理解和可验证的计算机辅助研究的人机界面。我收到的有关 ActivePapers Python 版本的最常见问题之一是:“这适用于 Jupyter 笔记本吗?”最初我的回答是“还没有,但我正在努力。”我做到了。然而,这项工作从未取得令人满意的结果。原因之一是技术障碍。我曾尝试将 Jupyter 笔记本包含在 ActivePaper 中,但事实证明这是不可能的,因为 Jupyter 的双进程设计(内核和笔记本编辑器是通过通信协议连接的独立进程)与 HDF5 库的限制不兼容,即任何时候只有一个进程可以写入文件。这意味着您无法将笔记本及其计算结果存储到同一个 HDF5 文件中。然而,我越是考虑集成 ActivePapers 和 Jupyter,就越意识到它的线性笔记本(一系列代码、文档和结果单元)并不真正适合记录科学计算的任务,除了简单的情况之外。如果您查看各种已发布的 ActivePapers,您会发现它们总是包含多个脚本以及一些库模块。从表面上看,笔记本似乎可以取代脚本,从而提供文档。然而,一个好的文档必须记录整体,而不是其中的某些部分。它必须将库模块中的多个脚本和代码结合在一起。通常计算方法在库模块中实现,脚本将它们应用于数据集。如果文档是逐个脚本完成的,那么如何记录方法?现在有很多已发布的 Jupyter Notebook,那么他们是如何处理这个问题的呢?当然,我没有全部看过,但到目前为止我的印象是有两种情况。最常见的情况是记录基于知名库中实施的标准众所周知方法的数据分析的笔记本。笔记本的读者应该熟悉这些方法,或者从其他地方了解它们。另一种情况是包含完整方法实现的笔记本。除了限于简单的方法之外,这种方式有一个巨大的缺点,就是方法实现不可重用。由于我自己的研究主要集中在开发和评估新的计算方法,因此我得出的结论是笔记本不太适合我的工作。事实上,我通过尝试也得出了同样的结论。每当我以笔记本形式开始一个新项目时,我都会快速切换到旧式模块和脚本,并在单独的文本文件中提供文档。我发现这对于我个人使用来说是一个非常好的技术,但是一堆文件,即使组织良好,也无法让其他科学家,甚至合作者渴望深入研究。几个月前,当我开始关注 Pharo 时,很大程度上是出于偶然(在担任可重复研究 MOOC 的讲师之前,我注册了 Pharo MOOC,以便从学习者的角度获得一些 MOOC 经验),我发现了一种非常不同的交互式计算环境。 Pharo 是 Smalltalk 家族的年轻成员之一,长期以来一直重视可探索性和可理解性(有关更多详细信息,请参阅此博客文章)。
然后我很快发现了 Glamorous Toolkit,这是一个基于 Pharo 的新交互式环境,旨在通过可塑的开发工具实现更高水平的可探索性,其想法是开发人员应该能够使用特定于领域的检查工具扩展该环境。拉斐尔·卢克 (Rafael Luque) 的博客文章很好地总结了这些想法的知识背景。与 Pharo 宇宙当前和未来的环境相比,计算笔记本感觉非常受限且具有约束性。考虑到它们的起源,这并不奇怪。今天的 Jupyter 和 RMarkdown 是 Mathematica 在 20 世纪 80 年代初引入的笔记本理念的微小变化。反过来,Mathematica 与大多数其他计算机代数系统一样,建立在 Lisp 的基础上,Lisp 在 20 世纪 50 年代为计算引入了许多革命性的功能,其中包括通过读取-求值-打印循环 (REPL) 进行交互,这是在当时用户界面硬件(面向行的终端)的限制下实现交互的自然方式。另一方面,Smalltalk 诞生于 20 世纪 70 年代,从一开始就采用图形显示器和指点设备,其代价是依赖于当时很少有人能够使用的硬件。正如马歇尔·麦克卢汉教导我们的那样,首先我们塑造我们的工具,然后我们的工具塑造我们。 20 世纪 50 年代的面向行的终端给计算机用户留下了一种思维方式的印记,即使是今天的计算笔记本也保留了这种思维方式,尽管更先进的方法已经存在了几十年。这种卓越的技术不仅仅是 Smalltalk,它一直是一个小众系统。我们都使用非线性图形用户界面 (GUI) 来处理图像或声音文件。这些任务几乎不可能以逐行的方式完成,因此它们在 GUI 出现之前几乎无法实现。对于计算来说,GUI 可能来得太晚了:线性思维已经成为一种文化规范。 ActivePapers 的 Pharo 版本旨在将 GToolkit 环境塑造成进行计算机辅助研究的环境,而不是软件开发的环境。这两项活动截然不同,但有许多共同特征。主要区别在于科学关注数据和模型,而软件只是达到目的的手段。然而,它是如此重要,以至于其他一切都是围绕它构建的。此外,软件开发还涉及数据(关于软件)和模型(作为规范)。最后,差异是渐进的,而不是根本性的。这段旅程才刚刚开始,我真的不知道它将通向何方。请继续关注更新!同时,您可以观看此演示视频。由 Disqus 提供支持的评论
Earn certificates from real universities
One subscription for university-backed Python and data-science certificates