Joshua Harlow是一名Python开发人员,自2012年起任雅虎OpenStack团队的技术主管之一,他还曾作为CTO小组的成员之一负责调研IaaS解决方案。自那时起他陆续开发了若干Python库,如Taskflow(<https://git.openstack.org/cgit/openstack/taskflow/>)、automaton(<https://github.com/harlowja/automaton>)和Zake(<https://github.com/yahoo/Zake>)。
![](https://box.kancloud.cn/5f3f787a95bff9da190d69e2344207e5_207x207.png)
**是什么促使你开始使用Python的?**
我开始使用Python(那时候肯定还是Python 2.3或2.4)编程大概要追溯到2004年,那时我在IBM纽约(我的大部分亲戚和家人都住在纽约州北部,离他们很近)的Poughkeepsie实验室做实习生。我基本已经忘了当时具体做什么,但是主要用wxPython([http://www. wxpython.org/](http://www.wxpython.org/))和一些Python代码自动化某些系统。那就是我第一段和Python有关的经历,而且我将其称为我所迈出的第一步(那时候基本就是不断地输入`self`)。在实习结束之后我返回了学校(克拉克森大学,Clarkson University),后来我又读了研究生(罗彻斯特理工学院,Rochester Institute of Technology),并最终在毕业后加入雅虎,工作至今。
在接下来的几年里我在不同的团队(主要使用PHP、C++和Java)里工作过,而且还有幸和一些PHP核心开发人员一起工作,如Rasmus Lerdorf([https://en.wikipedia.org/wiki/ Rasmus\_Lerdorf](https://en.wikipedia.org/wiki/Rasmus_Lerdorf),他发明了PHP)和Sara Goleman(他负责<http://www.yahoo.com>的后台和其他一些工作)。
最终我止步于CTO小组,在那里我和其他一些成员负责调研可用的开源云平台。最终我们选择了OpenStack(我们还调研了CloudStack以及基本上已经废弃的Eucalyptus),它几乎完全用Python开发(很可能是现存的最大的两三个Python项目之一)。我自2012年加入OpenStack社区并先后参与了若干组件的开发,目前我主要专注于OpenStack内外皆可用的扩展库(在oslo项目下,<http://wiki.openstack.org/wiki/Oslo>)开发。我坚信(并且作为一名鼓吹者),创建OpenStack内外皆100%可用的库是非常重要的,而且我感觉这可以确保社区所开发的设计/开发良好的库不光是被它自己所使用(这意味着那些库不能令更大的开源世界获益,我觉得这不太好,也不应该是开源该有的样子)。
**关于这门语言,你喜欢什么不喜欢什么?**
我喜欢的一些方面如下(不完整列表)。
- 简洁。Python可以让新手开发人员迅速上手,也能让有经验的开发人员很容易地持续使用它。
- 代码风格检查(审阅代码是软件开发的重要组成部分,而且可以通过flake8、pep8和pylint这样的工具来保持一致性)。
- 自由选择编程风格并随意组合(但不会给自己带来麻烦)的能力。
一些我不太喜欢的方面如下(不完整列表)。
- Python 2到Python 3的切换仍然比较痛苦(尽管six已经解决了大部分问题),但强制切换对维护一个社区来说似乎并不是个好办法。
- Lambda太过简单,应该赋予其更多的能力。
- 缺乏好用的包安装器(pip仍然需要改进,如果能有个真正的依赖处理器就太好了)。
- GIL(以及对它的需求)令我很不爽。
- 对显式asyncio模型的补充。我其实更乐于看到对隐式模型(如eventlet)的原生支持,而且现在已经有方法对使用green-threads和native-threads(对运行代码是透明的)进行切换(在解释器启动的时候)。在高并发/负载的情况下,我觉得无论如何都不能用单进程,反倒宁可让隐式的green-thread风格仅作为一种方式存在,人们如果想用的话(如果想得到额外的性能提升,那么在不得不切换到多线程之前,早晚都得做)可以切换到上面(这使得无需额外工作便可实现到新模型的转换)。
- 割裂的Python社区,主要是关于cPython和pypy(以及其他变种)的拆分。这件事让人总觉得不太对,而且应该互相协作以便两个项目能够合并在一起(共赢?)。
**你最近在开发一个名为`debtcollector`的新库,进展如何?**
进展很顺利!前面提到的简洁性使得开发一个新库非常容易,而且能够很容易地发布以便为他人所用。因为其代码主要源自我开发的另一个库(taskflow [④](#ac14) ),所以代码的移植和扩展相对很容易而且不用太担心API的设计。我非常高兴地看到其他人(OpenStack社区内外都有)也对它有需求并开始使用这个库,我希望这个库能进一步成长,从而包含一些其他库(或应用)认为有用的更为丰富的废除模式。
**依你之见,Python最大的缺憾是什么?**
这是个很难的问题,因为并不多,所以我只挑两个我认为能让Python更现代的(我所认为的现代):
- 大多数新兴的语言(如rust、使用Chrome V8 JavaScript引擎的Node.js以及其他语言)都包含了Python所具有的许多能力,但是它们都是即时(JIT)编译的。如果默认的cPython也能即时编译(并且能高性能地这样做),以便Python能够在性能方面能与这些新兴语言进行竞争。(是的,我知道开发出一个好的JIT编译器会花掉一个团队若干年的时间,但是我相信PyPy的相关工作已经进行一段时间了?)
- 随着时间的推移(在我协助开发taskflow以及其他库之后),对我来说一个越来越明显的需求是,Python真的需要一套强大的并发模式。我指的不是asyncio和/或threading风格的模式(我认为这些太底层),而是更高层次的有助于使应用程序能够有效地运行于更大规模的负载的概念。我知道一个名为goless的Python库(除taskflow之外的),它从Go语言(它提供了内置的并发模型)借鉴了很多概念。我相信这些更高层次的模式有必要作为标准库内置的顶级原函数/模式(或者通过其他机制提供)并妥善维护,以便新手开发人员(甚至是有经验的开发人员)能随心所欲地使用它们。我甚至觉得,如果没有这些功能,Python 很难与那些已经提供了类似支持的语言进行竞争。
有机会再谈,愿你编程顺利,生活愉快!
- - - - - -
[④](#ac14) 感兴趣的话,欢迎参与,为这个项目做贡献,并随时加入我们的IRC讨论。
- 内容提要
- 中文版序
- 前言
- 第1章 项目开始
- 1.1 Python版本
- 1.2 项目布局
- 1.3 版本编号
- 1.4 编码风格与自动检查
- 1.5 Joshua Harlow访谈
- 第2章 模块和库
- 2.1 导入系统
- 2.2 标准库
- 2.3 外部库
- 2.4 框架
- 2.5 Doug Hellmann访谈
- 第3章 管理API变化
- Christophe de Vienne访谈
- 第4章 时区陷阱
- 第5章 文档
- 5.1 Sphinx和reST入门
- 5.2 Sphinx模块
- 5.3 扩展Sphinx
- 第6章 分发
- 6.1 简史
- 6.2 使用pbr打包
- 6.3 Wheel格式
- 6.4 包的安装
- 6.5 和世界分享你的成果
- 6.6 Nick Coghlan访谈
- 6.7 入口点
- 6.7.1 可视化的入口点
- 6.7.2 使用控制台脚本
- 6.7.3 使用插件和驱动程序
- 第7章 虚拟环境
- 第8章 单元测试
- 8.1 基础知识
- 8.2 fixture
- 8.3 模拟(mocking)
- 8.4 场景测试
- 8.5 测试序列与并行
- 8.6 测试覆盖
- 8.7 使用虚拟环境和tox
- 8.8 测试策略
- 8.9 Robert Collins访谈
- 第9章 方法和装饰器
- 9.1 创建装饰器
- 9.2 Python中方法的运行机制
- 9.3 静态方法
- 9.4 类方法
- 9.5 抽象方法
- 9.6 混合使用静态方法、类方法和抽象方法
- 9.7 关于super的真相
- 第10章 函数式编程
- 10.1 生成器
- 10.2 列表推导
- 10.3 函数式函数的函数化
- 第11章 抽象语法树
- 11.1 用抽象语法树检查来扩展flake8
- 11.2 Hy
- 11.3 Paul Tagliamonte访谈
- 第12章 性能与优化
- 12.1 数据结构
- 12.2 性能分析
- 12.3 有序列表和二分查找
- 12.4 namedtuple和slots
- 12.5 memoization
- 12.6 PyPy
- 12.7 通过缓冲区协议实现零复制
- 12.8 Victor Stinner访谈
- 第13章 扩展与架构
- 13.1 多线程的注意事项
- 13.2 多进程与多线程
- 13.3 异步和事件驱动架构
- 13.4 面向服务架构
- 第14章 RDBMS和ORM
- 14.1 用Flask和PostgreSQL流化数据
- 14.2 Dimitri Fontaine访谈
- 第15章 Python 3支持策略
- 15.1 语言和标准库
- 15.2 外部库
- 15.3 使用six
- 第16章 少即是多
- 16.1 单分发器
- 16.2 上下文管理器
- 第17章 延伸阅读
- 版权信息
- 版权声明
- 欢迎来到异步社区!
- 异步社区的来历
- 社区里都有什么?
- 购买图书
- 下载资源
- 与作译者互动
- 灵活优惠的购书
- 纸电图书组合购买
- 社区里还可以做什么?
- 提交勘误
- 写作
- 会议活动早知道
- 加入异步