← 返回列表
Lex Fridman Podcast播客23 Sep 2021来源: lexfridman.com主持: Lex Fridman

#224 – Travis Oliphant: NumPy, SciPy, Anaconda, Python & Scientific Programming

一句话导读

这篇访谈讲的是NumPy、SciPy和Anaconda的创始人Travis Oliphant如何从自己读博时解决医学成像问题开始,一步步打造出支撑整个机器学习的Python工具。他认为最成功的开源项目往往不是设计出来的,而是从解决个人痛点中长出来的。重点提了三个标的:NumPy(比原生Python快10-100倍,因为数组是C语言直接操作的内存块)、SciPy(2001年发布,催生了scikit-learn)、Anaconda(预装1500多个包,下载超3000万次,让科学家5分钟搭好环境)。

AI 摘要AI 生成 · 可能有误 · 以原文为准

该报告是Lex Fridman对Travis Oliphant的访谈,主题聚焦于他在科学计算领域的开创性贡献。核心观点是Oliphant通过创建NumPy、SciPy和Anaconda,彻底改变了Python在机器学习和科学编程中的生态。重要结论包括:NumPy为基于张量的机器学习(如TensorFlow、PyTorch)奠定了基础;SciPy推动了Python在科研领域的普及;Anaconda(特别是Conda包管理器)降低了Python的使用门槛,使数百万科学家和工程师能够高效解决复杂问题。Oliphant强调,这些开源工具通过赋能大公司、小公司和开源社区,产生了不可估量的影响。

全文约 14 分钟 · 15 个章节
深度解读

本期速览

Travis Oliphant 是 NumPy、SciPy 和 Anaconda 的创始人,本期他讲述了这些工具如何从个人项目演变为 Python 科学计算生态的基石。全片最有分量的判断:Oliphant 认为 NumPy 的诞生并非源于宏大规划,而是为了解决自己博士研究中的具体问题——这种“为自己解决问题”的开源模式,恰恰是它最终能支撑整个机器学习革命的根本原因。

主题一:NumPy——从个人需求到机器学习基石

Oliphant 指出,NumPy 的起源极其务实:他在 2000 年代初研究医学成像时,需要一种比 Python 原生列表更高效的多维数组工具。

  • 历史脉络:当时已有 Numeric 和 Numarray 两个竞争库,但各有缺陷。Oliphant 在 2005 年决定将它们合并,创建 NumPy。他回忆:“我花了大约一年时间,在业余时间重写了核心代码,目标是让数组操作像 C 语言一样快,但保留 Python 的易用性。”
  • 机制拆解:NumPy 的核心创新在于向量化操作——它允许用户对整个数组执行数学运算,而无需编写循环。这背后是 C 语言实现的底层引擎,Python 只作为胶水层。Oliphant 强调:“NumPy 数组不是 Python 对象列表,它们是内存中的连续块,由 C 语言直接操作。”
  • 数据链:NumPy 的出现使 Python 在数值计算上速度提升了 10-100 倍,具体取决于操作类型。这直接催生了 SciPy(2001 年)和后来的 scikit-learn(2007 年)。
  • 推演与验证:Oliphant 认为 NumPy 的成功验证了一个反直觉的规律——“最成功的开源项目往往不是设计出来的,而是从解决个人痛点中生长出来的”。证伪条件:如果当时有商业公司主导开发一个“更完美”的数组库,可能会因缺乏社区根基而失败。

主题二:Anaconda——降低 Python 科学计算的门槛

Oliphant 认为,Anaconda 的诞生是为了解决 Python 科学计算生态中最大的痛点:包管理和环境配置的混乱。

  • 历史脉络:2012 年前后,Python 在科研领域快速增长,但安装 NumPy、SciPy 等依赖库(尤其是需要编译的 C/Fortran 扩展)对非程序员来说极其痛苦。Oliphant 创立 Continuum Analytics(后改名 Anaconda Inc.),开发了 Conda 包管理器。
  • 机制拆解:Conda 的创新在于它不依赖 Python 的 pip,而是独立管理二进制包。这意味着用户无需本地编译器,就能安装预编译的科学计算库。Oliphant 解释:“Conda 是一个跨语言的包管理器,它知道如何安装 Python、R、C 库以及它们的依赖关系。”
  • 数据链:Anaconda 发行版预装了 1500+ 个科学计算包,下载量超过 3000 万次(截至 2021 年)。它使数百万科学家和工程师能够在 5 分钟内 搭建起完整的 Python 数据科学生态。
  • 推演与验证:Oliphant 指出,Anaconda 的成功证明了“工具链的易用性比功能强大更重要”。证伪条件:如果当时有更简单的 Docker 容器方案普及,Conda 的价值可能会被削弱。

