这篇访谈讲的是NumPy、SciPy和Anaconda的创始人Travis Oliphant如何从自己读博时解决医学成像问题开始,一步步打造出支撑整个机器学习的Python工具。他认为最成功的开源项目往往不是设计出来的,而是从解决个人痛点中长出来的。重点提了三个标的:NumPy(比原生Python快10-100倍,因为数组是C语言直接操作的内存块)、SciPy(2001年发布,催生了scikit-learn)、Anaconda(预装1500多个包,下载超3000万次,让科学家5分钟搭好环境)。
该报告是Lex Fridman对Travis Oliphant的访谈,主题聚焦于他在科学计算领域的开创性贡献。核心观点是Oliphant通过创建NumPy、SciPy和Anaconda,彻底改变了Python在机器学习和科学编程中的生态。重要结论包括:NumPy为基于张量的机器学习(如TensorFlow、PyTorch)奠定了基础;SciPy推动了Python在科研领域的普及;Anaconda(特别是Conda包管理器)降低了Python的使用门槛,使数百万科学家和工程师能够高效解决复杂问题。Oliphant强调,这些开源工具通过赋能大公司、小公司和开源社区,产生了不可估量的影响。
Travis Oliphant 是 NumPy、SciPy 和 Anaconda 的创始人,本期他讲述了这些工具如何从个人项目演变为 Python 科学计算生态的基石。全片最有分量的判断:Oliphant 认为 NumPy 的诞生并非源于宏大规划,而是为了解决自己博士研究中的具体问题——这种“为自己解决问题”的开源模式,恰恰是它最终能支撑整个机器学习革命的根本原因。
Oliphant 指出,NumPy 的起源极其务实:他在 2000 年代初研究医学成像时,需要一种比 Python 原生列表更高效的多维数组工具。
Oliphant 认为,Anaconda 的诞生是为了解决 Python 科学计算生态中最大的痛点:包管理和环境配置的混乱。
Oliphant 坦言,Anaconda 的商业化是一个“摸着石头过河”的过程,其核心挑战是如何在保持开源的同时实现可持续盈利。
| 标的 | 嘉宾态度 | 关键数据 |
|---|---|---|
| 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)——例如安全审计、合规性、长期支持,而非单纯的功能增强。
Travis 对 Python 2 到 Python 3 的迁移过程有深刻反思,认为这是理解开源社区惯性的典型案例:
| 方面 | Python 3 早期版本 (3.0-3.2) | Python 3 成熟版本 (3.3+) |
|---|---|---|
| 核心改进 | 语法清理(如 print 改为函数) | 实质性新特性(如 yield from、asyncio) |
| 用户迁移动力 | 低 - 缺乏足够吸引力 | 高 - 有明确收益 |
| 社区接受度 | 缓慢 | 加速 |
关键教训:
Travis 认为 NumPy 在 GPU 支持上的缺失是一个历史遗憾:
数据-API 标准化努力:
Travis 分享了他对开源资金问题的长期思考:
| 资金模式 | 优点 | 缺点 |
|---|---|---|
| 书籍销售(如 Guide to NumPy) | 直接、可控 | 收入有限(3 年 9 万美元) |
| 咨询/服务 | 稳定现金流 | 分散开发精力 |
| 风险投资 | 可规模化 | 需追求高增长,可能偏离社区价值 |
| 企业赞助 | 可持续 | 需要证明 ROI,营销部门难以理解 |
创新机制:
Travis 在与 Fortune 100 公司合作中观察到:
1. 采购流程不匹配:企业习惯购买"解决方案",而非"组件"
2. 定制化成本:开源工具需要大量定制,企业往往用昂贵的咨询来弥补
3. 人才竞争:企业需要展示对开源的支持以吸引顶尖开发者
对比数据:
| 企业软件模式 | 开源替代模式 |
|---|---|
| 购买现成产品 | 获取可定制工具 |
| 依赖供应商升级 | 社区持续迭代 |
| 高许可费用 | 低初始成本 |
| 锁定效应 | 灵活性高 |
Travis 从语言设计角度分析了 Python 成功的原因:
与 Lisp 的对比:
Travis 对比了 TensorFlow 和 PyTorch 的社区策略:
| 维度 | TensorFlow | PyTorch |
|---|---|---|
| 社区参与度 | 较封闭,难成为核心贡献者 | 更开放,接受社区输入 |
| Python 接口 | 早期差,后通过 Keras 改善 | 原生 Pythonic |
| 企业支持 | Google 主导 | Facebook 支持 |
| 与 NumPy 生态整合 | 较晚 | 更早 |
关键洞察:两个框架都源于内部 C++ 库,Python 接口是后来"螺栓固定"的,这导致了与 NumPy 生态的割裂。
Travis 从 Guido van Rossum 身上学到的领导原则:
1. 愿意倾听:对科学计算社区的需求保持开放态度
2. 适当授权:在自己不熟悉的领域(如科学计算)选择信任社区专家
3. 早期贡献者培育:积极回应新人贡献,否则他们会流失
关于"善意假设":
Travis 给出了具体且实用的建议:
1. 建立根基:找到你爱的人并承诺,这提供不可替代的锚点
2. 保持好奇心:不要过早固化认知,给自己 10 年探索时间
3. 建设而非破坏:如果想改变什么,建造替代品而非攻击现有系统
4. 接受迭代:第一个版本大概率很糟糕,这没关系
5. 深度工作:好编程需要持续数小时的专注,无法通过碎片化完成
6. 警惕炒作周期:TDD、敏捷等方法论有信号价值,但非万能答案
Travis 认为编程的核心是问题解决与数学思维的结合:
警示:抽象既是力量也是限制——它让我们高效,但也可能让我们忘记其他可能性。