就在今天,十年前,我们发表了"我们为何创建 Julia",向世界介绍了 Julia 项目。时至今日,我们已经远远超出了最初博客文章中提出的雄心勃勃的目标。Julia 现在被数十万人使用。它在数百所大学教授,并且正在组建整个公司,其软件栈构建在 Julia 之上。从个性化医疗到气候建模,从新型材料到太空任务规划——无论你走到哪里,Julia 社区都在推动人类探索的边界。代码库中的几行代码赋予开源项目其形式,但社区赋予它生命。我们每天都对那些被 Julia 吸引而来的人们的知识广度和善良精神感到印象深刻。在下面,我们汇集了 Julia 社区成员(新老成员)的一些故事,共同回顾过去 10 年的历程。
十年前,当“我们为何创建 Julia”发表时,我正作为一名交换生在马里兰州东海岸的一所小学校完成高中最后一年。我曾痛苦地尝试过在 Octave 中完成学校项目和在线课程,手握大学录取通知书,却无事可做,我强烈地感受到在计算科学领域需要更好的工具,并从那天起就开始投入到 Julia 的工作中。10 年来,我几乎每天都在从事与 Julia 相关的工作。在这段时间里,我从天文学、同态加密到模拟半导体,以及介于两者之间的许多领域都进行过研究。在此期间发生了许多难忘的事件。例如,五年前,对于动态语言来说,我们首次将 Julia 推过了 Petaflop 的门槛(现在这变得容易多了 ;)),在一台世界上最大的计算机上运行了超过一百万个 Julia 并发线程。每年,我都期待着 JuliaCon,与我一路结识的朋友们聚在一起,并钦佩我们从在麻省理工学院会议室里进行黑客攻击的小团队走到了今天。过去的 10 年令人难以置信,未来只会更加激动人心。
那天在 Hacker News 上看到标题时,我的第一反应是相当平淡的“哦,我们真的还需要另一种编程语言吗”。然而,阅读博客文章却引起了我的兴趣——“它肯定无法实现它承诺的所有功能,是吗?”。那天工作很清闲,所以我下载了源代码,惊讶地发现它第一次构建就成功了。我的第一个 PR是在两周后提交的。在添加了一种新的数值类型时,它向我证明了轻松且高效的数值计算确实是可能的。从那以后的几年里,我有幸成为这个令人惊叹的社区的一员,并且能够在日常工作中编写 Julia 代码。毫无疑问,Julia 改变了我的生活,我认为它已经在某种程度上改变了世界。
我加入 Julia 社区比较晚,大约在 2016 年左右。我之前用 R 写过 GUI,用 Python 和 MATLAB 写过库,处理过 MEX 文件,用 C 写过自己的 MPI。我还像个老小孩一样用 Fortran 写了一些 ODE 求解器。我做了我的尽职调查。这完全是一团糟,尤其是在 Windows 上使用时,所以当我发现 Julia 时,我惊奇地发现了一些真正可用的东西。不再有由于 Windows 上缺少某些编译器而导致的 SciPy 安装错误:Julia 就是编译器。而且越来越多的情况下,Julia 都是编译器。当一切都还是新的时,这真是太疯狂了。在 v0.5-beta 的早期,我记得创建了 Plots.jl 和 Juno IDE 的文档,作为换取修复错误的交易。从所有这些“狂野西部”的经历中,我对语言和计算的理解发生了改变。之前,我以为语言是固定的,而微分方程求解器(DifferentialEquations.jl)才是“我的”工作,但有了 Julia,一切都变得开放了。生成随机泊松数的实现是否足够快,或者对于这个用例,是否存在一些更快的方法来达到我需要的统计容差?好吧,这段代码是用 Julia 编写的,所以让我们来看看。将所有内容都放在一种语言中很快意味着世界扩展到思考如何针对手头的应用优化每个浮点运算。所有以前被认为理所当然的事情现在都掌握在领域之中。这就是微分方程求解扩展到科学机器学习和SciML 开源软件组织的原因。现在我们拥有 SciML 基准测试,涵盖整个堆栈,从上到下,包括从偏微分方程的物理信息神经网络求解器到递归数组数据结构。数学中有许多地方根本没有被触及,因为它们听起来像是编译器的领域,而不是“计算科学”的领域,我期待着看到未来 10 年 Julia 如何弥合这一差距。
我最初是在 slashdot 上读到 Julia v0.1 发布的消息,并立即尝试在我的 MacBook 上构建它。我当时是一个刚毕业的研究生,对在 MATLAB 中工作的经历感到恐惧。虽然我发现了 numpy 并在我的研究和课程作业中很好地利用了它,但我内心渴望得到更好的东西。当运行 make
导致链接器错误时,我搜索了一下,并提交了一个两个字符的 pull request 来修复它。我当时并不知道,接下来的十年将带我踏上一段旅程,学习编译器,将我们的第一个“CI 系统”作为 bash
中的一个 for 循环构建,构建一个全球内容交付网络,重建一个神经网络工具包,设计一个交叉编译构建环境来满足我们所有非 Julia 的需求,以及更多、更多的事情。虽然我最初是被 Julia 的技术吸引到这个世界的,但社区的友好氛围和缺乏自我意识让我感到宾至如归。正如我们常说的,“奔着速度而来,留恋社区”。这是一段漫长的旅程,结识了许多好朋友,我迫不及待地期待着下一次线下 JuliaCon,看看那些肯定会让我大开眼界的同伴极客,他们用各种富有创造力、巧妙的方式努力使世界变得更美好。
我于 2014 年开始使用 Julia,我记得 2013 年冬天我用 Scala 为神经进化实验编写了一个多智能体机器人模拟器。我想我当时看到了“为什么我们创建 Julia”的博客,并且对用 Scala 编写数值代码的体验感到沮丧,所以我决定将我的下一个项目作为学习 Julia 的机会。我的第一个真正的项目是获取一个由合作者编写的 MATLAB 代码,该代码太慢了,并将其 1:1 翻译成 Julia。由于它使用了显式循环,我立即获得了大约 10 倍的速度提升,进一步的优化使其速度提高了 100 倍。我被迷住了。后来在这个项目中,我开始尝试使用 GPU,尤其是OpenCL.jl
。当我提交我的第一个严肃的 pull request 时,我从 Jake B. 那里得到了热烈的欢迎,这让我融入到社区中,并作为 Julia 社区的体现一直伴随着我。多年来,Julia 变得越来越重要的一部分我的生活,共同维护JuliaGPU 和JuliaHPC 生态系统,为 Julia 核心做出贡献,以及自 2017 年以来组织JuliaCon。正如 Elliot 所写,“奔着速度而来,留恋社区”对我来说确实如此,在过去的几年里,我结交了许多朋友。祝愿未来 10 年,Julia 仍然是我最喜欢的 LLVM 前端,并且会有很多恶作剧需要去做。
在尝试对 R 中一个需要花费很长时间的疯狂数据转换时,我偶然发现了 Julia。我瞬间被迷住了!语法非常简单,而且有一种“数学”的感觉。您可以使用所有 ϵ
和 δ
,以及统计学家最喜欢的 α
和 β
。从那时起,我成为了JuliaStats
和Turing
(贝叶斯建模)Julia 生态系统的贡献者。这个社区很棒,非常热情。我在这里结交了很棒的朋友,与 Rik Huijzer 和 Lazaro Alonso 合著了一本免费的开放获取和开源 Julia 数据科学书籍。这本书由志愿者翻译成葡萄牙语和中文,对此我心怀感激和谦卑。自 10 年前首次出现以来,Julia 现在正在取得长足的进步。我真的很期待它的未来,并荣幸能成为其中的一份子。
2019 年,我认为从近乎无限的数据中提取信号将成为未来一项必不可少的工作。我不仅非常关注如何将高性能计算方法应用于数据,还关注此类工具将造成的公平问题——拥有超级计算机的人可以进行尖端研究,而没有超级计算机的人如何竞争?我正在研究一项需要投资的工具,并偶然发现了 Common Lisp,但发现它不适合我。Lisp 看起来是我理想的工具,然后我遇到了 Julia。它不仅专为高性能而设计,而且语法友好,社区也很棒。几个月后,我做出了我的第一个核心贡献。从那时起,我与我的朋友 Ole Kröger 共同创建了有趣的动画软件包Javis.jl,加入了各种 Julia 工作组,并每天使用它。今天,我们非常清楚,延迟会导致生命损失。我将 Julia 用于我的健康研究,以解决和快速识别健康差异,提供洞察力,并可能协助决策以保护生命。我相信 Julia 是完成这项工作的工具,我期待着未来 10 年。
2019 年 7 月,我离开了我在 AWS 的工作,加入了一家名为 Invenia 的小公司担任软件工程师。在面试期间,我第一次听说了一种需要学习的新编程语言 Julia。Invenia 最近将其整个代码库从 Matlab 移植到 Julia,并且迅速成为在生产环境中使用 Julia 的最前沿公司之一。我在 Invenia 的第一周花在将各种内部和外部软件包从 Julia 0.7 移植到 1.0,发现对于来自 Python 背景的我来说,它是一种简单直观的语言。我的第二周是在巴尔的摩参加 2019 年 JuliaCon,与社区成员见面、聊天和学习。我被迷住了。将近 3 年后,我发现 Julia 几乎成为了我所有工作的首选语言。易用性、速度和社区不断吸引我使用它。我很期待它未来的发展。
大约 8 年前,我是一名在大学学习神经科学的学生,对计算建模非常感兴趣。我在 MATLAB 中实现了一些基本的脉冲神经网络模拟器,并将它们移植到 JavaScript,但始终觉得这两种语言都存在不足。尽管如此,我还是坚持使用 JavaScript,直到大约 3 年后,我第一次从互联网上的某个地方听说 Julia。出于无聊和对 JavaScript 的轻微不满,我决定尝试一下 Julia。我必须诚实地说;我在使用它时遇到了不少问题!错误不直观,语法很奇怪,而且很慢(编译速度很慢,但有什么区别呢?)。我继续使用 JavaScript 工作,但慢慢地,我开始逐渐熟悉 Julia,并尝试将其用于一些模拟和副项目。快进到大约 4 年前,我被某位 Valentin Churavy “吸引”去实现对 Julia 中 AMD GPU 的支持,因为我一直很直言不讳地希望支持更友好的开源 GPU 供应商。在接下来的两年里,我在业余时间开发了 AMDGPUnative.jl(现在是 AMDGPU.jl)和 Dagger.jl,逐渐开始欣赏 Julia,并参加了 2019 年的第一届 JuliaCon!不久之后,Valentin 从 JuliaLab 联系我,并向我提供了一个 RSE 职位(这在我当时的生活中是一个我梦寐以求的机会!),我欣然接受了。从那时起,我一直全职从事 AMDGPU.jl、Dagger.jl、BPFnative.jl 和 Julia 本身的工作,并且一直热爱着它。我认为我永远不会放弃我过去 5 年来认识和喜欢的这个奇妙的生态系统、语言和人们,我期待着未来许多美好的岁月。
在我攻读硕士学位期间,我用 Python 进行了一些机器学习,但一直对面向对象的代码库感到厌烦。它们看起来比绝对必要的情况更复杂,尤其是在测试方面,我感觉类是造成这种情况的原因。所以,作为一个合格的黑客,我尝试用不使用类的 Python 代码编写所有代码,这给阅读我代码的人带来了很大的困扰。几个月后,非常天真地,我在一份 C# 的工作中尝试了同样的方法,结果给阅读我代码的人带来了更大的困扰。幸运的是,当我从某个博文中读到关于 Julia 语言的信息时,我所有的问题都解决了。Julia 没有类。此外,这门语言看起来经过了深思熟虑的设计,所以从那一天起,也就是 2019 年的某个时候,我就开始了不碰其他语言的使命。到目前为止,这是一段非常有趣的旅程。我不断惊叹于从阅读 Julia 代码和讨论以及获取拉取请求反馈中可以学到多少东西。这归功于该语言提供的坚实基础以及正在用 Julia 构建事物的优秀社区。由于这些原因,我相信 Julia 在 10 年后将成为工业界和学术界研究的主要工具。我认为我们可以在 9 年内做到。
2011 年是我在 Invenia 的第一年,当时我们正在维护一个相当复杂的生产系统,该系统是用 MATLAB 2007b 编写的。Python 已经开始在我们的辅助脚本和 Web 服务中取代 Perl,我们中的几个人都渴望转向一门拥有健康社区的语言,这使得现代软件开发成为可能。但我的第一次尝试令人沮丧;我怎么能期望研究人员乐于从 A'*A
迁移到 np.matmul(A.conj().T, A)
呢?
2012 年,一位同事与我分享了 Julia 的博客文章。令我惊讶的是,我遇到的第一个 Julia 示例简洁、易读、性能极佳,甚至还是有效的 MATLAB 代码!这门语言是新的、不稳定的,但显然旨在完全满足我们的需求,无需昂贵且封闭源代码的许可条款或有 Bug 的神经网络工具箱。我开始积极参与邮件列表,关注新的发展并不断根据我们的需求评估其功能集。2014 年,Invenia 派我们两人参加了第一届 JuliaCon,从那以后我们每年都参加,彼此共同成长。正是在 2014 年,为我们的系统完全过渡到 Julia 打下了第一个包的基础,并在几年后完成。
最初几年在邮件列表上的经历为即将到来的社区定下了基调。核心开发者很乐意解释语言的工作原理以及设计决策背后的详细和周到的推理。每个月都会带来新的令人兴奋的功能(关键字参数!包管理器!不可变的内联数组!)。新手可以快速获得帮助、协作和贡献。虽然自早期以来社区已经发展壮大(诱使 Jeff Bezanson 修复你的专属编译器 Bug 变得更加困难),但这种社区态度仍然存在,并通过数百位活跃的社区贡献者传播开来。
我第一次听说 Julia 大概是在 2015 年左右。当时我正在用 R 进行一些 GLMM 分析,以完成我的昆虫学博士学位,并且只是寻找我能找到的所有信息。我在 Github 上找到了一本道格拉斯·贝茨(Douglas Bates)撰写的书,该书未出版,我很好奇为什么。顺着这条线索,我发现了一篇帖子,其中道格说他将离开 R 并将其编程转移到 Julia。我查看了一下,可能是 0.3 版本,语言非常基础,我感到害怕(不是计算机科学家!)。那时我已经从终端中的 R 迁移到 RStudio,对此我感到很满意。但是,我一直不时地回到这个项目,并不断查看 GLM 包中的代码,非常惊讶地发现它完全是用 Julia 编写的,我几乎可以阅读它,这与在 R 中发生的情况不同。后来,在我博士后期间,我有一个新项目需要大量数据,所以我用它作为借口来真正使用 Julia。0.6 版本发布了,我开始学习 Julia 中数据分析的基础知识。Juno 也可用,这使得事情对我来说也更容易了。从那以后,我几乎只用 Julia 进行数据分析。在工作中,我仍然必须使用 R、Python 和 SQL,但在我的笔记本电脑上,我尝试将所有内容集中在 Julia 中,我真的很喜欢这门语言和社区。我没有很多 PR,我确实发布了一个我需要的的小包,并且有很多用于我工作的个人包,以及计划开发几个更多包的计划,我在 Discourse 和 Slack 上有点活跃,并且通常会尝试保持参与。我希望这个项目继续发展和成熟。
我清楚地记得,是在一次深度学习暑期学校期间,我第一次听到“Julia”这个词,那是它发布 1.0 版本两天后。那是一个人们不认真对待编程的实验室,我对 MATLAB 感到失望已经很长时间了。暑期学校对我来说有点无聊,所以我花了整整 10 天的时间阅读 Julialang 及其生态系统的文档。我仍然可以重现当时兴奋的心情,两个月后我创建了一个小的 repeat
修补程序 PR,并收到了 Jeff Bezanson 的👍(尽管我立即注意到人们对每个新贡献者都这样做😆),以及两年后,我偶然修复了 CartesianIndices
步长支持功能 PR 中一个存在 6 年的性能问题,对此 Tim holy 在著名的 #appreciation Slack 频道中表达了感谢。这些都是我在 Julia 社区的美好回忆,我始终感谢与 Julia 一起成长以及向这里才华横溢且友善的人们学习。
像许多人一样,当我第一次看到 Julia “兼具两者的优点”的承诺时,我也有点怀疑;事实上,我记得第一次在 2018 年尝试 Julia 时并没有留下特别深刻的印象,这主要是因为绘图存在延迟(TTFT)问题。但当我听到 UCSB 物理学博士生(Katharine Hyatt)正在用 Julia 做一些很酷的量子研究后,在接近 v1.0 版本发布时再次尝试,情况很快发生了变化。在那之后,事情发展得很快:一旦你了解了双语言问题,它就会出现在物理学的各个方面。在 Julia 中,很多事情都是“免费的”,可以跳过数百万行 C++/Python 代码,因为 Julia 不慢,自动微分可以帮助解决物理学中许多反问题等等。今天,虽然在编译器或类型系统方面的熟练程度不如本文中许多核心开发人员,但我努力为物理学带来更好的计算工具,并且我希望看到 Julia 在未来十年内得到快速采用。
我第一次接触 Julia 是在 0.2 版本,当时是 Julia Studio IDE 及其捆绑教程的时代。当时我正在工作中使用 SAS,没有太多理由使用 Julia 做任何事情。然而,此后不久,我参与了在线代码高尔夫挑战赛,这最终为使用 Julia 做了一些事情提供了借口。在这个社区中,我很快就成为“那个使用 Julia 的人”,因为在其他地方极少看到用 Julia 发布的解决方案。这个社区也让我开始做出开源贡献,这是我之前完全不熟悉的事情。在作为一名休闲 Julia 用户几年后,在 2015 年至 2016 年,我终于开始为 Julia 及其软件包做贡献,并开始与一些非常棒的人互动、见面、学习和交朋友。2017 年,我辞去了工作,全职为 Julia 工作,担任社区经理,从那以后,我一直继续发布版本,并以某种形式或另一种形式全职使用 Julia。我甚至有幸在 2018 年伦敦的 JuliaCon 上与 Julia 的创建者一起在舞台上为 Julia v1.0.0 打标签,这真是千载难逢的机会。感谢所有在过去 10 年里让 Julia 成为今天这样的人,并特别感谢那些帮助我加入社区的人:Milan Bouchet-Valat、Andreas Noack、Tony Kelman、Stefan Karpinski 和 Jiahao Chen;那些让我在过去 5 年里能够专业地使用 Julia 的人:Viral Shah、Curtis Vogt 和 Jarrett Revels;以及 Jeff Bezanson,他让我迷上了 Scheme。
Julia 正是我梦寐以求的语言。在 2013 年夏末,“我们为什么要创建 Julia”令我震惊!我被教导用 C 和 C++ 编程,后来我还学习了一些 MATLAB。我一直追求性能,我是一个宁愿花更多时间优化代码也不愿花很少时间等待代码运行的人。但另一方面,我需要编写数学/科学代码,我喜欢用高级语言来做。在 2009 年开始攻读博士学位时,除了 C++ 之外,我还想使用一种开源的高级语言,所以我选择了 Python。但是,速度缓慢令人沮丧,我不得不依赖 Cython 等变通方法。我不开心,而且我很贪婪,总是想知道“为什么不能设计一种更好的语言,既高级又高效?这肯定在某种程度上是可能的!”。在 2013 年的那个夏天玩 PythonTEX 时,其文档提到了某种名为“Julia”的语言。我的第一反应正是“哦,不!又一种像 Python、Ruby 等的高级语言。为什么……为什么?”。然后我阅读了它的宣言,“哇!太棒了!”。它满足了所有条件,甚至基于 1 的索引也是锦上添花!八年过去了,我是一个非常开心的 Julia 用户,我总是很兴奋,并期待着来自优秀社区的所有新的酷炫内容。
早在 2017 年,我需要为我的博士项目正确地实现代码。我天真的“Python 胜任一切”的理念遇到了残酷的现实,因为我意识到我实现的核心组件比可接受的速度慢了 100 倍。我尝试了 Numba、Cython 并深入研究 Numpy 的知识,但没有一个解决方案令人满意。我怀着极大的怨恨意识到,对于对性能敏感的计算,不可能存在所谓的 Python 程序员:我可以将我的代码包裹在 Python 外衣中,但我必须用 C 编写所有困难的部分。一位为理论物理学学习 Julia 的朋友告诉我,我的沮丧在科学计算中很常见,并且有一个名字:“双语言问题”。更好的是,它有一个解决方案:Julia。
像大多数人一样,我最初对 Julia 的承诺持怀疑态度,并抵制着离开我的 Python 舒适区的诱惑。但尽管我发现 Julia 陌生,并且对它有各种各样的肤浅抱怨,但我仍然很好奇,并不断地尝试使用它。几个月后,我的 Julia 代码在性能方面的相对优雅是不可否认的。正如许多其他人所经历的那样,学习 Julia 某种程度上是一个滑坡,在我意识到之前,我已经了解了 CI、良好的测试实践和低级计算。在 2020 年,我将我的工作代码切换到 Julia,并且从那以后再也没有回头。
我第一次在关于 S4TF 和微分编程的博文中看到 Julia。这个概念引起了我的注意,但完全超出了我的理解范围,而且它很快,这意味着我并不热衷于尝试它。这篇文章确实提到了一个名为 Julia 的语言,并说它看起来像 Python,运行起来像 C,这吸引了我。像这里很多人一样,我用 Python 编写了原型代码,要么不得不努力使其具有高性能,要么用 C++ 重写它。
我把它搁置了一段时间,但当我看到 3b1b 的 Grant 提及它时,我决定在项目中真正尝试一下,在做那个项目的时候,我爱上了这门语言,随着语言而来的是社区,现在我不断地从各个方面受到启发,这要感谢人们用 Julia 做出的有趣的事情。我现在每天都在使用它,并希望帮助更多的人也使用它:)。
早在 2018 年,我有幸加入了 NASA 的一个使用 Julia 的团队。我有机会经历了从 0.6 到 1.0 的过渡。这导致我参与了开源项目,并最终帮助在 Stack Overflow 上推动社区发展。之后,我很幸运地在 2019 年帮助领导了 Julia 社区的 Google Code-in 项目,在那里我们指导了 212 名高中生。
所有这些年来,让我一直参与 Julia 社区的原因是回馈社区的机会。有很多惊人的机会去做真正有影响力的工作,这让我更有动力继续帮助大家!
2014 年,我乘坐了 5 个小时的巴士,在手机上浏览了该语言的文档。阅读过程非常愉快,我可能说了很多次“太棒了”。后来,我把一个 MATLAB 项目移植到了 Julia。它处理了数千个 EEG 数据集。代码大小只是一小部分,自组织,速度很快,而且我可以轻松地并行化它!该项目必须进行大量的字符串操作才能加载正确的文件。这实际上很有趣,类似于我从 Perl 和 Python 中了解到的(MATLAB 的字符串操作与 C 的一样底层,而且也不一致)。我很高兴能够编写高阶函数,从而使更改分析变得轻而易举。我不知道我存在两种语言的问题,而 Julia 刚刚解决了这个问题。我第一次对我的项目感到兴奋。我知道,如果“我们为什么要创建 Julia”的目标得以实现,那么 Julia 将在未来成为一股不可忽视的力量。
我不知道我的职业生涯中有很大一部分将与这件美丽的软件以及围绕它构建的同样迷人的社区交织在一起。在 2014 年夏天,我开始在 GSoC 项目中使用 Julia。我编写了 Interact.jl——它在接下来的几年里在社区中变得非常受欢迎。在接下来的 4 年里,我全职从事 Julia 的工作,我编写了 Escher.jl、Dagger.jl,并在 CSAIL 和 Julia Computing 共同开发了 JuliaDB。2018 年,我加入 Julia 实验室,成为一名博士生。我目前正在研究 Symbolics.jl——许多 Julia 中的仿真软件包目前使用的基本构建块。我每天都感谢有机会将我的代码贡献给许多优秀的科学家、工程师和教师的日常生活。
在我的博士学位结束时,我将已经将我早期职业生涯的 9 年时间投入到这门语言中——这只有少数年轻工程师才能梦想的机会!我可以肯定地说,通过 Julia,我掌握了许多技能——性能调优、编译器、分布式计算、线性代数和教学法。最重要的是,我还学会了在成功的工程项目中必不可少的谦逊、工艺和关怀,尤其是在开源世界中。
2012 年,我在圣地亚哥完成研究生院研究时,听说过 Julia。我当时阅读了“我们为什么要创建 Julia”的文章,并认为这正是我想要的。当时我太忙了,无法参与其中,但我一直在关注它的发展。
到 2020 年初,我看到 1.0 版本在几年前发布,并决定开始学习 Julia,我立即印象深刻。到 2020 年 3 月,我向 JuliaLang/Julia
提交了我的第一个拉取请求,很快发现 Julia 是一种我不仅可以使用而且可以帮助开发的语言。当我开始新工作时,我需要一个工具来帮助我快速探索 C API。我发现 Julia 可以做到这一点,而且在许多任务中,它在开发时间和执行时间方面都优于我使用的其他工具。我可以使用SIMD、调用任何我想要的 C 函数以及解决复杂的数学问题。Julia 是科学计算及其他领域的完美语言。
在此过程中,我还参与了 Julia 社区,该社区非常乐于助人和平易近人。直接与签署原始“我们为什么要创建 Julia”文章的创始人之一交谈并不少见。我期待着 Julia 的快速发展,并期待着帮助实现十年前提出的最初愿景。
2020 年初,我第一次从 Roger 在知乎上的帖子中了解到 Julia。第一次尝试使用 Julia,我就喜欢上了编写 Julia 代码的感觉,它与 Python、MATLAB 和 Fortran 类似,但更容易、更优雅,最让我印象深刻的是它惊人的性能和友好的社区!
受到SciML的启发,我决定使用 Julia 来帮助解决分数阶领域的数值方法问题。现在我们在这里,我们启动了SciFracX 项目,旨在使用 Julia 使分数阶计算和建模更容易。事实证明,我们选择了正确的道路。性能非常棒,令人惊叹!一些软件包逐渐成为分数阶科学计算中最有用的软件包。
很高兴看到 Julia 社区越来越大,未来十年会发生什么?让我们拭目以待;)
我第一次听说 Julia 语言是在 2016 年,当时我正在计算物理系攻读硕士学位。我的一个数值方法教授在一次讲座中说了一些类似“Julia 是一种新的有趣的编程语言,要注意它”的话。我对自己说——好吧,好的,我会知道的,但并没有太在意。几年后的 2019 年,我了解到计算科学的一个新方向——使用深度学习方法求解微分方程。我认为它具有很大的前景,我非常有兴趣去做。我坚定地决定朝这个方向发展。碰巧的是,这就是SciML正在积极做的事情。然后就开始行动了,首先我参加了 Julia 贡献季,然后我在 Google Code-in 担任导师,然后参加了 Google Summer of Code,在那里我们开始在NeuralPDE.jl上实现基于物理的的神经网络(PINNs)。起初,我只是喜欢 Julia 语言——语法、简洁、方便、易于理解,当然,还有很棒的人和社区,并且在使用、学习和深入了解细节一段时间后。我开始更加确信,对于计算科学的所有新方向,Julia 都是最佳选择,在这些方向中,需要以符号和数值的方式处理复杂的数学模型,并将其与实验数据和新的深度学习方法以及高速计算结合起来,所以这是我认为 JuliaLang 是数值计算未来的原因之一。
与许多其他人一样,当我第一次在 2016 年听说 Julia 时,并没有真正认真对待它。它听起来好得令人难以置信:一种既灵活又快速的语言。然而,由于一些不同的人独立地给出了热情的评价,我很好奇,想在 2018 年尝试一下。事实证明这是一个启示,也是我持续的 Julia 之旅的开始。
在我接下来的科学职位上,我有幸能够全职使用 Julia 并开发了现在已成为密度泛函工具包 (DFTK)的工具。我们使用 DFTK 的目标是创建一个代码库,促进电子结构模拟环境下模拟科学家、数学家和计算机科学家之间的协作。为此,Julia 被证明是正确的选择,因为它“神奇地”提供了开发新模型或算法所需的灵活性和可读性,以及调整性能的底层访问权限。通过这种方式,Julia 不仅对我在该领域的研究至关重要。我感谢所有参与这个令人难以置信的支持和欢迎的社区的人,以及所有过去、现在和将来为使 Julia 变得更好的所有人。我当然期待未来 10 年的到来:)。
我大约在 2016 年听说过 Julia,但直到 2020 年底才开始开发分析射电天文数据的软件时才有机会认真使用它,因为我对射电天文界提供的软件不满意。由于 Julia 具有 REPL 并执行 JIT 编译,因此可以轻松地交互式定义简单的函数或模型。无需为这些函数创建专门的语言和解析器,因为出于性能原因,它们是用 C 或 FORTRAN 实现的。Julia 解决了双语言问题。这让我联想到 25 年前 Numpy 和 Scipy 的开发。作为太空望远镜科学研究所的天文学家和科学程序员,我是 Numpy 和 matplotlib 的早期开发者之一,也是它在天文界使用的早期倡导者之一。它现在是天文学的事实上的语言。但是,我们当时意识到了双语言问题,但没有时间或资源来实现一门新语言。了解此限制后,我准备采用 Scipy 的继任者,如果并且何时出现。Julia 就是那个继任者。就像 25 年前一样,我现在正在提倡 Julia 成为天文学的事实上的语言。
一切都始于模拟音频电路的需求。在 2021 年对求解微分方程的各种框架进行调查后,我选择了 DiffEq,这是 Julia 生态系统中的一个“杀手级应用”。碰巧的是,JuliaCon 就在那个时候举行。我从 2019 年初就开始了解这门语言,当时出现了那篇臭名昭著的关于神经 ODE 的 PyTorch 论文的 Julia 实现。
语言不仅仅关乎指针和单子。友好的社区和强大的包管理器给我留下了比那些关于速度和可读性的大胆宣称更深刻的印象。当然,这些优势是真实且巨大的。2 周痛苦的手动推导被简化为 4 行代码。免费获得多物理场模拟。结合了 SPICE 的易用性和完整编程语言的强大功能……如果该编程语言也是可微的。;)
如果简洁是智慧的灵魂,那么 Julia 就是灵魂的猫薄荷。敬未来 10 年!
我们(我在这里很乐意代表其他 Julia 的长期维护者发言)一直将编程语言视为不仅仅是发布到 Github 上的一段代码,而是一个持续的过程和承诺。在 2012 年,偶尔会有潜在的 Julia 用户向我们提出关于项目未来的非常合理的疑问:如果你们一两年后决定转向其他项目怎么办?好吧,我相信我知道自己 10 年后仍然会致力于此,但我不知道这些年会过得有多快,恰好完整地填满了我的 30 多岁这十年。如果我们不尽快开始撰写 25 年回顾,它就会悄然而至——而且我不确定即使那样是否足够时间来实现我们所有的目标。幸运的是,我和大家一起工作非常愉快。前几天我试图计时一些分配,但看不懂结果。原来编译器已经获得了删除它们的能力,而我却浑然不觉——我对此非常自豪!
我错过了现在著名的博文发布的最初一个月:我“仅仅”是一位科学家,没有阅读编程博客的习惯。然而,在 2012 年初,很明显我的科学需求将迫使我放弃缓慢的动态语言,尽管我非常不愿意放弃交互式代码开发的效率。一次偶然的“交互式命令行 C”搜索通过博文将我介绍了一种名为 Julia 的有趣语言。那时我并不知道它即将成为我生活的一部分。帮助改进 Julia 导致我编写了可能比我想承认的更多的 C 代码(在 Julia 的内部深处),但它所服务的目的和社区本身就是回报。
令我惊讶的是,进步的速度似乎从未放缓。在 Julia 1.0 发布三年半后,始终坚持向后兼容性,如今的 Julia 却感觉像是与 2018 年发布的版本截然不同的东西。我迫不及待地想看看未来 10 年会发生什么!
我第一次听说 Julia 是在 1.0 版本发布期间,那时我正在攻读硕士学位。当时几乎每门课程都面临着不同的编程语言。所以,我并没有太在意,直到我开始我的硕士论文,并被要求“试用一下 Julia,并决定是否想在博士工作中继续使用它”。我试了一下,很快就喜欢上了 Unicode 字符、自动微分功能和包管理器。然而,我比任何语言特性更欣赏使用 Julia 的同事的乐于助人和兴趣,他们耐心地回答了我所有的问题,更重要的是,指出了我不知道自己会想知道的事情(等等,我可以设置 BLAS 线程的数量,这会让我的模拟速度大幅提升?!为什么?)。在从初学者到用户再到贡献者的过程中,我习惯了关注 Julia 的 Slack 和 Discourse,并融入了 Julia 社区。由于我的工程背景,我多少习惯了男性主导的环境。然而,在观看 JuliaCon 2018 的视频时,我对礼堂里女性的稀少感到非常震惊——并认为我想为改变这种情况做出贡献。这就是我成为 Julia Gender Inclusive(顾名思义,它不仅仅关乎女性!)成员的原因。我很高兴认识了其他与我一样热爱编程的女性,并且 Julia 社区对像这样的倡议表示赞赏,这真是太棒了!
可能与许多其他人一样,我在寻找 Python 的替代品以解决我的代码性能不足的问题时发现了 Julia。当时,我的编码经验不多,也没有真正为任何开源项目做出贡献。在我开始对 Julia 做一些小的贡献后,它就不断升级,现在,五年后,我参与了包管理器、调试器、稀疏线性代数、SIMD、管理版本以及各种各样的项目,甚至设法将为 Julia 做贡献作为我日常工作的一部分。所以对我来说,发现 Julia 对我的生活产生了巨大的影响,而令人兴奋的是,我觉得事情才刚刚开始。每个 Julia 版本都包含很多很棒的新功能,我只能想象未来 10 年的 Julia 会是什么样子。
十年。哇。在某些方面,感觉就像昨天一样,但当我想到社区为 Julia 带来的所有进步以及 Julia 今天享有的高质量声誉时,我对可能发生的事情感到谦卑。我刚刚通过查看我 2011 年(2011 年!)的 麻省理工学院研究生课程 18.337 来回忆一下,以记住十年前我们身处何方。感谢大家。Julia 现在势不可挡。
虽然我们在 10 年前的情人节发布了这篇博文,但早在 2009 年我们就一直在键盘上忙碌。令人惊奇的是,当时许多最初的动机至今仍在推动着 Julia 的发展——解决双语言问题——并且“为什么选择 Julia”这篇文章至今仍引起共鸣。我仍然记得在撰写博士论文期间编写 Matlab 和 C++/MPI 的混合代码时的痛苦,以及构建像 Circuitscape(一个生态学应用程序,20 多年来从 Java->Matlab->Python->Julia)这样的科学软件有多么困难。Julia 是对我们认为世界如何被打破以及我们应该如何解决这个问题的直接回应。从那时起,我们不断发展壮大——参与 NumFocus 以巩固开源基础,将 Julia 在麻省理工学院诞生的 Julia 实验室发展成为一个研究强国,并创立了 JuliaHub(以前称为 Julia Computing)以建立可持续的商业模式。让我感到最满意的,是开发和使用 Julia 做一些真正酷的事情的社区,这些事情很重要——从气候建模到药物设计到太空任务。这些年来,我结识了一些不可思议的朋友,我认为这个 Julia 人群将在我们从未来回顾时产生巨大的影响。10 年时间专注于一件事,与其说是疲惫,我仍然像第一天开始时一样兴奋。
我在研究生期间大约 0.4 版本(在 Arraypocalypse 之前,当时 helpdb
还在)开始使用 Julia。由于我对 C++ 到 Python 的工作流程感到不满意,因此我决定尝试一下我的办公室同事 Jim Garrison 不断向我提及的这种新语言。从那时起,我开始做出贡献。虽然我错过了前两次 JuliaCons,但我能够参加随后的几次,看到社区不断发展壮大和多元化,这真是太棒了。Julia 正在继续进军量子信息和凝聚态物理学领域,我对未来十年感到非常乐观!
关于“我们为什么创建 Julia”这篇博文……它可能是第四次尝试写一些东西来传达 Julia 的核心内容。令人震惊的是,如果没有让它听起来像是一份乏味的技术特性列表或对其他编程语言中让你感到烦恼的东西的抱怨,这是很难做到的。最终奏效的方法是专注于我们对其他语言的喜爱以及我们想要效仿的东西。我认为这种观点仍然是我们作为一个社区的核心。我们是一群相信鱼与熊掌可以兼得的人。那些看到当前可以做的事情的界限并自言自语“不,我们可以做得更好!”的人。Juan Pablo Vielma 在他 2020 年 JuliaCon 主题演讲中可能说得最好:“Julia 让你变得大胆”。敬那些大胆的人,那些试图做看似超出能力范围的事情的人。永远不要停止大胆。
十年前,我喜欢关注科技领域任何新版本的发布,同时尝试学习 SQL 和足够多的 R 来在我的第一份真正的工作中进行数据分析。我记得我正在处理一个 R 脚本,该脚本需要循环遍历 3300 万行数据,执行一项复杂的滞后/连接/篮子类型的计算,运行需要 18 个小时。就在其中一次 18 小时的运行过程中,我看到了 Julia 的公告帖子,并立即渴望获得它承诺的简单性能。我一个周末阅读了最初的手册,在接下来的周一早上重写了我的脚本,它在 5 分钟内就运行完成了。我以为我肯定犯了什么早期终止错误,但事实并非如此,它真的就是那么快。从那时起,我知道我需要方法将我的数据直接读取到 Julia 中,因此我开始开发我的前两个 Julia 包:ODBC.jl 和 CSV.jl。我从未上过计算机科学课,也不是开发人员,所以我想我是第一个纯粹通过 Julia 学习编程的人之一。
在 2019 年秋季,我第一次了解 Julia,当时我正在观看麻省理工学院的在线课程,该课程推荐将 Julia 用于作业。在第一次接触时,我立即被多重分派带来的无限组合能力所打动。结合 Lisp 风格的元编程,在 Julia 中,我们可以轻松地实现其他语言中需要复杂且笨拙的设计模式的接口。更好的是,只要您允许初始编译花费一小段时间,Julia 就会非常高效地执行这些操作。
从那时起,我在社区中获得了非常愉快的体验。当我创建了一个修复 r-str 格式的一行 PR 时,这是我第一次为开源项目做出贡献,它很快就得到了维护人员的热烈欢迎。从那时起,我一直定期为 Julia 社区做出贡献,因为我觉得我的尝试,也许很幼稚,会对每个人产生很大的影响。
我在原始公告发布几天后阅读了“Why We Created Julia”的博文,但当时并没有给予太多关注。大约 3-4 年后,在我攻读天体物理学博士学位期间,我发现自己使用了多种语言的拼凑组合(Fortran 用于速度,IDL 用于探索性工作,等等),并阅读了一篇再次提到 Julia 的论文,因此我终于有了“嘿,这个双语言问题确实有意义”的顿悟时刻。吸引我的不是速度(我之前使用过 Fortran,对于那个目的来说已经足够了),而是整个生态系统的可组合性,它允许你轻松利用其他人的工作,以及一群非常聪明和知识渊博的人组成的优秀社区。
出于一些我仍然不理解的原因,如今我成为了 BinaryBuilder.jl
和 Yggdrasil 的共同维护者,这两个生态系统组件突出了 Julia 常常被遗忘的一个特性:与其他语言交互的便捷性。然而,我为社区做出的最大贡献无疑是 StarWarsArrays.jl
,我从不放过在关于数组 0 基索引与 1 基索引优缺点的无休止讨论中提及它。
我第一次记得认真评估 Julia 是在 2013 年 11 月的神经科学学会会议上。当时我正在攻读博士学位,并且对 MATLAB 感到极其沮丧,特别是实现自定义数组方面遇到的挑战。我的实验室开发了一个类似数组的对象来支持我们的数据分析,但尽管有超过 2000 行代码专门用于 subsref
,我们仍然在与错误、不一致和性能挑战作斗争。我们不仅将分析重写为 C/mex 以提高性能,而且还重写了基本的核心功能(说真的,包括 dir
和 fread
)。Julia——即使在 v0.2 的粗糙状态下——也像一股清新的空气,我立即看到了它的前景。
比软件本身更令人兴奋的是围绕它形成的充满活力的开源社区。我发现即使是最小的贡献也具有明显的回报,尤其是在对比我面临的其他挑战时。我很快将精力集中在数组上(例如,使用三行代码即可实现 快速的自定义数组),并在我们向 1.0 版本迈进的过程中,后来集中在广播上。我很荣幸能成为这个令人惊叹的人群社区的一员,并且为我们共同构建的成果感到无比自豪。
当我寻找 Python 的替代方案用于我的硕士论文时,我遇到了 Julia。当时我主要是一位 Fortran 用户,就像许多物理学学生一样,而 Python 感觉慢得难以置信。我在寻找介于这两种语言之间的某种东西时,几乎偶然地发现了 Julia。最让我惊叹的不是语言本身的技术壮举,而是 Julia 及其社区是如何紧密交织在一起的。来自一个代码由导师传授给学生,几乎没有解释或注释的世界,这正是我非常看重的。
我很幸运地能够在 2020 年夏季作为 Google Summer of Code 项目的一部分,开始为 SciML 组织做出贡献,当时我正在开发 ReservoirComputing.jl。这也是我个人参与开源软件贡献之旅的开始,而 Julia 语言使这一过渡变得异常简单。
我最初是在 GERAD 研究中心(加拿大蒙特利尔)进行研究实习时开始使用 Julia 的,当时我正在撰写关于数学优化的硕士和学士论文。从那时起已经过去几年了,我现在是工程专业的博士候选人,我将在 INRIA(法国)进行实习,但有一件事始终如一……我对 Julia 语言的爱。我一直向拉丁美洲的朋友和同事推荐 Julia,即使由于西班牙语 Julia 资源的匮乏,说服他们变得很困难。我坚信开放获取知识,不设任何障碍(无论是语言障碍、可访问性还是其他障碍),我将永远为此而倡导。
我很荣幸能够参与翻译了第一批西班牙语 Julia 书籍之一 “Intro a Julia”,以方便西班牙裔社区使用 Julia。
我希望在未来的几年里继续成为这个很棒的社区的一员。让我们坚持 20 年!
来自智利康塞普西翁的问候!
我是在 2015 年第一次接触到 Julia 的,当时我还是一个本科生,对科学计算一无所知。然后,我加入了一个研究实验室,该实验室用 C 编写了非常底层的科学代码。当我看到编写和维护该代码所需的时间和精力后,我理解了 Julia 的前景。在我看来,如果你想编写快速可扩展的数值代码,但又不想编写 C/C++/Fortran,Julia 可能是你唯一的选项。
Julia 不是人们转向高效科学计算的唯一解决方案。带有 Python 接口的 C/C++ 库也变得越来越流行,但通过 Circuitscape 项目,我们证明了从头到尾使用纯 Julia 代码可以胜过这些库,同时与脚本语言一样易于开发和维护。Julia 还为科学计算带来了激动人心的新理念!使用 Julia 编译器来推断和操作代码,使你能够利用过去必须硬编码的旧数值技巧,并发明新的技巧,例如自动微分,使科学代码可微分。
Julia 社区开放、谦逊且包容,每天都在努力欢迎新贡献者并降低学生入门门槛。这是 Julia 最大的优势之一。我个人迄今为止的整个职业生涯都归功于我通过社区建立的关系。
我相信这门语言会越来越好,发展得更快。我 毫不怀疑,在未来 10 年内,Julia 将被称为“科学的语言”。
我第一次接触 Julia 是在 2019 年初,当时我作为一名本科生正在寻找替代的深度学习生态系统,并偶然发现了 Flux。由于之前被 Python 不可靠的 pip/conda 安装和 CUDA/cuDNN 安装的混乱所困扰,我惊叹于其简单的设置过程,以及我能够很快开始训练网络。根据其 0.x 版本和易于理解的语法来判断生态系统,我几乎肯定性能会很糟糕——但训练的竞争速度却是一个惊喜,让我着迷。
这促使我参加了 JSoC 2019,与 TuringLang 合作,以及 GSoC 2020,帮助构建 JuliaGaussianProcesses 生态系统。这段经历非常好,说服我将 Julia 用于我在 MIT-ProbComp 的论文,后来全职加入 Julia Computing,为 SciML 生态系统的开发做出贡献。
直到今天,我仍然惊叹于整个生态系统的模块化,并感谢诸如 Requires.jl、BinaryBuilder.jl、Pluto.jl、PackageCompiler.jl 等项目的存在,这些项目极大地提高了我的工作流程质量,并让我每天都充满工作热情。
我在大学期间,做 WPI 大三的互动资格项目时,第一次了解了 Julia。我的项目重点关注有限元方法的语言和可视化技术。IPython Notebooks(现在的 Jupyter)当时还很新,它是我的项目的重要组成部分。Julia 与 IPython Notebooks 具有很好的集成,当时我非常喜欢 Octave。我在早期类似 Octave 的语法和方法中感觉很自在,而 IPython Notebooks 对于演示来说非常棒。Graydon Hoare(Rust 的创建者)的两篇帖子真正让我信服了 Julia。
在大三和大四之间的暑假里,我进行 3D 打印研究,一只脚在 Python,另一只脚在 Julia。当 Graydon 在 7 月份发布了他的第 2 部分时,我认为这足以让我下定决心。后来我加入了实验室的一个衍生公司 Voxel8,我们在那里开发了一个用 Julia 编写的路径规划器。在这个社区中结交朋友和合作非常棒。我对 Julia 的未来充满期待。
我第一次听说 Julia 大概是在 2017 年。当时我主要是一位 R 用户,并且越来越多地接触 Python,但它似乎并没有成为我工具包的令人满意的扩展。然后出现了 Julia,它首先展现了其作为简单 Rcpp 例程替代品的潜力。Julia 的教育性文档让我对计算最佳实践有了新的认识。这打开了 Julia 前景的大门,它是一种具有编译性能的高效语言。快进到一家投资公司初创企业,Julia 成为我们预测建模工具包的核心,因为我们使用轻量级代码库扩展了提升树功能,并借助 ChainRules 实施了新的基于梯度的方法。利用其不断扩展的包生态系统(如 Genie),Julia 成为我们基础设施的关键,从新的算法开发到会计系统、数据监控和面向客户的可视化。从更新的语言构建核心公司组件确实带来了不安全感,但迄今为止已经得到了充分的回报。
我第一次接触 Julia 大概是在 2016 年,当时我研究实验室的一位同事向我介绍了它。我花了一些时间尝试学习这门语言,但并没有将其用于任何项目或日常使用。快进到 2018 年,我们的实验室启动了一个新的研究项目,旨在探索元建模问题,例如模型组合和模型探索。随着 Julia 正式发布 v1.0
版本以及它的一流元编程支持和多重派发,确实没有其他语言能够轻松地支持我们正在进行的工作,而无需使用笨拙且不优雅的解决方案。在尝试了许多不同的元建模方法并进行了多次重写之后,我们得以启动 AlgebraicJulia,并将科学建模与范畴论的组合思想结合起来。每次我在我们的软件中添加利用 Julia 元编程功能的新功能时,我都会再次肯定我们选择使用 Julia 来进行此项目的决定。
我在尝试寻找一个感兴趣的开源项目以参与 GSoC'17 时偶然发现了 Julia。那一年我最终没有申请,但开始在 Slack 和 Discourse 上闲逛,它成为了我日常生活的一部分。我几乎可以说我是通过 Julia 学习编程的,我非常感谢我们拥有的这个强大的社区,并且非常期待未来几年将会发生的一切。
我并不是 Julia 的早期使用者。我第一次听说这门语言是在 2014 年左右,当时我在读研究生,通过一系列博客文章了解到它。Julia 看起来像 Python,而且据说速度更快,所以我认为我可以使用它来加速我当时试图计算的一些地统计模型。我并非来自强大的数值计算背景,所以一开始我对所有不熟悉的词汇感到有点害怕。当时有很多博客文章都在说 Julia 多么棒,但关于编写 Julia 代码或与 Python/R 交互的资源却很少,所以我回到了 R 和 Python,并决定关注 Julia 的发展。
几年后,我观看了 Chris Rackauckas 在 YouTube 上发布的一些关于如何在 Julia 中求解微分方程以及如何在 Julia 中创建包的教程,我对它的简单程度印象深刻。不仅所有包都得到了改进,而且还有一些人愿意帮助其他人学习如何使用这门语言。因此,我开始尽可能地将更多 Julia 代码融入我的项目中。现在,在开始新项目时,Julia 是我的首选,尽管我仍然依靠 Python 进行一些深度学习工作。
Julia 最好的东西——除了语言本身——就是 Julia 用户。我从未见过一个群体如此愿意为各个水平的新用户提供非正式的指导和支持。
我第一次遇到 Julia 大概是在 2017 年,当时我正在做一个个人项目,编写一个用于求解具有伪谱方法的二维偏微分方程的“通用”代码。我尝试使用 MATLAB(笨拙)和 python(慢!)编写我的软件——主要包括广播数组运算和 FFT——直到最后转向 Julia,这带来了 30% 的速度提升!更重要的是,我发现了 Julia 社区的支持和才华,以及我从未意识到的对软件工程的热爱。一两年后,气候建模联盟决定将 Julia 作为其新气候模型的语言,我立即加入了进来。
我不记得我是什么时候开始使用 Julia 的。我只知道这发生在我开始博士学习之前不久;当时 Julia 的版本是 0.3.x,但很快我就切换到 0.4 的源代码版本。出于某种原因,我当时正在学习一本关于实现卡尔曼滤波器的书籍。
我相信我的第一印象是:与 Python 不同,数学的语法实际上很好并且是一流的;与 MATLAB 不同,它实际上是一种可用的编程语言。
我确实知道,如果没有 Julia 社区,我不太可能完成我的博士学位(当然,我也没有我现在的工作)。这是一个理想的大学式社区,很少有大学能够真正达到。来自各个领域的众多专业知识的大熔炉。
2015 年,我是英国布鲁内尔大学的一名高级讲师,教授控制系统理论等课程。我确信,除了 MATLAB/Octave/Scilab 之外,一定有更好的选择。我还决心找到比 Erlang 更具科学能力的东西,我也在尝试使用它。然后我发现了 Julia,从那时起我就成为了它的布道者。
我第一次了解 Julia 是在 2019 年,当时在我的线性代数课程中,我们使用 Julia 来探索各种矩阵运算的效果。从那时跳到 2021 年,我对性能优化产生了兴趣,并遇到了 Valentin Churavy,这自然地导致了我对 Julia 后端的工作,以提高代码生成的的速度以及生成的代码本身的性能。
我从 2017 年开始使用 Julia,当时版本号还是 0.5。我最初是通过 IRC 频道与社区取得联系,然后被拉到了 Gitter,在那里我立即感受到了一种极其积极和包容的氛围。几天之内,我被鼓励打开 PR 并参与围绕该语言的讨论,特别是与线性代数和泛型编程相关的讨论。我一直认为社区结构非常扁平,与核心开发人员的距离很短。我与之交流的每个人都思想开放,愿意讨论提案,并将新老用户都纳入决策过程。我参加的社区活动也一直非常热情和友好,这无疑是我认为任何编程语言最重要的方面。我现在在一家私营公司全职使用 Julia,不幸的是,我几乎没有时间参与社区活动,但我还是想在这里说几句话,并希望有一天能够参加 JuliaCon!
在学习和博士期间,我使用过多种编程语言。我第一次了解 Julia 大概是在 2014 年或 2015 年,但当时没有太多机会使用它。2016 年,我对 Matlab 的双语言障碍以及对象编码风格感到厌烦。因此,我决定尝试一下 Julia 是否可以更好地解决这个问题。从一开始,我就被这个建设性和乐于助人的社区所震撼,最终开始开发 Manopt.jl。随后真正让我感到惊讶的是,在发布该包时收到的第一个反馈导致了第二个包的诞生,并且有两个共同开发者,如今它的代码库比我的第一个包大得多。 Manifolds.jl 由从未在现实生活中见过面的人开发。除了代码风格和轻松组合不同包的可能性之外,我最喜欢的是,虽然代码看起来仍然非常简单且易于使用,但速度仍然惊人。我仍然对社区在论坛或任何讨论渠道中表现出的友好和乐于助人感到惊叹。这两个方面——代码风格和速度以及社区——是我认为使用 Julia 是我在数值计算和代码开发方面做出的最佳选择之一的原因。
2017 年,我正在寻找一种可以用来替换基于 SAS 的缓慢投资组合风险管理平台的技术。Julia 实际上在一年前就引起了我的注意,但它过去偶尔会崩溃。到 2017 年 11 月,我再次关注了 Julia,并且获得了很好的体验(版本 0.6.3)。我构建了 SASLib.jl 作为该练习的一部分。那么我的体验如何呢?
社区:我使用了 Discourse,并且友善的人们一路帮助我。
生产力:使用 Revise.jl,我能够使用基于 REPL 的工作流程快速构建新想法的原型。
性能:在应用一些简单的更改(例如在结构体中使用具体类型)后,与 Python 的 SAS 读取器相比,性能提高了 10-100 倍。
为了用 Julia 替换企业级系统,我不得不做更多原型,这包括
读取/写入 SAS 数据集
运行 Oracle 查询并执行插入/更新操作
与金融 C 库(FINCAD)集成
以上所有操作都涉及使用 Apache Spark 等竞争技术栈运行性能基准测试。经过几个月的原型设计和游说,我很高兴地将 Julia 作为风险管理系统的首选语言。
我非常喜欢 Julia 语言,以至于我想把我的热爱传播给其他人。我以编写 Hands-on Design Patterns and Best Practices with Julia 这本书的形式做到了这一点。我认为许多来自不同背景(例如面向对象编程)的人可以从学习 Julia 语言开创的新范式中受益。编写这本书也帮助我成长为一名更好的 Julia 程序员。
虽然我目前的工作(Meta)中没有机会再使用 Julia,但我仍然非常深入地参与 Julia 社区工作。我是 Humans-of-Julia Discord 服务器 的管理员/版主。此外,我一直志愿帮助组织/审查 JuliaCon 的提案。
我从 2017 年开始使用 Julia,当时我正在寻找加快常微分方程组数值积分的方法。我偶然发现了 DifferentialEquations.jl 的文档,我印象非常深刻,我意识到仅仅为了这个包学习一门新语言是值得的。很快,我开始在聊天中提问,并在几周后提交了我的第一个 PR。社区非常欢迎我,并且我在此过程中学到了许多有趣的新东西。
2012 年,我在大众/奥迪实习,从事 C++ 的图像和传感器处理工作。我对即使是最小的事情也需要多少样板代码以及一切多么困难感到震惊,所以我开始寻找另一种语言来确定。Python 看起来很棒,但并不是一个真正可行的选择,因为我真的很喜欢需要高性能的项目,例如光线追踪、3D 渲染、机器学习和图像处理。我开始设计一个带有良好元编程支持、C 和 GPU 互操作(无需开销)并且不使用 OOP 来使数学代码更易于扩展和编写的小型玩具语言。
半年后,一个朋友转发给我了“为什么我们创建 Julia”的博文。我非常兴奋,因为它满足了我的玩具语言应该提供的任何功能。我放弃了编写我自己的语言的梦想(谢天谢地),并开始用 Julia 编写我的学士论文和所有其他项目。
我做过的最好的编程决定 :)
我第一次真正接触 Julia 是通过 18.S191 这门课程。之前我在 TIOBE 指数和偶尔的 Hacker News 帖子中听说过 Julia,但从未真正深入了解过。然而,这次情况有所不同。当时是期末考试周,我自然而然地寻找着“高效拖延”的方法。我“高效拖延”的惯例之一就是浏览 MIT-OCW,并关注任何对我来说哪怕有一点点有趣的课程。
那时我看到了 18.S191。它吸引我的眼球有两个原因。第一,我知道这门课程之前有一个版本是用 Python 教授的,这让我很好奇为什么他们会切换到另一种语言。第二,更重要的是,我看到 Grant Sanderson 是这门课程的讲师之一?!3B1B 背后的那个人在 MIT 的课程里做什么?!这可能不是点击诱导,但确实吸引了我的注意力。
我跟着这门课学习了一段时间,非常喜欢它的一切看起来多么轻松流畅。我想尝试一下。我去了网站,下载了 Julia 并进行了设置。我真的很喜欢它上手的容易程度以及它给我带来的直观感受。我感觉这是我第一次遇到一种语言,它真正地与我产生了共鸣。我至今仍有这种感觉。我浏览了一些 Julia 中的项目和包。我几乎一无所知。我之前甚至从未听说过其中的一些词语。现在我更加兴奋了,因为我能够发现如此多的我完全不知道的东西。我最终参加了 Julia 语言的 Google Summer of Code 项目,说实话,那是我经历过的最好的体验之一。我现在每天都在使用 Julia,而且我真心期待在很长一段时间内继续使用它。
我仍在不断地发现许多我完全不知道的东西,这一切都要归功于 Julia 以及围绕它构建的精彩的社区和生态系统。
*因为语法而来,因为速度和社区而留.* 我就是这样。:)
我在那篇博文发布一年后开始在 MIT 工作。我渴望找到走廊里到处都是的新东西来玩,当有人告诉我隔壁大楼开发了一种很酷的新语言,它承诺速度快、优雅且新颖时,我就报名了。看到 Julia 稳定下来并发展壮大,同时忠于其使命,这真是太好了。也许我最喜欢的是安装和复现的便捷性……Pkg 和 JLL 基础设施使其成为一个杀手级特性。或者可能是社区……为包贡献代码,最近也为 Julia 本身贡献代码,这真的让我了解了 FOSS 体验有多好,以及从中可以学到多少东西。我回首我早期的贡献,感到很尴尬,但如果你没有这种感觉,那么你就没有进步,对吧?
我是一名二年级的本科生,几个月前开始使用 Julia 进行一个涉及自动微分的项目,从 NumPy 迁移而来。使用 Julia 非常有趣。当然,当我遇到库中的错误时,我可能无法在 StackOverflow 上找到遇到完全相同错误的人。但取而代之的是,我可以查看可读的源代码!在使用 Julia 的过程中,我学到了很多关于语言设计、高性能计算以及更多其他方面的知识。没有什么感觉像黑盒,我发现自己渴望为生态系统做出贡献。我很高兴完成我的待办事项列表中的 PR,并看看这门语言在未来几年将如何发展 :)
我在 2014 年寻找 MATLAB 的开源替代方案时,偶然发现了 Julia,当时正值从 0.2 升级到 0.3 的过渡期。快速搜索开发环境后,我发现了一个无法与 Julia 0.3 一起使用的废弃 IDE,一个简单的 Sublime Text 集成,以及一个看起来很酷的项目,叫做 Juno(当时基于 Light Table);让它在 Windows 上更好地工作是我的开源之旅的开始。稍后,Juno 迁移到新的 Atom 编辑器,我开始越来越多地参与贡献,这导致我在接下来的几年里维护 Juno——直到与 Julia for VS Code 扩展 团队合作,现在很多构建更好语言工具的努力都集中在那里。
这些年来,语言本身稳步改进,尽管偶尔会出现一些障碍或重大的破坏性变化。更多具有不同兴趣和 Julia 应用的人加入了社区,该社区最初是由一小群热情的早期采用者(大多具有科学背景)组成的紧密团体;在所有这些年中,社区始终保持着热情、乐于助人、友好,并且总体而言非常棒。
我开始博士研究时,尝试使用 LLVM 和许多基于它的语言。就在那个时候,一篇 Hacker News 帖子宣布了一种新的有趣的语言 Julia,它既是高级语言,又面向 LLVM!因此,我自然需要将这种语言纳入我对硬件加速器的研究中。因此,我开始着手为 Julia 开发一个 GPU 后端,并且从那以后一直没有停止。过去让 Julia 支持我们的 GPU 操作非常困难,但如今,这门语言变得越来越可扩展,因此我们应该能够很好地应对未来 10 年的计算机硬件发展趋势!
我在 2018 年偶然发现了 Julia。吸引我尝试这种新语言的真正原因仅仅是好奇心。在之前的学期,我刚学习了一门 Python 数据分析课程,并且之前也用过很多语言,所以我只是想知道它有什么与众不同之处。我之前从未参与过开源项目,但 Julia 社区似乎有些特别之处,它能够迅速吸引人们参与,从在 Discourse 和 Slack 上回答问题到真正为不同的项目和基础代码做出贡献。因此,我很快就自己开发了一个小型的包来满足课堂上的需求,最终我还为基础代码提交了我的第一个 PR。我很容易就沉迷于 Julia 的世界中,并且很快发现自己学习了大量关于编译器的知识。因为我想学习新的 Julia 语法,所以我还必须学习一些 Lisp,最终我发现自己身处 MIT,在许多其他同样热爱 Julia 并致力于开发令人兴奋的新应用的人们中间从事计算科学研究。期待未来 10 年,迫不及待地想看看 Julia 的未来会怎样!
2014 年,我正在编写 C 和 Python 代码来运行模拟和进行博士研究的计算,但我对两者都有些不满意。我的哥哥在听到此事后,告诉我了一种名为 Julia 的语言,它可能更适合我正在做的事情。我开始尝试 0.3 版本和 Learn X in Y minutes 的示例,然后开始阅读手册,我被它迷住了。之前,我并不知道使用浮点数或许多数值线性代数技巧时存在许多陷阱,但手册、源代码、贡献者都是不可思议的知识来源。一开始,如果我遇到问题,我会在 GitHub 上报告并等待,但后来我注意到查看源代码并理解发生了什么以及提出修复方案是多么容易,这也导致我学习了 Git,了解了良好的编码实践,以及许多计算机科学概念。总的来说,它使我成为一名更好的程序员和科学家。即使我不在使用 Julia 工作,我也会用它进行原型设计。此外,Julia 社区是我在网上发现的最好的社区之一。无论 Julia 存在了 10 年还是更久,我都知道我将在未来几年继续学习并为这门语言及其周围的人们感到惊叹。
我第一次偶然发现 Julia 是当我想为工业系统构建一个高性能数字孪生模拟器时。我用了一天时间构建了一个端到端的可微模拟器,速度提高了 1000 倍,并且无缝集成了微分方程和机器学习模型的混合。相比之下,使用 Python(到那时为止,我已经使用 Python 5 年多了)作为我的首选编程语言,我花了 3 周时间,但仍然没有完成。我惊叹不已,确信这就是机器学习增强型真实安全关键工程应用的未来所在。从那时起,我知道我永远不会回头,并且我将参与实现这一目标的旅程。
我在这篇博文发布大约一个月后才看到它。我之前读过 Doug Bates 的另一篇博文,他在其中尝试过
一种名为 Julia 的非常有趣的新语言
当时,我是一名计量经济学专业的研究生,并且广泛使用过 R。因此,我了解 Doug Bates,并且立即决定仔细看看这种有趣的新语言。接下来我读到了“为什么我们创建……”的博文,我准备了解更多。
我的博士研究需要线性代数功能,所以我尝试了当时 Julia 中可用的功能。首先我发现很多功能都坏了,然后我意识到我可以修复它们。我开始着手修复。与语言的创建者以及 Julia 的其他早期采用者互动非常有趣且具有启发意义。它也最终塑造了我接下来的十年人生。
当我还是硕士生时,我正在 Matlab 中进行分位数回归练习。我受限于计算能力,并询问了其他替代方案。系里的一位博士生告诉我:“问问 Andreas Noack,他参与了一个名为 Julia 的项目,据说速度很快。”没过多久,我就安装了 Julia Studio 并开始测试线性代数功能。
作为一名研究生,我发现自己经常进行最大似然估计,因此我需要进行非线性优化。我发现了 Optim.jl,它当时已经发展得相当不错了,但仍然存在很多粗糙的地方。一个 Google Summer of Code 项目接着另一个,现在我每天都在工作中使用 Julia。
我第一次开始使用 Julia(v0.5/v0.6)是在 2017 年,当时我还是个大二学生。我和林逸飞在同一个社团,是他向我介绍了这门语言。我被它的语言设计、多重分派的使用以及解决两门语言问题的雄心所吸引。所以,我开始阅读文档,一步步地将一些代码移植到 Julia 上,现在我几乎所有东西都用它来写了。看到一门语言是如何演变的,变得越来越好,真是太神奇了。
回到 2015 年 3 月,在我加入一家初创公司(与我在 InterSystems 之前合作的一些人)的第一周,我被分配的任务是为产品选择一种编程语言,该产品需要进行密集的数值分析(一个基于自然语言处理思想的数据库)。一位工程师建议我研究一下 Julia,说它可能很合适。当时 Julia 还是 0.3 版本,正处于一些相当重大的语法变化的中间阶段,所以这不是一个容易的选择,然而我很快发现,我可以编写出与我的高度优化的 C 代码一样快的代码,但生产效率更高,使用泛型代码、元编程和多重分派。当时字符串处理方面存在一些 bug,所以我在最初的几个月里花了很多时间向基础 Julia 代码库提交 PR,但我能看到这是值得的——在那之后,我们放弃了 C 和 Python,转而只使用 Julia 来实现数据库。那年 5 月,我有幸参加了 Jeff Bezanson 的博士论文答辩,7 月参加了在 MIT 举办的 JuliaCon,从那时起我就成为了 Julia 的忠实粉丝。在过去的七年里,我也在 JuliaCon、Gitter、Slack、Zulip、Discourse 以及最近的 Humans of Julia Discord 服务器上结识了许多朋友。我仍在不断发现这门语言新的有趣之处,并希望在未来的 10 年里继续主要或完全使用 Julia 进行编程!
我第一次接触 Julia 是在 2017 年左右上线性优化课程的时候。第一次看到它简洁的语法和精心设计的宏,我感觉它会是一种非常封闭和利基的语言,所以决定不在其他项目中使用它。一年后,我有机会使用 Julia 进行图像处理研究。这次体验非常令人满意,因为“Images.jl”中提供了很多工具。那时,我了解了 Julia 的可扩展性以及它如何解决了我的几乎所有本科生问题。可以毫不夸张地说,从那时起,我再也不用考虑在学校/个人项目中应该使用哪种语言了。
2020 年,我被一名学生吸引到了 Julia。在常规课程因新冠疫情停课后,我为几组学生开设了额外课程。我们当时使用 Python,代码运行速度非常慢(一个随机的、基于 agent 的模型,大约有 700 万个 agent,对应着里约热内卢的人口,并且包含各种人口统计数据以及社会、学校和工作相关的网络等等)。我们正在尝试优化代码,这时一个学生带来了一个用 Julia 编写的代码版本,速度快得惊人。然后,我了解了 DifferentialEquations 生态系统(我的主要研究领域)、Flux、JuMP 和 SciML。我必须深入了解它。不久之后,在 Humans of Julia Discord 服务器上好心人的帮助下,我用 Julia 参加了 2020 年的 Advent of Code 挑战赛。我进一步学习了多重分派、元编程和性能技巧。我被迷住了。大多数代码是用 Julia 本身编写的这一事实让你学到了很多关于代码各个方面的知识。包和测试让生活变得如此简单。而且社区非常友好。至于基于 1 的索引……好吧,我想这也意味着我们有一个先机……
我第一次接触 Julia 是在 2013 年的 SciPy 大会上,Jeff 和 Stefan 做了一个演讲——但我完全没有理解 Julia 与 Python 的区别以及它为什么有趣。(这一点现在仍然不容易解释!)那年夏天晚些时候,我再次遇到了他们,当时他们和 Steven Johnson 正在为 IPython 创建第一个非 Python 内核,后来成为了 Jupyter 项目。Jeff 在午餐时耐心地向我解释了 Julia 的不同之处和优点,这让我更加好奇。
接下来的学期,我让我的一个本科生演示了 Julia,但再一次我没有理解它。最后,在 2014 年初,我的同事 Luis Benet 尝试用它来编写我们正在尝试编写的新区间算术库。与可怕的 Python 版本相比,代码如此干净和漂亮!当时,性能与该特定项目无关;尽管如此,令人大开眼界的是,在 Julia 中计算一组随机游走轨迹的速度可以轻松地比几乎相同的 Python 代码快 50 倍。从那时起,我就迷上了它。
2014 年,我在 SciPy 大会上做了一个 Julia 教程,目的是强迫自己正确地学习这门语言。(后来我发现 Jeff 和 Stefan 也被要求做这个教程,但他们无法参加。)之前我在 MIT Julia 实验室与 Alan Edelman 及其团队共度了几周,以便有人可以回答我的问题;陈嘉豪也是帮助我很多的人之一。
接下来的学期,我强迫我可怜的计算物理学生使用 Julia——0.3 版本在课程开始几周后发布。从那时起,我就在教学和研究中完全使用 Julia,并从这个优秀的社区中学到了很多关于如何思考软件开发的知识。
我第一次使用 Julia 是在 v1.4(2020 年 3 月)发布的时候。疫情初期给了我一些额外的空闲时间,让我真正探索一下这门我一直在听到好评的新语言。我当时刚开始进行博士论文的研究,很喜欢使用一门语言而不是在 Python 和 C++/Rust 之间切换的想法(当时我还没有决定要使用哪一个)。起初,这门语言最吸引人的地方是它的速度。然而,我很快就被它的语言设计(类型系统、多重分派……)迷住了,从那以后它就成为了我的主要语言。Julia Discourse、Slack 和 Zulip 的聊天室让我学到了很多关于这门语言内部运作的知识,同时也让我感觉自己成为了这个充满激情、才华横溢的社区的一员。
从 2011 年在 Alan 的办公室第一次听说 Julia 开始,Julia 在过去的十年里给我带来了如此多的快乐和兴奋,并成为了我学术和职业生活中不可或缺的伙伴。一个反复出现的主题是,Julia 令我惊叹的地方是“它就是能工作”,超出了我的想象!我永远不会忘记运行大规模数值实验探索随机矩阵理论普适性规律之外的事物时的激动。我也永远不会忘记看到 ForwardDiff “恰好”得到了随机矩阵分解雅可比矩阵的正确答案的魔力。Julia 取得的史无前例的成就,是成功地弥合了计算科学和计算机科学之间的鸿沟,不仅仅是技术方面,它还将不同的社区聚集在一起!在我看来,这正是解决我们现在和未来时代重大问题的基础。
MIT 的计算思维课程向我介绍了 Julia。那是在隔离期的开始,我正在浏览在线资源以更深入地了解科学计算。来自前端计算领域的我,发现 Julia 令人惊叹,因为它通过 Pluto 与 HTML 进行了独特的集成。我开始为 Pluto.jl 项目贡献代码——最初是修复一些 CSS,然后是一些 React,最后深入研究 Pluto 的内部实现。Pluto 出现在 Julia 生态系统中并非偶然;当涉及到在 HTML 中show
东西时,Julia 非常友好。再加上它的速度,它能够实现无延迟的交互,Julia 创造了完美的交互式编程环境,我感到高兴和荣幸能成为这段旅程的一部分!
我第一次听说 Julia 是在 2015 年春季,我博士导师的一封邮件。任务:尝试从源代码安装 Julia 并移植一些 Matlab 代码。那是我博士生涯的第一年,这是我与导师的第一个项目。最初,我需要生成一些非常大的图来验证它们上的某个属性,但我之前整个流程(包括 C++ 和 Matlab 代码的组合)需要几个小时。使用 Julia,相同的流程缩短到不到一个小时。
这段经历为我的整个博士生涯设定了轨迹,我们很快意识到我将使用 Julia 完成我剩余的研究项目。那个夏天,我主要致力于 MatrixNetworks.jl 的开发,其中包含了我和其他研究团队成员之后需要的大部分图算法。这既令人着迷又令人兴奋。用如此简单易懂的代码创建一些东西,同时又能拥有 C 或 C++ 的性能,这令人着迷。意识到你可以深入挖掘,进入 Julia 的内部,并从你的代码中榨取每一份性能,这是一种令人兴奋的体验。就像,终于,出现了一种允许你表达任何算法思想的语言,而语言本身不会构成障碍。
在某个时刻(可能是 2016 年的 JuliaCon 左右),我意识到 Julia 对我来说已经不仅仅是一门编程语言了。它给了我一个社区,在那里我遇到了在这个世界上我最喜欢的一些人,并且我每天都在从这个社区学习。我非常感谢 Julia 今天的存在!
我第一次接触 Julia 是在 v0.2 时代,当时我试图将其用于课程项目中高性能计算的高生产力环境。它还没有完全准备好,科学计算的势头正在转向 Python,因为人们说“Numpy 足够快了”。我的研究项目涉及一些 C/OpenMP 代码,根据 HPC 中已确立的研究人员的说法,“OpenMP 足够简单”。所以,我回到了 C/OpenMP 和 Python 的组合,并开始着手开发用于谱聚类的新的数值方法。最终,我需要访问 ARPACK 功能以访问未收敛的 Ritz 向量,而这些向量没有通过 Scipy API 公开,这导致我阅读了 ARPACK 源代码。在那里我发现了一条添加我需要功能的 TODO 注释。Rich LeHoucq 知道它很重要,但在 1996 年记下笔记后就没有继续处理。幸运的是,到那时,陈嘉豪和 Andreas Noack 正在开发 Arnoldi 方法的纯 Julia 实现。我接受了这个任务并开始工作。那一年,陈嘉豪、Andreas、Rich 和我参加了一个会议。我展示了用 Julia 获得的第一个研究成果,并且再也没有回头。
我感谢 Julia 社区中所有为构建 Julia 及其惊人的包生态系统付出努力的人。值得庆幸的是,我们从未让“X 足够快”或“Y 足够简单”阻止我们构建我们今天拥有的语言、生态系统和社区。
我是一名统计学家,从 1997 年开始使用 R,直到 2018 年,当时我正在进行一个模拟研究,遇到了性能瓶颈。一位 Python 专家试图帮助我,但在这个编程语言中,性能缓慢的问题依然存在。我当时考虑过学习 C 语言,但过程很痛苦,这时有人向我提到 Julia 很有前景,所以我开始阅读相关资料并关注 Julia 页面。最终,我决定转向 Julia,不是尝试一下,而是完全将我的所有工作迁移到 Julia,无论如何。我对在 Julia 中取得的成果非常满意,仍在不断学习,因为我糟糕的计算技能和将近 53 岁的年龄并没有帮助,但从 2019 年开始,我所有的编码都在 Julia 中完成,我喜欢它的语法,一点也不怀念 R。
我在 2012 年那篇著名的博客文章发布几周后了解到 Julia。我的反应是:又一个承诺很棒但无法与我优化的 Numpy 工作流竞争的项目。我简单测试了一下,但很快就放弃了。一年后,这个项目仍然存活,我又尝试了一次,最终开发了 NFFT.jl 包。我将我的 Julia NFFT 实现与 C 实现进行了比较,发现它很慢。我提交了 issue 4832,Jeff 和 Tim Holy 帮助我修复了类型不稳定性。哇,我彻底被征服了。这门语言太棒了。
接下来,我至少花了一年时间,利用所有空闲时间进行密集编程。当时 Jameson 正在推动 Gtk.jl 项目,他也帮助我参与其中。我在一家公司工作,使用 Julia 而不是 Python 开发了一个内部 GUI 原型。这是在 2014 年,也就是 Julia 发布两年后。我很自豪能够对 Julia 核心做出一些小的改进,虽然不是什么大改动,但这些小改动帮助我更多地了解了这门迷人的语言。我的梦想是将 Julia 嵌入到公司的 C# 框架中:这促使我编写了嵌入文档的第一个版本。尽管我的英语水平不完美,但它还是被合并了。哇,那感觉太棒了。
然后我迎来了我的 Julia 高光时刻,总结在 PR 6741 中,名为“WIP:多线程实验”。当时 Jeff 和其他人表示 Julia 不需要多线程。分布式计算出错的可能性更小。但我贪心不足,想说服 Jeff,Julia 需要多线程,并且当我们拥有它时,Julia 有潜力变得更加强大!我有种直觉,它一定可以实现,因为编译后的 Julia 代码不会干扰运行时库(你好 Python,你好 GIL)。然后我深入研究了 Julia 的内部机制,到处设置锁,出现段错误,出现死锁,感到很沮丧。但后来,在某个时刻,我得到了一个没有崩溃的程序。我仍然记得我开始 PR 的那一刻,社区开始推动我前进。我需要引用 Jeff 写的话:“不得不佩服这个 PR。它开始于用各种方法让系统崩溃的练习,但 tknopp 不在乎,因为他知道:命运眷顾勇者 :)”我一生都不会忘记这篇文章。我成为了这个伟大社区的一员。我有机会做出改变。这绝对是我最大的贡献,尽管 PR 从未以这种形式合并。但我让核心开发者相信多线程是可行的。这是在 2014 年。
然后我的生活完全改变了,因为我回到了学术界,并有机会成为一名生物医学成像教授。我将整个软件基础设施建立在 Julia 上,这在当时有点冒险,但这是我做出的最佳决定之一。跟随你的内心。我的同事们总是对我给予积极的反馈,说 Julia 让他们工作效率极高。将我们的研究代码打包并以开源形式发布也使代码更具可持续性,这在学术生涯中至关重要。
10 年,多么美好的时光,多么伟大的技术,多么伟大的人们。但现在是时候了:我期待未来 10 年激动人心的发展,以及数值分析专业的学生问我“Matlab”是什么的时候,因为他们从未听说过它。
我第一次接触 Julia 是在 2016 年,大约是我博士学位的第一个学期。我最初是一名纯粹的 C 语言程序员,为我的本科毕业论文做了一些基本工作,包括自编迭代映射和龙格-库塔常微分方程求解器。在博士期间,我开始使用 Python,我完全惊呆了。因为之前只用过 C,我心想:“哇,我可以在交互式环境下进行科学研究,并当场查看任何代码行的输出?”我简直不敢相信。好吧,对我来说不幸的是,我正在为我的项目求解数万个常微分方程,所以我很快意识到 Python 太慢了,我不得不回到 C 语言……当时一位同事(Rainer Engelken,也是 Julia 用户)在各个办公室“布道”Julia:“它像 Python 一样交互式,但像 C 一样快!”这听起来正是我想要的。我从 0.4.7 版本开始使用,预言成真了。所以我一直坚持使用它,现在轮到我到各个办公室宣传 Julia 了。
我非常感谢能够遇到这门语言,以及它的社区和所有帮助我走过这段旅程的优秀人士。毫不夸张地说,我的许多职业成功都归功于这门语言。我为博士论文编写的代码成为了我的第一个 Julia 包:DynamicalBilliards.jl。开发这个包让我学到了很多关于编写优质代码的知识,也让我意识到使用 Julia 创建高质量包是多么容易。在教授非线性动力学课程的过程中,我沮丧地意识到,没有通用的非线性动力学库。鉴于我使用 DynamicalBilliards.jl 的经验,我心想“好吧,我自己来开发一个,应该不难!”这花费了一些时间,但 Julia 使这个过程尽可能流畅,并催生了DynamicalSystems.jl,该库获得了国际非线性动力学软件奖,并撰写了一本关于非线性动力学的完整入门教科书由 Springer-Nature 出版,该书在每一章中都明确包含了 Julia 代码片段!现在,JuliaDynamics 组织已经发展壮大,由许多贡献者和包组成,我甚至迫不及待地想看看未来几年会发生什么!
2016 年初,我刚刚完成了高能物理博士学位,在此期间主要使用 C++ 工作。我开始了新的数据科学家工作,并正在寻找一门语言,特别是在经历了尝试使用 Python 进行大规模约束凸优化方面的挑战之后。似乎没有很多好的选择(当时 Scala 非常火)。我发现了 Julia,这是一种专注于科学和数值计算的新语言。这门语言有一些有趣的新想法,特别是多重分派作为其核心范式,但它正处于非常早期的开发阶段(我认为 v0.4 刚刚发布),我绝不可能最终使用它,尤其是在我的新工作中,对吧?
6 年后,从那以后,我几乎完全在工作和个人生活中都使用 Julia。它仍然是我最喜欢的语言,遥遥领先。它已经成为我生活中重要的一部分,我很高兴能够对大量的项目做出一些小的贡献。Julia 社区似乎是许多有趣人士的天然聚集地,尤其是那些同时具备计算和物理科学能力的人,Julia 许多明智的设计选择都归功于这一点。我预计在可预见的未来会继续使用 Julia 并参与开源 Julia 项目。
我在生物工程硕士学习期间,在一门关于信息学和算法的课程中发现了编程,使用的是 Visual Basic。我很快就对编码的创造潜力感到兴奋。我用 VB 创建了一些 GUI,用于机械工程和环境传感,这个过程充满了思考和兴奋,我非常喜欢它。后来,也在我的硕士期间,我接触了 MATLAB,并将其作为我的主要语言使用了接下来的 10 年。我在 MATLAB 中完成了我的整个博士学位,创建了更多用于交互式数据分析可视化的 GUI、许多具有复杂布局的绘图以及对大型数据集的分析。在我博士毕业后转到博士后职位时,我不得不切换到开源语言,因为他们没有 MATLAB 许可证。这是一个好机会,因为无论如何我都想使用开源语言。我考虑过 Python 和 R,但最终选择了 Julia。作为一名气候科学家,这篇文章至关重要。此外,在用 Python、R 和 Julia 编写代码后,我爱上了 Julia 的 REPL,而我对 Python 或 R 的任何东西都不太感兴趣。这也是一个学习更多关于个人 IDE 的机会(而不是仅仅使用 RStudio 或 MATLAB 内置的 IDE)。我尝试了各种 IDE,最终选择了 VIM + vimteractive。我还从 Windows 切换到 Linux,并开始更积极地使用 GitHub。我加入了 Julia 的 Slack 频道,尝试了 Plots.jl,并发现了 Makie.jl,它成为了我最喜欢的绘图包。然后我发现了 Franklin.jl 和 WGLMakie + JSServe。我发现了在 Julia 中可以做很多事情的可能性。最重要的是,我相信它可以解决我们在环境科学中遇到的“两种语言问题”,其中经验主义者使用脚本语言(主要是 R),因为他们需要简单性并且不关心速度,而建模者使用编译语言(主要是 Fortran),因为他们需要速度。通过允许这两个领域使用相同的语言,这将创造新的合作机会。这甚至超越了这一点,有可能使用多重分派创建超级模块化的地球系统模型,来自经验主义者和建模者。机器学习是另一个方面。我预计 Julia 将在未来几十年中在地球系统建模工作中快速发展,因此对于该领域的年轻研究人员来说,使用它完全有道理。我总是很兴奋地了解新的 Julia 版本、新的 Julia 包版本会带来什么,并且我最近创建了我的第一个包DAMMmodel.jl。
当我阅读“我们为什么要创建 Julia”时,“两种语言问题”并没有引起我太多的注意。我对解决它所需的步骤感到好奇,但真正引起我兴趣的是该团队对优秀语言设计的热情和兴趣,以及他们对任务的认真态度。随着我逐渐更多地参与到这门语言中,我发现自己越来越同意其设计决策,并欣赏语言中实用性和优雅性的融合和平衡。Julia 符合我心中对编程语言的构想,并且幸运地也符合我对科学计算和高性能语言的兴趣——我慢慢地又拥有了“最喜欢的编程语言”,那就是 Julia。
大约在 Julia 0.5 或 0.6 版本的时候,我在玩正则表达式时发现了一些小问题,并进行了报告。回复中提到了可能导致问题的代码部分,我能够快速从语言存储库中找到它们,理解代码,并在一个下午解决了问题。这时我突然意识到——双语言问题不仅仅是能够用同一种语言编写新的高性能代码;它还关乎能够用理解你自己的代码所需的相同知识来探索语言及其生态系统的所有(好吧,几乎所有)部分。并且能够使用你在日常代码中使用的相同工具和思维过程来探索、修复或增强它们,无论你在堆栈中处于多么深入的位置。它将力量交给了用户,同时保持“简单的事情简单”(正如 Larry Wall 所说)。这就是 Julia 对我来说成为一门很棒的语言的原因:它可以在一瞬间用于编写简洁优美的函数式代码,下一瞬间又可以切换到精心生成尽可能高效的代码——两者可以共存并相互通信,有时甚至可以是同一件事!
最近我在一个 Slack 讨论中写道
这就是为什么我在 2011 年后期偶然发现 Julia 时觉得它如此吸引人的原因。它是一种用于技术计算的动态类型、基于 REPL 的语言,构建于一个极其高效的多重派发实现之上,并配有 JIT 编译器,由非常有才华的人员设计,这些人对编程的各个方面都有全面的了解。而且这些开发人员在将任何特性整合到语言中之前都会非常谨慎地思考。与 Julia 社区合作一直以来都是,并且将继续是一段美好的体验。
今天我在开发一个新的包,Wordlegames.jl。我思考了 juliaup、PkgTemplates.jl、Julia 的 VSCode 扩展、Pkg.jl 以及许多其他工具的组合是如何使这项工作变得如此容易的。与这些才华横溢且慷慨的人们一起工作是一种乐趣。
我第一次了解 Julia 是在 2017 年,当时我在柏林攻读神经科学硕士学位。我当时正在进行实验室轮换,一直试图(不成功地)说服每个人放弃 MATLAB 而使用 Python。在其中一次场合,一位同事开玩笑说:“难道那些酷孩子不是在用 Julia 而不是 Python 吗?” 我感到惊讶和有点尴尬,因为我从未听说过这种语言(因此显然不是一个酷孩子),所以我上网搜索并找到了“我们为什么创建 Julia”的帖子。通读之后,我立刻感觉与创建 Julia 的人产生了共鸣,因为他们与我有着许多相同的价值观(以及对编程语言的抱怨)。从那一刻起,我便非常着迷,并在业余时间大量探索了 Julia——然而,并非用于我的大学工作,因为我不需要它的速度,工具方面存在太多摩擦,而且编译延迟让我有点害怕。然而,不久之后,我需要进行交互式 3D 绘图,并且对我的 Python 选项感到非常沮丧。我找到了 Makie.jl 包,它优雅的可观察绘图对我来说很有吸引力。我很快希望有更好的轴和布局选项,但当我打开问题时,我想要的却没有神奇地出现,我意识到我需要自己变得积极起来。因此,出乎意料地,我之前从未做过开源开发,我首先从 C++ 移植了一个约束求解器,然后贡献了自己的布局系统。几年后,我仍然非常高兴能够与这些友好的人们一起参与有趣的 Julia 项目,这是一个我已成为其中一部分的可爱社区。
我是在 2013 年在麻省理工学院林肯实验室工作时第一次接触到 Julia 的;联邦航空局需要在发布下一代飞机防撞系统(ACAS X)的算法规范时替换伪代码——理想情况下,需要一些可运行、快速且简洁的东西。由于与麻省理工学院校园相连,Julia 进入了我们的视野,并且似乎是一种很有希望的方法。我们很幸运地在不久后获得了 Jeff Bezanson 的帮助。从那时起,我在本科研究(模拟星系旋转)、整个硕士研究(黑盒安全验证)以及现在在斯坦福大学的博士研究中都使用了 Julia(由于 Mykel Kochenderfer,我们的实验室 SISL 全心全意地拥抱了 Julia,因此 https://github.com/sisl)。我发现 Julia 的简洁性和接近数学语法的特性(例如,BeautifulAlgorithms.jl)非常美妙,并且在 Julia 中玩代码高尔夫也获得了(太多)乐趣(例如,REPL 中的一行俄罗斯方块)。我从一开始就认识到 Julia 的潜力,并且也钦佩这种开放性、周到性和逻辑性社区对语言做出的每一个决定的支持。我当然已经投入了 Julia(不要告诉我的妻子),并且希望成为它在学术界作为强大的研究和教学工具的有用性的一个例子。毫无疑问,十年来,这种语言获得了应得的关注——但更重要的是,它一直坚持最初的道路,使编程变得快速且有趣。
我第一次听说 Julia 是在 2016 年左右,从 Brett Victor 的博客 worrydream 上看到的,但直到 2017 年才开始认真使用它。然后,作为我博士学位的一部分,我尝试使用 Julia 来找到一个我试图证明的界限的数值反例(在对 python 和 MATLAB 感到恼火之后)。然而,找到一个好的反例需要优化,而且我不理解我使用 Convex.jl 得到的结果。我把这件事搁置一边,偶尔继续使用 Julia 进行各种草图计算和简单的蛮力搜索(同时贪婪地阅读 Discourse)。
我最终以更大的信心调查了我的问题,并发现存在一个简单的复共轭错误。修复困扰我的这个错误让我感觉很有成就感,特别是因为我并没有把自己看作“开发者”,而只是一个谦逊的用户。Alex Arslan 友好而周到地审查了我对 Convex 的拉取请求,最终我发现自己成为该包的维护者一段时间。
这段经历彻底改变了我的职业生涯。我决定,在我博士毕业后的那个夏天,我想全职使用 Julia(而不是只有在我设法在我的研究中找到数值问题时才使用)。在我犹豫是否离开学术界期间的一个实习变成了 Beacon Biosignals 的全职职位,在那里我每天都开心地使用 Julia。
我第一次听说 Julia 是在 2015 年,但当时我对 Python 和 R 很满意(我已经出版了两本关于 R 和 Python 编程的书籍)。快进到 2019 年,我必须修改我在 2013 年用 C++ 编写的博士论文。它运行速度非常快,但缺乏灵活性。首先,我尝试用 R 重写代码,但运行时间非常慢。然后我记起了 Julia。是的,我实现了 Python 和 R 的灵活性以及 C++ 的速度。在过去的三年里,我几乎把我所有的工作都改成了 Julia。我用 Julia 进行所有数据分析和可视化,并用 Julia 开发机器学习模型。而且不止这些。最近,我需要一个小型 Web 应用程序。我不是 Web 开发人员,对此知之甚少。在尝试了一些其他工具后,我决定尝试 Genie。仅仅几天,我就用 Genie 开发了一个小型 Web 应用程序。而且,这不仅仅是语言的美观和强大之处。Julia 拥有一个很棒的社区。我能在 Discord 或 Stack Overflow 上在短短几秒钟内找到所有问题的答案。
我非常喜欢 Julia,甚至在 Udemy 上创建了一个关于 Julia 的在线课程:Julia 编程。现在,我的密友都听腻了我“Julia 一统天下”的笑话了。
我(很晚)被我的朋友兼同事 Gaurav 先生 在 2019 年左右介绍了 Julia。我对 MATLAB 和 C++ 很满意,而且我并没有太在意,直到 2020 年疫情开始,当我看到 Christopher Rackauckas 博士 在他关于通用微分方程的一个在线研讨会上解释了使用 Julia 的 SciML 的强大功能。我对 DifferentialEquations.jl 包的易用性、优雅性和速度感到惊叹。从那时起,我就将 Julia 作为我的科学编程语言,用于我所做的大部分科学研究。我还钦佩 JuliaLang 社区在其讨论论坛(如 Discourse 和 Slack 频道)中透明且乐于助人的本质。我现在喜欢探索 JuliaLang 包,并且已成功地将我的一些实现合并到一些 SciML Julia 包中。过去几年中的虚拟 JuliaCon 也让生活变得更容易,有助于了解科学编程的进展。我感觉 Julia 程序员一直在密切关注着 **最新发布的内容**,以便他们能够快速地为我们提供实现。
2012 年,正如我在我的 JuliaCon 2017 演讲 中提到的,我们当时正在研究 ACAS X 碰撞避免系统的算法规范。我们使用基于 C++ 实验实现的伪代码进行了初步尝试。尽管我们尽了最大努力,但我们与约翰·霍普金斯应用物理实验室 (JHUAPL) 的合作者在开发该系统的硬件原型时发现了模棱两可之处。我当时正准备将伪代码翻译成 Python,因为它仍然是高级的,但仍然可执行。但是,我们 JHUAPL 的朋友建议使用 Julia,因为它既是高级语言,速度又快,并且更适合他们正在探索的一些用于验证的形式化方法。我当时强烈反对。毕竟,这个建议是在 2012 年 12 月 13 日提出的。Julia v0.1 直到 2013 年 2 月 13 日才发布。无论如何,我们的实验发现,对于代码的关键部分,Julia 的早期版本速度比 Python 快 50 倍。我们聘请 Jeff Bezanson 每周在林肯实验室工作一天来参与该项目。2013 年 9 月 30 日发布的规范的下一版本使用了 Julia。Julia v0.2 在下个月发布,我开始在斯坦福大学工作。在斯坦福,我开始教授关于优化和不确定性下决策的课程,我们使用了 Julia。我主要使用它是因为这种语言非常简洁干净,尽管有时学生会因为要学习另一种语言而有些抵触。在大学里,我们可以放眼未来——并且我们跟随 Julia 经历了每个版本带来的重大改进。我们发布了两本使用 Julia 而不是伪代码的教科书:优化算法(2019 年)和 决策算法(2022 年),这两本都来自麻省理工学院出版社,并提供免费的 PDF 版本。我相信 Julia 会继续发展。
我第一次听说 Julia 就怒了,我心想:“为什么我们需要另一种编程语言?!”。我认为这种新语言只会分散资源并浪费精力。这些精力最好用于改进 Python,改进 Numba 和 Python 生态系统。我精通 Python,当事情变得太慢时,我会用 Cython 重新实现,或者寻找一个我可以包装的 C 库。我希望 Numba 随着时间的推移会变得更好,以便在无需重新实现的情况下获得 LLVM 编译,但与此同时,我的 (python + C) 技能足以应付一切。
一段时间后(2015 年),iPython Notebook 由于某些我记不清的原因被重命名为 Jupyter,我又看到了这个 Julia“东西”!然后我想也许我应该试一试。哦,天哪!我错了,它比 Python 好得多,而且我无需再费力地去让事情变得更快。但在当时,Julia 还没有达到我需要的水平,它似乎刚刚从 v0.4 过渡到 v0.5,很多东西都开始出问题。因此,我采取了“观望”的态度,我观看了 Julia 社区的所有 YouTube 视频,并在可能的情况下阅读了所有讨论帖子。我只是将 Julia 作为辅助工具,当 Python 和 MATLAB 无法满足我的需求时使用,这种情况相当频繁。当 Julia 于 2018 年达到 1.0 版本时,我非常兴奋,因为那时我可以开始向其他人推荐它了。现在,我正在积极尝试让工作中的其他人也使用它,以便我现在可以全职使用 Julia。事后看来,我后悔没有早点更多地参与社区,但这种情况正在改变。在未来几年,我相信许多来自科学计算领域的专业人员将把它作为通用语言。
2012 年,ContextVision 存在三种语言的情况。算法开发是在 Matlab 中完成的,并在此处和那里散布了一些 C Mex 文件以提高性能,并且算法被重写为 C++ 库以创建产品。我们对 Matlab 不满意。成本和许可证管理令人烦恼,速度勉强可以接受,但真正的痛点是软件工程方面的不足。
我查看了 Octave,做了一些 PR,但很明显它无法解决我们的问题。然后有一天,有人在他们的邮件列表中询问人们对这种新的 Julia 语言有什么看法。我前往阅读 我们为什么要创建 Julia,它非常符合我正在寻找的东西。我开始了一个概念验证的实现,其中包含 Matlab 和 C 代码的逐字翻译。结果证明它只是稍微快了一点,但它是一种语言而不是两种,没有 Mex 样板文件,更好的优化潜力,以及大大提高的可维护性,这在当时就已经实现了。
然而,真正让我个人印象深刻的是,用它编程非常有趣。作为一个新的语言,也有很多令人兴奋的事情可以探索。我意识到参数类型非常适合 复合 SI 单位。好吧,实际上它并没有完全奏效。事实证明,对于某些其他信息,负参数值会加倍,但 Jeff 立即修复了这个问题,并且这个想法最终发展成了 Unitful 包。
快进到 2022 年。早些年已经过去很久了,但 Julia 仍然是一种有趣且高效的语言。此外,包管理器、包服务器和工件系统提供了“即用型”的水平,这是我在十年前甚至没有开始梦想的。在 ContextVision,仍然存在双语言问题,但算法代码和产品代码之间的速度差异大大减少了,当(我并不是说如果)静态编译成为现实时,它可能将一直使用 Julia 到客户那里。
我是一名天体粒子物理学家,在 2015 年左右发现了 Julia,当时它正好处于 v0.3 和 v0.4 之间。我立即认识到它的强大功能,并将其用于我自己的科学项目。如今,我所有的科学计算都专门在 Julia 中完成:没有什么是我做不到的。
然而,在过去的十年里,我还花费了数百个小时创建和维护基于 Python 的框架,用于实时和离线分析来自我们的中微子望远镜的数据。我经历了许多代码重构迭代,包括许多不同的技术,以保持高级 API 易于用于短期项目(例如本科论文),在这些项目中,学生否则将不得不学习 C++ 和 ROOT 框架,并且仍然具有高性能以节省时间、成本和资源,当在多个 HPC/HTC 集群上启动数万个作业以进行大规模分析时。不幸的是,大部分时间和精力都花在了破解、调整和在可用性和可扩展性方面做出妥协上,这是由于 Python 与底层低级代码之间的语言障碍造成的。
在过去的几年里,我们与一些极具天赋的人一起,试图将天体粒子物理和高能物理的重点转向 Julia,并开始为我们自己的实验构建一个新的软件堆栈,完全用这种美丽的科学语言编写。单一生态系统通常足以实现峰值性能,同时为用户提供如此易于访问的语法,这绝对是一个改变游戏规则的因素。
我希望 Julia 能保持这种势头,人们最终会意识到,是时候继续前进并使用合适的工具进行科学计算了,而不是试图弯曲 Python 并投入大量软件包来弥补其弱点,同时造成巨大的复杂性、维护和技能要求。
我于 2020 年开始与 Julia 互动,当时麻省理工学院的一位朋友建议我参加 18.337 课程——由 Chris Rackauckas 教授的科学机器学习讲座。当我开始学习 Julia 时,我发现它有一种特殊的光环。它感觉设计得如此精良且健壮。就像是为了推进科学计算而创造的东西。在完成那门讲座后不久,我开始参与 SciML 社区。我贡献了一些 PR,并最终创建了自己的包(Plasma.jl),这是我一直想做的事情。在 Julia 中使用它——凭借其强大的元编程结构,既有趣又比我预期的容易得多。
Julia 最吸引我的地方是围绕它形成的聪明而有趣的人群。令人难以置信的是,我们有一个地方,顶尖的科学家和工程师可以在这里聚集并交流想法、互相帮助并建立联系。能与 Chris Rackauckas 在 Slack 频道中交流,或与 Tom Kwong(我强烈推荐他的著作“使用 Julia 的设计模式和最佳实践”)在 Discord 服务器中交流真是太棒了。我感谢 Julia 创建了一个环境和语言,用户可以在其中做伟大的事情,并在做这些事情的过程中学到很多东西。
十年了,真是太快了!当 Julia 首次出现时,时机对我来说非常完美。我当时即将开始大学的最后一年,并且正在寻找一种用于我的“轨道确定入门”课程的编程语言。我的学术 MATLAB 许可证刚刚过期,我正在寻找替代方案。当我阅读这篇博文时,我认为 Julia 正是我所需要的。因此,我下载了源代码,毫不费力地编译了它们,试用了一下,然后在课程中使用了 Python。这可能是一个明智的选择,因为否则我将不得不编写自己的高阶数值积分器,并且肯定由于高效的拖延而无法通过课程。尽管如此,Julia 还是吸引了我,我密切关注了它的发展,甚至在 2013 年开始发布我的第一个开源 Julia 库。几年后,经过几次来回,以及多次被科学 Python 的双语言问题困扰,我于 2016 年进行了切换,并且再也没有回头。
快进到今天,我的团队和我正在开发一款产品,它结合了我最喜欢的两件事:Julia 和登月任务!这得益于我们出色的生态系统和社区。我们已经走了很远,但仍然有很多工作要做。让我们期待另一个激动人心的十年,然后……
最后的想法:作为一名机械工程师,我从未想过能够为编程语言的开发做出贡献。因此,我对 Julia 基础的微小补丁让我无比自豪,并表明 Julia 正在打破障碍,并且双语言问题确实得到了解决。
早在 2017 年,当我开始使用 Julia 时,我一直在为 HPC 做很多 Fortran 工作,为模型优化做自动微分,以及为结果分析做 Matlab 工作。所有这些都是开源的,持续了 10 年,重点是全球海洋模型模拟、地理空间统计等等。在那之前几年,我决定不学习 Python 或 R,而是等待更适合我的东西,并且是一个明确的升级。Julia 正是它!
我开始使用 MeshArrays.jl 来处理气候模型网格,并在 JuliaCon2018 上进行了展示。十八个月后,就在我在 2020 年海洋科学大会上举办了我的第一个 Julia 研讨会之后,新冠疫情打乱了我们所有人的计划(好吧,很多……)。但很快我就意识到,学习更多 Julia 知识是我应对这种情况并从中获得一些快乐的好方法。因此,我定下了一个目标,希望在疫情结束后能拥有我未来研究中会用到的工具。ClimateModels.jl 和 OceanRobots.jl 就是我在 JuliaCon2021 上介绍的两个例子。
有趣的是,我可以将我重新开始编程并充满热情地归功于 Julia 和疫情!五年过去了,我绝对没有遗憾,并且对未来充满期待。为 Julia 社区欢呼!
我第一次偶然发现 Julia 大概是在 2014 年底或 2015 年初,当时我看到了一篇 关于你选择的统计软件能说明你的什么问题的讽刺博客文章。(“Julia:你是 John Myles White。”)大约在这个时候,我还遇到了 Doug Bates 关于 MixedModels.jl 的早期工作,并且对其在性能上与 R 中的前身 lme4 的差异感到非常震惊。在大型工作站上需要花费数小时才能完成的任务,在我的笔记本电脑上只需几分钟即可完成。我想要这种性能,但生态系统当时还无法替代我日常工作中的 R(缺失数据的处理、DataFrames.jl 和 StatsModels.jl 仍需要改进很多),而且我没有能力应对这种变化。大约在 2019 年,一位同事遇到一个在 lme4 中根本无法解决的分析问题,我听说 Julia 终于稳定了。我再次查看了 MixedModels.jl,发现它缺少我需要的一些功能,但开始与 Doug 通信以实现这些功能。我对 Doug(统计计算领域的传奇人物)对我的请求的友好和响应速度印象深刻。在短短几个月内,我开始定期为 MixedModels.jl 做贡献,并且发现 Doug 是社区的典型代表:热情、乐于助人和友好。我还发现(部分)是什么让 Julia 如此特别:所有内容都在 Julia 中,对于像我这样的项目新手来说,很容易理解发生了什么,这在其他语言的其他项目中是不可能的(例如,R 中的 lme4)。
我最初是为了速度而来,喜欢并使用它的语法,并且热爱这个社区。
我第一次接触 Julia 是在 2019 年春季,当时我在 Alan Edelman 教授的 18.06(线性代数)课程中。课程结束后,我联系他寻找一个 UROP 项目。他把我介绍给了 Chris Rackauckas,我在接下来的几年里作为一名二年级学生从事神经微分方程的创建工作。现在,作为一名四年级学生,我回到了实验室。我在秋季学习了 6.172(软件性能工程),并希望使代码更快,并更多地了解编译器。我认为 Julia 实验室是完成这项任务的完美场所,而且我上次与他们合作时有很好的体验。我计划明年在攻读硕士期间继续在实验室工作。
我第一次接触 Julia 语言是在 2014 年秋季。当时我还很年轻,但对计算科学充满热情,我主要使用 Python 和 R 来完成这两项任务。我曾与同伴一起参与过几个项目,我们遇到了“两种语言问题”,这让人非常沮丧。我是团队中唯一一个可以编写 C 代码的人,而 Cython 并没有像预期的那样解决我们的问题。那时,像 Numba 和远程 Python 解释器这样的工具还远远没有现在这样成熟,我正在寻找更多关于如何加快 Python 运行速度的信息,这时我偶然发现了一个 Julia 论坛帖子。我对语法很感兴趣,自从那天开始学习 Julia 以来,它就成为了我最喜欢的编程语言。我能够用 Julia 而不是 C 来解决我们的问题,并且能够在需要时通过 PyCall.jl 调用我们的 Python 代码。它最终运行完美,因此我在每次遇到此类问题时都会将其用于此类项目。这门语言一直表现出色,并且对语言的持续改进都非常棒。现在,这门语言拥有一个庞大的生态系统,所以情况只会越来越好。
作为一名系统生物学家,我属于一个非常跨学科的领域。我与生物学家、数学家、计算机科学家等组成的团队一起工作。利用多个领域的专业知识是解决该领域许多难题的关键。在选择编程语言时,我考虑的一个关键因素是它如何促进协作。Julia 语言设计的重点是抽象及其隐含的模块化和可组合性。这种设计重点对我与其他研究人员日常合作工作的影响难以用几句话来描述。简单但清晰的语法以及优雅的技术特性,例如多重分派,解决了表达式问题,并方便了重用、适配和扩展协作者的现有代码。此外,利用 Julia 丰富的包生态系统也很容易。其次,Julia 速度很快。在生物科学领域,我们触手可及的数据量正在迅速增长。可扩展性良好的软件至关重要。为了构建使用大数据学习大型生物系统的复杂模型,我需要 R、Python 或 MATLAB 等语言无法提供的性能水平。采用两种语言的方法,其中代码作为项目的第二阶段被翻译成更快的语言,很常见,但也固有地效率低下,并且可能是错误和不准确的来源。Julia解决了这种双语言问题。由于其简单的语法,Julia 为我提供了一个方便的环境,可以进行原型设计和算法设计,以及用于数据密集型工作的生产就绪的高性能代码。第三,我使用 Julia 是因为它免费、开源以及它的社区。这促进了持续的同行评审过程和软件开发的民主方法,任何人都可以在 GitHub 上公开访问。社区指南和活跃且友好的用户群不仅汇聚了优秀的编码人员,也汇聚了善良且有抱负的人——这是发生伟大事物理想场所。
我是一名计算化学家,我第一次听说 Julia 是在 2015 年,当时一位数学家同事向主要由 Fortran 程序员(包括我在内)组成的听众做了一次讲座。我记得他试图说服我们,用“local x::Int”或类似的东西来注释类型是可行的,并且因此,我们可以做我们在 Fortran 中做的事情,即声明所有变量和所有类型(现在我可能误解了他想解释的内容)。因此,我和其他人认为没有充分的理由学习 Julia,因为我们会得到与 Fortran 大致相同的结果,除了绘图库和其他东西,其他人已经在使用其他工具来做这些事情了。在 Julia 达到 1.0 之后,我决定再次尝试一下,并开始尝试将一些我无法维护的 Fortran 代码翻译成 Julia 并将其制成一个可分发的包。当时,我从未考虑过,甚至从未听说过,不变性、赋值和变异、栈和堆,或 SIMD。令人惊讶的是,有时甚至令人尴尬的是,这门语言的创造者,高度复杂的核心功能、大型包的开发者,以及来自许多学科的学术巨匠能够回答一些最基本的问题。通过参与社区,我能够为自己的研究开发出更好的软件,并且我有幸受邀在一些我从未想过会参加的会议上讨论 Julia 中的分子模拟。此刻,我认识到并感谢我之前犹豫是否采用 Julia:要充分理解这门语言的功能,需要一些编程知识,即使使用 Fortran 或 Python 多年,也不一定能获得这些知识。通过使用 Julia 进行编程而接触到的各种概念,从高级到低级,是无与伦比的,它也造就了这个多元化的社区,在这个社区中,每个人都可以理解并互相帮助。编程现在变得更加令人愉快。我感谢开发者社区在我之前就相信这个项目,以及他们在过去三年中给予我的学习和协作方面的帮助。
我是一名墨西哥城国立自治大学的物理学本科生。我很幸运,一些同学建议我参加 David Sanders 的计算物理课程,因为 Julia 是最好的,它是未来。我勉强报名参加了,因为我听说其他教授说只有 Fortran 值得人们花费时间,但 David 的讲座和 Jupyter Notebook 演示说服了我。在某个时刻,我偶然发现了 julialang.org 的链接,不知何故来到了 Julia Gitter。我遇到了 Scott、Chris 和 Seth,他们回答了我许多关于 Julia 的新手问题,我想我一直在回来。真正让我对 Julia 感到兴奋的是,在某个时刻,Stefan 或 Jeff 直接回复了我的一篇 Discourse 帖子,没有叫我白痴,并平静地解释了一些 Julia 的深奥内容(这不是我通常的互联网论坛体验)。那一刻感觉就像闪电击中瓶子一样:编程语言的创造者只是闲逛?并回答你的问题?在线?免费???这似乎仍然是一种革命性的知识共享开放性。我最终想尝试为这门语言做出贡献,所以我认为最好的方法是注册到 JuliaLang 存储库的 GitHub 通知。一些奇怪的事情一直在发生——通常的嫌疑人会贡献一些很酷的代码,但几乎每天午夜,这位神奇的编码英雄都会回答一大堆 PR 和提交,并准备好所有这些基准测试和 PR。“地球上谁可以像这样编码!?”我发现他们的名字是 nanosoldier
,一个运行预先准备好的基准测试脚本的自动化机器人——不幸的是,这不是我崇拜的勇敢的澳大利亚英雄编码员。这就是我接触 Julia 及其优秀人员的方式。对于所有的一切,亲爱的 Julia 用户,谢谢你们。谢谢。