主题三:开源与商业化的平衡——Anaconda 的商业模式

Oliphant 坦言,Anaconda 的商业化是一个“摸着石头过河”的过程,其核心挑战是如何在保持开源的同时实现可持续盈利。

  • 机制拆解:Anaconda 的商业模式是“开源核心 + 企业服务”——免费版面向个人和学术用户,企业版提供安全、合规、支持等服务。Oliphant 强调:“我们从未考虑过闭源,因为开源是 Anaconda 存在的理由。”
  • 数据链:Anaconda 的企业客户包括 NASA、洛克希德·马丁、摩根大通 等大型机构。企业版收入占公司总收入的 80% 以上
  • 推演与验证:Oliphant 认为,开源项目的商业化成功取决于“能否为企业解决他们自己无法解决的痛点”——例如安全审计、合规性、长期支持。证伪条件:如果企业客户发现自行维护开源版本的成本低于购买企业版,商业模式将失效。

提及的标的

标的 嘉宾态度 关键数据
NumPy 看好(核心贡献) 速度提升 10-100 倍;2005 年合并创建
SciPy 看好(生态基石) 2001 年发布;催生 scikit-learn
Anaconda 看好(降低门槛) 预装 1500+ 包;下载量 3000 万+
Conda 看好(核心创新) 跨语言包管理器;不依赖 pip

值得记住的判断

1. “最成功的开源项目往往不是设计出来的,而是从解决个人痛点中生长出来的”(Oliphant)——NumPy 的起源是解决博士研究中的医学成像问题,而非宏大规划。

2. “NumPy 数组不是 Python 对象列表,它们是内存中的连续块,由 C 语言直接操作”(Oliphant)——这解释了 NumPy 为何比原生 Python 快 10-100 倍。

3. “Conda 是一个跨语言的包管理器,它知道如何安装 Python、R、C 库以及它们的依赖关系”(Oliphant)——Conda 的创新在于独立于 pip 管理二进制包,免去编译痛苦。

4. “工具链的易用性比功能强大更重要”(Oliphant)——Anaconda 的成功证明了降低门槛比增加功能更能推动生态增长。

5. “我们从未考虑过闭源,因为开源是 Anaconda 存在的理由”(Oliphant)——Anaconda 的商业模式是“开源核心 + 企业服务”,企业版收入占 80% 以上。

6. “开源项目的商业化成功取决于能否为企业解决他们自己无法解决的痛点”(Oliphant)——例如安全审计、合规性、长期支持,而非单纯的功能增强。

从 Python 2 到 Python 3 迁移的教训

Travis 对 Python 2 到 Python 3 的迁移过程有深刻反思,认为这是理解开源社区惯性的典型案例:

方面 Python 3 早期版本 (3.0-3.2) Python 3 成熟版本 (3.3+)
核心改进 语法清理(如 print 改为函数) 实质性新特性(如 yield from、asyncio)
用户迁移动力 低 - 缺乏足够吸引力 高 - 有明确收益
社区接受度 缓慢 加速

关键教训

  • 仅靠"修复"而不提供足够新特性,无法驱动大规模迁移
  • 用户惯性极强,需要 10 年以上的过渡期
  • 语言设计者(Guido)的个人偏好(如 print 函数化)不应成为迁移的主要驱动力

NumPy 与 GPU 生态的割裂

Travis 认为 NumPy 在 GPU 支持上的缺失是一个历史遗憾:

  • 当前现状:PyTorch、TensorFlow、CuPy 等各自实现类似 NumPy 的数组接口
  • 根本原因:NumPy 的类型系统设计(Python 1 时代风格)使得扩展新硬件变得困难
  • 理想方案:NumPy 应原生支持 GPU,而非需要第三方库重新实现

