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>)。

**是什么促使你開始使用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章 延伸閱讀
- 版權信息
- 版權聲明
- 歡迎來到異步社區!
- 異步社區的來歷
- 社區里都有什么?
- 購買圖書
- 下載資源
- 與作譯者互動
- 靈活優惠的購書
- 紙電圖書組合購買
- 社區里還可以做什么?
- 提交勘誤
- 寫作
- 會議活動早知道
- 加入異步