本文为 Robin.ly 授权转载,文章版权归原作者所有,转载请联系原作者。
Robin.ly 是立足硅谷的视频内容平台,服务全球工程师和研究人员,通过与知名人工智能科学家、创业者、投资人和领导者的深度对话和现场交流活动,传播行业动态和商业技能,打造人才全方位竞争力。
MIT CSAIL 实验室开发的开源编程语言 Julia 自 2018 年发布 1.0 版本后人气持续飙升。它集合了 Python 和 R 语言的高效率和易用性与 C++的速度,有望成为机器学习首选语言。截至 2018 年底,Julia 已有超过 300 万下载量,并被美联储等金融机构,以及斯坦福等 1500 所知名大学和研究机构使用。
毕业于哈佛大学的 Keno Fischer,自高中开始就参与 Julia 语言的开发,并在 2015 年与其他开发者共同创立了 Julia Computing 公司,担任 CTO,为 Julia 语言客户提供支持、培训和咨询服务。Keno Fischer 今年也入选了福布斯评选出的“30 岁以下的 30 个精英” 企业技术类榜单。
近日,Keno Fischer 在美国波士顿接受 Robin.ly 独家专访,分享了 Julia Computing 的创业经历、Julia 语言的开发历程及其在不同领域的应用。
Keno Fischer 在美国波士顿接受 Robin.ly 专访
Julia:一门高效且实用的语言
Margaret Laffan: 能否介绍一下你们在技术上如何实现了如此高的成就?
Keno Fischer:
Python 和 R 这类语言实际上是为提高用户生产效率这单一目标而设计的。最终用户是科学家和各个领域的专家,他们需要快速探索新的算法和解决方案,而不受语言性能的限制。他们倾向于将用较低级语言(例如 C、C++、Fortran,可能也包括 Java)的预编写的库连接在一起。这些语言的编写都非常注重性能,至少在设计这些语言时充分利用了当时可用的硬件。
图片来源:Julia Computing
使用编程语言的人大致可以分为两类:一类是比较关心生产效率的程序员、数据科学家、纽约联储的工作人员、从事经济建模的人、社会科学家以及需要使用非常高级的工具进行分析和仿真的群体。另一类人则更关心代码的性能,他们会编写非常底层的代码,并充分利用内存的层次结构,确保能充分利用硬件的性能。
在 2009 年 Julia 诞生之初,我们怀揣着很多疑问:这个语言区分了高性能语言和高生产效率的语言吗?它是编程语言设计的基础环节吗?因为熟悉性能的人编写的都是高性能语言,而知道最终用户在高生产效率系统中的实际需求的人编写的都是高生产效率的语言,但后者实际上可能不是计算机科学家,只是拥有实现这一目标所需的专业知识。我们想知道能否将计算机科学领域的专家——他们有必要的专业知识来进行编程语言开发,进行低级系统工程,使一种语言真正有效地运行——以及在实际应用方面使用过 R、Matlab、SAS 和 Python 之类的语言工具的人相结合,进一步探索他们真正想使用的语言。
我们通过非常巧妙的编程语言设计从技术上实现了这个目标,其中包含两个核心方面。一个就是研究动态语言的哪些特征使其难以有效的进行编译,这些特征可能包括任意的非局部效应。你正在进行的一些操作可能产生了持久的正面影响,但是没有实现有效的表达。如果你对此加以限制,并且对语言的设计方式有更加巧妙的构思,就可以获得类似动态和高效的语言,但同时也出现了导致传统动态语言出现性能问题的情况。
另一个核心方面是一个系统,我们称之为“动态多分派(dynamic multiple dispatch)”,它是 Julia 语言的核心范式,允许我们针对特定类型的参数进行动态最优算法选择。很多年前人们就开始研究动态多分派,但是从来没有一个系统能够从头到尾真正对其进行优化。所以我认为在 Julia 出现之前,这种编程范例的优点从未在系统中真正实现过。
我认为 Julia 实现了编程语言方面的核心技术创新。语言开发者非常看重 Julia 的实用性和效率,现在有数百所大学也已经将 Julia 用为入门语言开设课程,包括对线性代数之类的数字学科进行编程、数学优化、数值方法、图像分析等等。我认为对技术人员(作为最终用户的领域专家)而言,想拥有一个既关心性能又要考虑可用性的社区,除了技术因素之外,社会因素也同样重要。
2019 年“30 Under 30”科技企业家-Keno Fischer,来源:福布斯
参与 Julia 语言的开发
Margaret Laffan: 你从 2012 年开始就参与了 Julia 的开发,当时你还是个只有 16 岁的高中生。你为什么选择在这么小的年龄就参与的新编程语言的设计?背后的动力是什么?
Keno Fischer:
我当时是马里兰州一所中学的交换生。当时斯坦福大学开设了一个线上的教育项目,旨在帮助优秀的高中生有机会优先选修一两年的大学课程。我加入了这个项目,参加了一个数学建模竞赛。这个竞赛要求参赛者在 96 个小时内解决一个数学问题。我记得我当时需要解决的问题是计算一棵树上所有叶子的总重量。这是一个开放性的问题,也许没有什么实际意义,但这是一个有趣的问题,考察了学生们提出假设并依据假设搜集数据、建立数学模型、分析结果并撰写论文的能力。我们花了 48 个小时才构思出了一个理想的模型,从互联网上收集了到了所有需要的数据后,我用 Octave 和 C++ 编写了几套程序,针对一个树种,模拟该树叶子的尺寸和重量。我编写的 Octave 程序运行一次花了大约四个半小时,所以我每四个半小时就要查看一次结果,调整参数,然后重新开始。但是在竞赛结束后,我发现我实际上可以想办法让程序运行得更快。
图片来源:Julia Computing
大约一周后,麻省理工学院宣布他们正在开发一种名为 Julia 的新编程语言,目标正是为了解决此类问题。我认识到这是一个很好的机会,我应该贡献自己的一份力量。当时 Julia 还不能在 Windows 系统上运行,所以我的主要工作就是开发 Windows 版本的 Julia 语言。
Julia 社区的发展和壮大
Margaret Laffan: 现在的 Julia 和七年前相比有哪些相同和不同的地方?你在这七年间有什么有趣的经历能跟我们分享吗?
Keno Fischer:
在 2012 年 Julia 发布的时候,我就是麻省理工学院实验室之外最早开始使用它的人之一。我们最初的用户大概有 40-50 人。从那以后,Julia 的发展十分迅速,社区不断壮大。一个月前我们举办了 Julia 大会,有 400 人参加了会议。但是想要为一个开源项目要找出实际的用户数量,我们参考了安装和下载量以及使用频率等活跃用户的各种指标,估算整个社区应该拥有大约 25 万用户。除了社区人数的显著增长,Julia 的性能也在逐渐稳定。现在有很多人正在开展以 Julia 为基础的新研究项目。在后期,为了避免大量的用户投诉,我们也要确保产品技术和流程与时俱进。这些无疑是我参与这一过程以来的主要变化。
Keno 在展示 TPU,来源:Viral Shah
我认为没有改变的是社区的质量和社区中的人。我们希望应用 Julia 的所有领域都能吸引世界各地的专家为社区贡献他们的专业知识和最先进的工具,并利用社区平台进行深入的交流。我认为社区中的内容质量和人才水平一直保持不变,这也是开发早期成功的关键因素之一。
Julia 在不同领域的应用
Margaret Laffan: 你们的终端用户都在哪些领域使用到了以 Julia 为核心的技术?
Keno Fischer:
Julia 是一种通用的编程语言,主要专注于科学和数学领域的应用,这些领域的用户数量也十分庞大。在学术界人们从事诸如图像处理、机器学习以及各种模拟、经济预测之类的研究,涉及到模拟、数据分析、天文图像处理等工作,对计算能力的要求很高。
图片来源:Julia Computing
工业界的应用往往会略有不同。我们看到在保险、金融、医药、航天、化工等领域人们会利用 Julia 进行大规模的数据分析和预测。波士顿有一家公司正在将 Julia 应用于 3D 打印机,计算各种几何图形,研究如何将 3D 模型转换为打印对象。
公司成立的前两年实际上发展相当缓慢。但是大约两年前,我们从 General Catalyst 和 Founder Collective 那里筹集了一些风险投资,得以确保公司和开源用户能够高效使用我们的语言,以及让我们有足够的资金投资开发新的应用。机器学习一直是 Julia 公司和社区关注的重点领域。起初我们并没有预见到这一点,但是在过去几年里,机器学习的兴起让软件开发的方式发生了根本的变化,Julia 恰好非常适合这种变化,能够解决数学计算生态系统中的各种挑战。
创业经历
Margaret Laffan: 有很多人参与创办了 Julia Computing,比如 Viral Shah 博士、Deepak Vinchhi、Jeff Bezanson、Stefan Karpinski 和 Alan Edelman 教授。能简单介绍一下成立公司的动机,以及你们合作的过程吗?
Keno Fischer:
Alan、Jeff、Viral 和 Stefan 都是麻省理工学院 Julia 项目的最初倡导者。Alan 是数学系的教授,此前已经进行了多年的相关研究。他也涉足高性能计算领域,专长是随机矩阵理论。研究随机矩阵理论需要生成大量随机矩阵,了解这些矩阵特性并进行证明会涉及到大量的计算,所以他想要一个更好的系统来进行这些操作。Jeff、Viral 和 Stefan 都在 2009 年加入了此项目。Jeff 在计算机科学和语言设计方面拥有非常深厚的背景;Stefan 则擅长统计和数据分析。
Julia 联合创始人 Stefan Karpinski,来源:Society for Industrial and Applied Mathematics
我认为公司的成立主要是项目发展的自然产物。随着 Julia 的用户越来越多,麻省理工学院已经无法提供超越研究项目规模的支持,如果我们想要维持和发展当前的社区,就必须走出学术界。在我加入的三年后,也就是 2015 年左右,我们决定成立一家公司,也就是现在的 Julia Computing。就在那个时候,位于印度班加罗尔的 Deepak 加入了公司,跟其他人不同,他有商业背景,所以他的主要职责就是处理业务方面的工作。
让所有人能够协同工作的关键在于 Julia 的社区非常分散,遍布全球。公司现在有 30 多名员工,但是在波士顿办公室只有 4 个人。我们借鉴了基于 GitHub 的开源社区运作方式。所有员工都是通过邮件,聊天工具和远程通信功能进行沟通。我认为多年从事开源项目的经验以及在分布式团队中高效工作为公司的成立和发展奠定了重要基础。相比所有人在同一地点办公,我们经历的过程要轻松许多。
未来五年的发展规划
Margaret Laffan: 展望一下 Julia Computing 的未来,你认为未来五年的发展路线是什么?
Keno Fischer:
我们在去年 Julia 年度会议上发布了 Julia 1.0 版本,标志着我们的产品实现了一定的稳定性,能够向我们的用户社区提供更长期、更稳定的技术支持,这是一个标志性的进步。
Julia 员工集体照,来源:Julia Computing
我们显然希望对于将 Julia 用于生产关键应用程序的行业用户提供支持。实现这个目标有很多方法,其中一个方式是通过一个名为 Julia TEAM 的产品进行用户支持。Julia TEAM 背后的想法是通过提供软件开发工作流程的简单解决方案,让非软件工程、非数据科学和非机器学习领域的人群也能够自主进行软件开发和管理。凭借为开源社区构建大量工具的丰富经验,在为开源社区提供的所有软件开发最佳实践方面,我们有能力制定标准,甚至让无法开源分享代码的人也有工具可用。我认为这应该是我们在未来需要努力的方向。
Julia 的技术现在相当稳定,但我们仍然需要做出一些改进,让 Julia 成为这些领域终端用户公认的最佳工具。我认为这是未来发展的重点。
本文转载自 Robinly 微信公众平台。
原文链接:https://mp.weixin.qq.com/s/_t4pOOJ-Tc5wXvrcSBrB8w
评论