数据-API 标准化努力

  • 项目 `data-apis.org` 旨在统一不同数组库的 API
  • 参与者包括 QuantSight Labs、TensorFlow 团队、PyTorch 团队
  • 目标:在基础设施层面合作,在创新层面保持竞争

开源项目的经济可持续性

Travis 分享了他对开源资金问题的长期思考:

资金模式 优点 缺点
书籍销售(如 Guide to NumPy) 直接、可控 收入有限(3 年 9 万美元)
咨询/服务 稳定现金流 分散开发精力
风险投资 可规模化 需追求高增长,可能偏离社区价值
企业赞助 可持续 需要证明 ROI,营销部门难以理解

创新机制

  • QuantSight Labs:咨询公司利润的一部分直接用于资助开源项目维护
  • OpenTeams:连接企业与开源社区的"传输层",通过销售流程自动化降低交易成本
  • 风险基金 + 开源实验室:基金的管理费/收益分成回流到开源开发

企业采用开源的真实挑战

Travis 在与 Fortune 100 公司合作中观察到:

1. 采购流程不匹配:企业习惯购买"解决方案",而非"组件"

2. 定制化成本:开源工具需要大量定制,企业往往用昂贵的咨询来弥补

3. 人才竞争:企业需要展示对开源的支持以吸引顶尖开发者

对比数据

企业软件模式 开源替代模式
购买现成产品 获取可定制工具
依赖供应商升级 社区持续迭代
高许可费用 低初始成本
锁定效应 灵活性高

对编程语言设计的哲学思考

Travis 从语言设计角度分析了 Python 成功的原因:

  • 可读性优先:Python 的缩进语法减少了视觉噪音,让科学家能专注于问题本身
  • 渐进学习曲线:不需要成为专家就能产出有用代码
  • 扩展性:C 扩展机制让性能关键部分可以编译执行

与 Lisp 的对比

  • 早期:括号过多,对领域专家来说是障碍
  • 现在:更欣赏其逻辑结构,但认为不适合"偶尔编程者"

对机器学习框架生态的观察

Travis 对比了 TensorFlow 和 PyTorch 的社区策略:

维度 TensorFlow PyTorch
社区参与度 较封闭,难成为核心贡献者 更开放,接受社区输入
Python 接口 早期差,后通过 Keras 改善 原生 Pythonic
企业支持 Google 主导 Facebook 支持
与 NumPy 生态整合 较晚 更早

关键洞察:两个框架都源于内部 C++ 库,Python 接口是后来"螺栓固定"的,这导致了与 NumPy 生态的割裂。

对开源领导力的反思

Travis 从 Guido van Rossum 身上学到的领导原则:

1. 愿意倾听:对科学计算社区的需求保持开放态度

2. 适当授权:在自己不熟悉的领域(如科学计算)选择信任社区专家

3. 早期贡献者培育:积极回应新人贡献,否则他们会流失

关于"善意假设"

  • 在开源社区中,假设他人有正面意图至关重要
  • 社交媒体(尤其是 Twitter)的负面激励机制会破坏这种信任
  • 领导者的责任是主动填补信息空白时选择正面解释

对年轻开发者的建议

Travis 给出了具体且实用的建议:

1. 建立根基:找到你爱的人并承诺,这提供不可替代的锚点

2. 保持好奇心:不要过早固化认知,给自己 10 年探索时间

3. 建设而非破坏:如果想改变什么,建造替代品而非攻击现有系统

4. 接受迭代:第一个版本大概率很糟糕,这没关系

5. 深度工作:好编程需要持续数小时的专注,无法通过碎片化完成

6. 警惕炒作周期:TDD、敏捷等方法论有信号价值,但非万能答案

对编程本质的终极思考

Travis 认为编程的核心是问题解决数学思维的结合:

  • 数组编程(APL 传统)让人能以 N 维方式思考数据
  • 语言不仅是工具,更是思维框架——就像自然语言影响思维方式一样
  • 真正的力量在于抽象共享:当社区共同使用同一抽象时,可以构建更高层次的东西

警示:抽象既是力量也是限制——它让我们高效,但也可能让我们忘记其他可能性。