2.2 有编程经验

对了有编程经验的读者,背景故事发生了些变化。 你也许知道如何编程,并且可能以此为生。 你熟悉多种编程语言,并且可以在它们之间来回切换。 你已经听说了一种叫做“数据科学”的新奇事物,并且想要跟随这一潮流。 你开始学习如何使用 numpy,如何在 pandas 中操作 DataFrames ,以及如何使用 matplotlib 绘图。 又或者,你可能已经通过 tidyverse 学习了所有的操作,包括 tibblesdata.frames%>% (管道运算符)和 geom_* 等等 ……

然后通过某些人或某些地方,你关注到一门名为 “Julia” 的新语言。 何必呢? 你已经精通了 Python 或 R ,并且掌握了你所需要的一切。 好吧,让我们设想一些场景。

假设你正在使用 Python 或 R:

  1. 编写的代码未能达到需要的性能? 实际上, 若使用 Julia, Python 或 R 的分钟级运行时间可能会缩短为秒级3。 我们将在 Section 2.4 展示 Julia 在学术界和工业界的成功应用案例。

  2. 尝试做些不符合 numpy/dplyr 惯例的操作,但发现代码很慢,然后不得不学习黑魔法4 来加速代码? 在 Julia 中,你可以自定义各种各样的代码,而且不会有任何性能损失

  3. 不得不调试代码以及有时需要阅读 Fortran 或 C/C++ 源码,但却又不明白实现的原理? 在 Julia 中,你仅需要阅读 Julia 代码,并且不需要学习其他语言来加速原来的代码。 这就是 “两语言问题” (请查阅 Section 2.3.2)。 这还能对应此种情况: “你想把一个有趣的想法贡献给开源项目。但是不得不放弃,因为所有库的编程语言既不是 Python,也不是 R,而是C/C++ 或 Fortran”5

  4. 并不能直接使用其他包中的数据结构,而是需要构建一组接口6而 Julia 用户能够轻松地共享和重用来自不同包的代码。 大多数 Julia 用户定义的类型和函数都是开箱即用的7,一些用户甚至会惊讶地发现其他库可能以无法想象的方式使用他们的包。 我们会在 Section 2.3.3 介绍一些例子。

  5. 想要更好的项目管理工具,其需包含精确的、可管理的、可复制的依赖和版本控制? 而 Julia 有着令人惊叹的项目管理方案和绝佳的包管理器。 与安装和管理单个全局软件集的传统包管理器不同,Julia 的包管理器围绕“环境”设计: 这些独立的软件集既可局部生效于单个项目,也能在不同的项目间共享。 每个项目独立维护自己的软件版本集。

如果这些熟悉或看似合理的情景吸引到了你的兴趣,那么你可能会想了解更多关于新 Julia 语言的内容。

让我们继续吧!


  1. 3. 有时是毫秒级。↩︎

  2. 4. numba、甚至 Rcppcython↩︎

  3. 5. 浏览一些 GitHub 中的深度学习库,你会惊讶地发现 Python 只占代码库的25%-33%。↩︎

  4. 6. 这通常是 Python 生态系统的问题,虽然 R 并没有受到严重的影响,但也并不乐观。↩︎

  5. 7. 或者需要做出极少的努力。↩︎



CC BY-NC-SA 4.0 Jose Storopoli, Rik Huijzer, Lazaro Alonso, 刘贵欣 (中文翻译), 田俊 (中文审校)