Brett Cannon是加拿大软件工程师和Python核心开发人员。
他是微软的主要软件开发人员,在那里他从事编辑工具的工作。曾任谷歌软件工程师和oplop创建者。2003年,Brett成为Python软件基金会(Python Software Foundation,PSF)的成员,并在2013年至2014年期间担任PSF主任。他也前PyCon美国委员会成员,曾任PyData西雅图2017会议主席。Brett领导了CPython向GitHub的迁移,并创建了ImportLib。他的开源成果包括caniusepython3,他是17个成功的Python增强提案(Python Enhancement Proposals)的联合创作者。讨论主题:核心开发人员、V2.7/V3.x、Python冲刺活动(Python Sprint)。
推特联系:@Brettsky
翻译校对:码中人
Mike Driscoll:你为什么成为一名计算机程序员?Brett Cannon:从我记事起,我就一直觉得电脑很有趣。幸运的是,我所读的小学,有一个电脑实验室,里面全是Apple IIe。那时候苹果是最尖端的,所以我比较早就接触到了它们。在初中和高中之间的那一年,我在暑假上了一节计算机课,其中包括一点Apple BASIC语言的知识。我学会了,而且我学得很出色,在第一个星期就完成了整个课程。不过那时并未考虑未来从事计算机方面的工作。这一直持续到高中,然后到了选修大学课程的时候,我妈妈让我答应她两件事。我得修一门哲学的课程,才能修一门计算机编程的课程。我两门课都修了,两个都喜欢。我又一次在开课前前两周预读了我的入门C书,这本书整个学期都有用。有一天下课后,我留下来实现了一个井字游戏(tic-tac-toe),我沉迷其中,连晚饭都忘了吃!那是我人生中一个尤里卡(eureka)时刻。编程语言的无穷的创造力的让我无法自拔。从此我就踏上了编程之旅。Brett Cannon:“编程语言的无穷的创造力的让我无法自拔。从此我就踏上了编程之旅。“
我知道井字游戏是一个已经解决的问题,所以我想我实际上可以写出逻辑,这样我就可以把井字游戏完美地作为一个程序来玩了。有一天晚上,我花了大约六个小时来做这件事,我完全沉浸其中,因为我真的能做到这一点。它为我开启了计算机可以实现无尽可能,它带给我的自由和思考问题的能力让我彻底着迷。我就一直编程了。Driscoll:是什么让你如此关注Python及其社区?Cannon:嗯,我最后去了伯克利,拿到了哲学学位,但我一直在修计算机科学课程。伯克利大学的计算机科学入门课程有一个入学考试,我担心自己不懂面向对象编程,因为我只懂C,所以我四处寻找一门面向对象编程语言。我找到了Python,学会了它,热爱了它,并不断在其中编写个人程序。有一次,我需要time.strptime,这个函数用于获取表示日期时间的字符串,并将其解析返回时间元组。当时我在windows上写代码,但time.strptime在Windows上不可用。因此,我想出了一种解析它的方法,在这种方法中,您仍然需要插入locale信息,但它可以正确的解析时间。那时,ActiveState的编程攻略(Cookbook)还是一个很重要的Python圈子,所以我在ActiveState上发布了如何实现strptime的方法。后来,O'reilly出版了《Python Cookbook》的第一版,亚历克斯·马尔泰利将该方法作为最后一个范例收入书中,这也恰好是书中最长的案例。Brett Cannon:“所以我在ActiveState上发布了如何实现strptime的方法。”
但是,大家必须输入他们的本机信息,这仍然让我感到不快。我很沮丧我不能完美解决这个问题。所以在我的脑海里,我一直在想怎样才能把现场信息弄出来。最终,我解决了它。实际上那是从伯克利毕业后的一周,我给了自己写解决方案的时间,这样你就不用再输入区域信息了。之后,我给Alex Martelli发了一封邮件,因为我们在那时候交换了几次邮件,我说,“嘿,我已经解决了这个问题,所以不需要再输入区域设置了。我怎么把这个问题往上游推进呢?”AlexMartelli说,“哦,好吧,你只需通过电子邮件发送这个邮件列表Python-Dev,就可以提交补丁了。”Brett Cannon:“Alex Martelli说,”哦,好吧,你只需通过电子邮件发送Python-Dev这个邮件列表,就可以提交补丁了。”
所以,我向邮件列表发送了补丁。印象中斯基普·蒙塔纳罗是第一个回复的人。斯基普说,“干得漂亮,你上传文件,我们就会处理它并接受补丁。”我觉得那太棒了。我能够为这个项目和这门语言做出贡献,我觉得这真的很有趣。Brett Cannon:“我能够为这个项目和这个语言做出贡献,我认为这真的很有趣。”
所有这些都发生在我从本科到研究生的那一年。我当时想进入计算机科学研究生院,我知道除了正在学习的课程,我还需要更多的编程经验。我想我可以为Python做出贡献并从中获得帮助。那时我有很多时间,所以我决定我要参与其中。BrettCannon:“所以我决定我要参与其中。”
于是我加入了邮件名单,潜伏其中不断提问。在同一年,我提出开始研究Python-Dev摘要,它在那时已经停止了。因为我觉得我有时间这样做,并且这是一个学习的好方法,因此它迫使我阅读Python-Dev中的每一封的电子邮件。一个有趣的副作用是,我知道了没有人有时间去处理的任何小问题,所以我看到了几乎所有人之前出现的任何事情。我能够很容易地找到一些小问题来解决和学习,坚持不懈的这样做。通过Python-Dev摘要的训练,我提出了越来越多的问题。在某种程度上,我知道得足够多了,在2003年第一次PyCon会议(至少是第一次以PyCon为标签的会议)之后,我就成为了一名核心开发人员。从此我就上瘾了。我主动了解团队,他们也成了我的朋友。我真的很享受,很有趣,所以我坚持下来下到现在,从那以后我就再也没有停下来超过一个月了。https://wiki.python.org/moin/getinclude
这并不意味着您必须是一名核心开发人员才能进入Python社区。只要你喜欢它,不管它对你有什么意义,你都可以参与其中。
Driscoll:那么是什么让你决定开始写关于Python的博客和文章呢?Cannon:写博客是参与其中的一种方式,因为我喜欢写作,博客恰好适合我喜欢的交流方式。我很久以前就开始这样做了,差不多一直都在这样做。我总是喜欢尽我所能向世界传播知识。
Driscoll:在正确的时间学习Python很重要吗?你建议提早进入Python社区吗?Cannon:是的,我认为我在是在正确的时间,正确的地点,以及正好有大把空余时间加入Python社区的。以后,只要时间充裕,我都可以为社区贡献力量。我也是在Python项目还不是那么大的时候开始的。我记得当我开始读硕士的时候,人们会问我业余时间做什么。当我说我为Python做了贡献时,他们会回答:“这是带空白的语言吗?”我是在理想的时间参加到Python社区的,在2005年这门语言开始流行之前。我有时希望我能更早地开始,但我当时更年轻而不一定会喜欢它。所以一切都是恰当好处。
Driscoll:您对Python的哪些部分做出了积极贡献?是否有您帮助启动的模块或您对其有重大影响的模块,例如datetime模块?Cannon: 对我的产生影响实际上是time模块,它早于datetime模块!我编写的第一个模块是Python2中的dummy_thread和dummy_threading模块。这是另一个别人建议且值得我去做的事情。邮件列表的哥们说他们想要这么一个功能,却一直没能实现。所以我给他们发邮件说:“嘿,你会搞定吗?”他们说没有,所以这是一件有用的事情,所以我就做了。这是我从头开始编写的第一个模块。我想,我基本上已经接触了Python语言的所有内容。我甚至接触过很少有人接触过的解析器。我想我曾经帮助写过一些令牌化的警告。我在Python编译器中扮演了很重要的角色,然后是语法树到字节码,再到一个抽象的语法树。Brett Cannon:“我想,我基本上已经接触了Python语言的所有内容。”
Jeremy Hilton很早就开始了这个项目,Guido van Rossum给每个人下了最后通牒,因为这个项目已经花了好几年还没完成。所以Guido说:“你必须在下一个版本之前完成这个任务。”
Brett Cannon:“所以Guido说,'你必须在下一个版本之前完成。‘”
于是我参与进来,帮Jeremy完成了后半部分。我为warnings块做了类似的事情。Neil Norbits已经开始实施它了,但他有点偏离了这个项目,所以我拿起它,在剩下的时间里完成了它。这就是为什么我最终对warnings模块非常了解的原因!还有什么原因导致我如此关注Python呢?我最出名的可能是importlib。当前import的大部分实现都是我写的(全部是针对Python3.3),随后Nick Coghlan和Eric Snow帮了大忙,但整个importlib包都是我写的。这些都是我直接想到的,但我基本上只是随处接触了所有的东西。14年后我再也记不住了!
Driscoll:我明白你的意思。我讨厌当我遇到一些代码时,我会想:“这是谁写的,为什么它这么糟糕?”我记得两个前这个模块我写得很好啊!Cannon:是的,如果你阅读了你自己六个月前的代码,并且觉得这些代码仍然很好,那么可能出了什么问题。这通常意味着你还没有学到新东西。Cannon:如果你阅读了你自己六个月前的代码,并且觉得这些代码仍然很好,那么可能出了什么问题。这通常意味着你还没有学到新东西。
Driscoll:您认为作为一名Python核心开发人员最大的好处是什么?Cannon:可能只是我作为一个朋友所结下的友谊。很多核心开发者都是我的朋友。我们一年聚一次,我几乎每天24小时都和很多这样的人在一起,整整一周。这是我在一年剩下的时间里和他们在网上相处的最多的时间。这可能比我花在很多朋友身上的时间还多,因为你有多长时间和你的好朋友们一起度一个星期的假呢?所以,是的,这是诚实的友谊在这一点上。这就是能够和这些人一起工作,向他们学习,享受我们所做的事情,并继续这样做。我不经常考虑Python的影响。有时候想起来有点不可思议,所以我尽量不去想它。我不想因为它而产生任何形式的自我,所以我试着积极地不去想它太多。只能说我在这方面工作是很酷的,但主要原因是和朋友一起工作。我仍然非常清楚地记得,当我第一次加入Python核心开发团队的时的场景。尽管人们说我是Python开发人员团队中的一个高层领导,但我从来没有完全适应这种想法。我从不这么想自己。Guido曾在谷歌被问到:“从1到10分,你对Python了解多少?”他说是8分。Guido曾在谷歌被问到一个著名的问题:“从1到10的比例来看,你对Python有多了解?”“他说最多8分。
没有人知道整个Python系统,因为它太大了,无法知道。我们都能掌握其基本语义,但无法了解其所有复杂细节。有多少人对描述符或元类了如指掌?我偶尔得查一下文档,所以没人知道整个系统。
Driscoll:那么你认为Python作为一种语言,作为一个整体,会走向何方?您是看到它在某些领域越来越流行,还是Python正像C++一样进入衰老期?Cannon:Python今天处于一个有趣的位置,Python在各个领域都能成为主角。当然,有一些领域不适合Python,比如底层操作系统和内核开发。但除此之外,Python几乎无处不在。据我所知,我们在Python方面仍然排在第二位的是数据科学。我认为,我们的增长趋势预测,至少在未来几年内,Python不会立即取代R成为数据科学语言。但从长远来看,我确实认为Python会迎头赶上。Python在桌面应用程序领域也不是那么强大。但在一定程度上。桌面应用领域也可以使用Python开发,Python也还是有一定竞争力。从长远来看,我们将到达一个临界点,到处都是Python代码,以至于Python可能永远不会消失。Brett Cannon:“从长远来看,我们将到达一个临界点,到处都是Python代码,以至于Python可能永远不会消失。”
希望Python永远不会像COBOL那样只是在口头传播,希望Python会获得更多的爱和更长时间的爱。但我目前还没看到Python真正的普及,不过现在这个状态Python代码是永不会消失。
Driscoll:Python是当前AI和机器学习热潮中的主要语言之一。您认为是什么使Python成为一种很好的AI语言呢?Cannon:我认为Python易学易用,对AI非常友好有益。目前在AI领域工作的人已经不仅仅是软件开发人员,现在已经包括了像数据科学家这样不需要经常编写代码的人。这意味着人们渴望一种能够很容易地教授给非程序员的编程语言。Python非常适合这种需求。您可以看看Python是如何在科学界和计算机科学教育中获得吸引力的,看看这不是一个新的趋势。
Driscoll:现在人们应该转向Python3吗?Cannon:作为一个帮助Python3诞生的人,我不是一个公正的人来问这个问题。我显然认为人们应该立即切换到Python3,以获得自Python3.0首次问世以来在该语言中添加的内容的好处。Brett Cannon:“我希望人们意识到,向Python3的过渡可以逐步进行,这样切换就不必很突然,也不必特别痛苦。”
我希望人们认识到,向Python3的过渡可以逐步进行,这样切换就不必很突然,也不必特别痛苦。Instagram在9个月内切换,同时继续开发新功能,这说明它是可以做到的。
Driscoll:展望未来,Python4会发生什么?Cannon:当然,Python 4的事情本身就是一个很大的话题。关于Python4我还没听过多少,我很乐意听到。Python 4目前还是神话,它不存在。Python4就像是Py4k梦想与Py3K。这门语言到底能走向何方?当我们升级Python4的时候,我们可能会大量清理Python标准库并将其减肥。我们可能会删除一些语言元素,而不是将它们继续保留,这意味着并不会与Python 2兼容。Brett Cannon:“当我们升级Python4的时候,我们可能会大量清理Python标准库并将其减肥。我们可能会删除一些语言元素,而不是将它们继续保留,这意味着并不会与Python 2兼容。”
对于Python4,我们可能会有一个跟踪垃圾回收器(tracing garbage collector),而不是引用计数(reference counting)来获得这种并行性。我还不知道,但这就是我看到的方向:大体上是一样的,特别是因为我们越来越多地依赖于社区围绕Python建立起来的东西。我的意思是,我们拥有庞大的标准库的原因之一,是因为它否定了互联网,对吧?Python本身早于Unicode作为官方标准,因为Python于1991年2月首次公开,Unicode1.0于1991年10月最终确定。我不知道那件事。我不得不去查它,因为它是人们问我“嘿,你为什么不像Java那样从一开始就做Unicode?”就像,嗯,我们比Unicode早,所以这就是原因!所以在未来,标准库不需要像现在这么大。如果你可以通过pip安装等价的库,就完全不需要这么大。我们很幸运有一个充满活力的社区,所以我们有很多可供选择的第三方库,它们的标准如此之高,以至于我们可以精简标准库,降低核心开发人员的维护负担。我认为我们可以在未来的一些Python版本中做到这一点,而不会对社区访问高质量模块带来任何风险。我认为这将使Python更简单、更精简,更好地使用。Brett Cannon:“所以在Python4中,我认为标准库不需要像现在这样大。”
Driscoll:你认为是什么推动了最近对MicroPython的兴趣的增长?Cannon:人们确实不断问我关于MicroPython的创作事情。虽然我自己不使用它,但我想它一定是变大了,因为我一直被问到它!我敢打赌,这是因为教育界,有很多人使用microbit和所有这些东西。所以这可能是所有对 MicroPython 的兴趣的来源。
Driscoll:我们如何才能开始为Python语言做出贡献?我们怎么开始?Cannon:我们有一个叫Dev Guide的东西,我从2011年开始写。它的全称是Python Developer's Guide。基本上,Dev指南概述了您需要知道的一切,以便您能够对Python语言做出贡献。Brett Cannon:“开发指南概述了您需要知道的一切,以便您能够对Python语言做出贡献。”
开发者指南(https://devguide.Python.org/)向您展示了如何获取Python源代码、编译它并运行测试套件。它为你如何找到你想要贡献的东西提供了建议。您还可以找到针对核心开发人员的文档,它向您展示了如何进行代码审查和其他操作。在这一点上,Dev Guide是一个相当大的文档,它具有自己的生命。我只是告诉人们去阅读开发指南,试着对你想要帮助的东西有一个想法。选择一个您非常熟悉的模块,您可以帮助修复其中的bug,或者您感到非常舒服的模块。我们还有一个核心导师邮件列表,它不是故意存档的,这样你就可以问任何问题,你也不用担心五年后有人会发现它。所以,注册核心导师,阅读开发指南,然后找到一些你想做的事情!
Driscoll:我们能通过代码审查为Python做出贡献吗?Cannon:是的,事实上,在这一点上,我已经开始尝试推动人们去做代码审查,所以如果你真的很熟悉一个模块,并且GitHub上有一个对它的拉动请求,请去做一个对这个拉动请求的代码审查。如果您对定期使用或不定期使用的模块进行代码审查和内容审查感到满意,那么这是为Python语言的开发做出贡献的一个非常好的方法。Brett Cannon:“如果你觉得可以对一个你经常使用的模块进行代码审查和审查,这是一个对Python语言的开发做出贡献的非常好的方法。”
在推动Python向前发展时,最大的限制是核心开发人员的能力带宽。因此您的代码审查确实有助于使项目更易于管理。请加入我们,帮助我们获得更多的补丁,并修复错误。Driscoll:我们还能怎样为Python语言做出贡献呢?
Cannon:对Python社区的一个很大的帮助是,当你看到的关于Python的问题,用开放和诚实的态度回答就行。
Driscoll:是否有任何下游的Python项目可以有人参与并为之做出贡献?Cannon:是的,如果您没有找到一个令您感兴趣的当前模块,那么您可能会发现对更下游的一些需要帮助的Python项目做出贡献是很有趣的。例如,Python包索引的下一个版本总是可以使用一些帮助。如果你发现下游有什么你觉得有趣的东西就跳上船。Cannon:老实说,加入新项目真的有点难。我们通常有足够多的人参与和关注,他们随时会加入并修复问题。所以有时很难参与进来,这就是为什么我开始推动社区增加更多的合并请求的代码审查。
Driscoll:在PyCon过程中,我看到Python语言通常有一个Python语言冲刺(sprint)活动。你们在PyCon 冲刺中里都做些什么?Cannon:我自己也领导过一些PyCon冲刺活动,我们通常做的是让Python核心团队坐在活动室的几张桌子旁,然后说:“嘿,如果你想做贡献,那就进来吧。”我们告诉PyCon sprint与会者的事情和我们告诉每个想要远程贡献的人的事情是完全一样的:这里是开发指南,阅读它,启动并运行您的工具链,并寻找可以工作的东西。如果你找到了什么,那就去做吧。Brett Cannon:“我们告诉PyCon 冲刺活动的与会者...这是开发指南,阅读它,启动并运行您的工具链,并寻找可以工作的东西。”
当然,在sprints上,我们会在房间里回答任何人可能有的任何问题。通常,像R.David Murray这样的人会在sprint Room中找到一个容易出现的bug的列表。这是人们进来打招呼的大好机会。如果他们想开始投稿,那么他们有核心的Python人员在房间里,所以他们有一个快速的回音时间,而不是必须等到有人看到电子邮件并回复。这很大程度上只是转向你左边或右边的人,你可以问并得到你的答案。有时,我们会做一个简短的演示,说明我们在sprint期间的发展方向,如果人们能够加入进来,那就太好了。我们说,“这是工具,这是如何运行构建,这是如何运行测试。”然后我们开始编码。sprints与会议的其他部分相比是非常放松和放松的。当你能做的时候,我彻底推荐他们。只是在一个冲刺室里不像在一个表演的主要区域那么忙乱。那是因为人少了,大家都只是坐下来放松一下。除了吃午饭和吃午饭之外,没有任何过渡,而且更容易找到与之交谈的人,这很棒。所以冲刺肯定很有趣,如果可以的话,我会试着在未来一两年内进行一次冲刺。Brett Cannon:“我们说,”这是工具,这是你如何运行构建,这是你如何运行测试。“然后我们就开始编码了,“
Driscoll:其他一些团队也有很好的小诱惑,比如如果你在帮助Russell Keith-Magee的BeeWare项目,你的第一次贡献就会得到一个挑战币(challenge coin)。你有关注这些项目吗?Cannon:是的,如果你帮Russell的项目,他会给你一个挑战币。这是一个巨大而令人印象深刻的金属硬币。我现在拿在手里的是我从Russell那里赚来的,它占据了我Nexus 5X屏幕的很大一块!以下是我如何从Russell那里获得我的挑战币:如果你做出了BeeWare项目接受的贡献,比如文档或你拥有的东西,那么下次你见到Russell本人时,你就会得到一个这样的硬币。所以在我的例子中,有一天我碰巧在Twitter上,当Russell在Twitter上发布了一个回购的例子时,我发现了几个错别字。我发送了一个拉请求,以得到他们的修复,这就是我最终得到我的硬币。我一直想要一个很久了,因为我认为这是一个很酷的表示感谢的东西,任何人都可以赚到一个,如果他们作出贡献。
如果你对挑战币一无所知,99% Invisible.org/episode/coin-check/有一个非常好的播客节目来解释这些事情(https://99percentinvisible.org/episode/coin-check/)。
Brett Cannon:“如果你对挑战币一无所知,那么99% Invisible 网站上有一个非常好的播客节目来解释这些事情。”
Driscoll:Python核心团队是否提供一些像Russell挑战币那样的激励措施?您觉得人们为Python语言做出贡献的核心精神和激励是什么?Cannon:我一直想为Python制作一个挑战币,既为核心开发人员,也为贡献了一个补丁的人。真是个好主意。但我也不像罗素那样经常出差,所以这有点难,因为我需要出席人们参加的会议,才能给他们硬币。但这是一个很酷的想法,我希望有更多的项目能做到这一点。Python核心通常采用一种非常被动的激励方法。这是真的,但这仅仅是因为我们把大部分时间都花在了我们想要完成的Python语言元素上,而且我们知道很多人会喜欢的。这确实是我们对Python做出贡献的深层动机,我欢迎所有人加入进来,无论是远程的,还是在PyCon会议中冲刺活动中。Driscoll:谢谢你,Brett ·Cannon。(完)