【CSDN 编者按】十五年前,《程序员》杂志曾专访过 Python 之父 Guido van Rossum,一起探讨了 Python 3.0 的较为明显的新特性,即增加了对中文( Unicode )的支持。十五年过去,Python 的版本号只前进了一个数字,但是 Python 已经是编程流行度的王者。我们也在近期对 Guido van Rossum 再次进行采访,除了就开发者们关心的 Python 4 问题进行了最新披露外,还对软件开发核心进行了深层解读。
2007年,CSDN 《程序员》编辑在 Google Dev Day 大会现场采访到Guido van Rossum,那时的他已经加入 Google 近两年,而Python已经是Google的第三大编程语言,适用速度不太高的应用,比如企业内部的一些小工具以及和沟通交流的工具应用。当时的会场上不断有中国程序员走近 Guido ,索要签名和合影,就像打卡网红景点一样。Guido 很高兴地看到 Python 在中国正从小众走向大众。对于如何推动 Python 在中国的发展,他认真地提出了几个小建议“比如,CSDN 网站上有人在翻译我的英文 Blog。出版社也可以考虑出一本中文的 Python 教程或图书,或把一些现有的 Python 书籍翻译成中文。”
弹指一挥间,从 Guido van Rossum 在1991年发布第一个 Python 公开发行版本算起,Python 已然过了三十而立又一年。Guido 的小建议已一一实现,如今的 Python 也在全球编程语言总榜牢牢占据第一,超越了众多历史上流行的编程语言,成为最受欢迎的解释型编程语言,可以跨平台运行在所有主流操作系统之上。同时它在众多软件企业和组织,例如 Google、Mata(Facebook)、Twitter、Red Hat、Dropbox、阿里巴巴、腾讯、百度、NASA 等,都是排在最前列的编程语言。在 CSDN 2021-2022中国开发者调查报告中,工作中常用 Python 的开发者占比达30.7%,使用量呈逐年攀升趋势。
另一方面,诞生之初便是开源项目的 Python,三十多年来其生态圈对整个开源事业的贡献可谓源源不断,绵绵不绝。在 2000 年由于 GPL 早期在美国个别州与地方法律存在冲突,Python 2.0 发行版便自行创立了 PSFL 许可证,为推动 GPL 的进步作出了贡献。Python 社区也贡献了众多的开源软件,例如NumPy、SciPy、Matplotlib 等众多科学计算程序库,TensorFlow、PyTorch 机器学习框架,SaltStack 和 Ansible 等 DevOps 运维自动化平台,OpenStack 云计算解决方案,还有 Django、Tornado、Flask 等数不清的 Python Web 应用开发框架,等等,都已成为开源软件开发的重要基石。
此外,作为 Python 软件基金会( PSF )成员之一的 Google,还有一个 Google Summer of Code(GSOC)的项目,被众多开发者所喜爱,它赞助世界各地的大学生利用暑假时间参与到一些开源软件的开发中,为开源提供生生不息的新力量,如今已是全球最大的开源社区实习项目。
Guido 从一个小众语言的发明者,到最流行语言的“仁慈的独裁者”,转变为一个退休编程爱好者加入微软,他现在的工作和生活状态如何?本次对话,我们也向 CSDN 开发者征集了最想问 Python 之父的问题,从 CSDN 副总裁邹欣与 Guido van Rossum 的独家对话中,一起看看他的精彩解答。下面是Guido在加州海边度假别墅中的对话实录。
Python 缘起与三十载风云发展史
邹欣:现在很多人的第一门编程语言就是 Python。你是怎么开始学习编程的?
Guido:我最早是1974与1975年在阿姆斯特丹开始学习编程。学的第一门语言是 ALGOL 60,后续还学过一些别的语言,但我最爱的是 Pascal,它是一门非常优雅的语言。在这个过程中,我逐渐了解一门编程语言应有的特性,以及它们在处理具体问题时各自的特点。例如,在 ALGOL 60 里是没有字符串类型的,如果想定义一个标识符就必须用一种魔法一般的方式来处理字符串,这种魔法在不同的输入硬件上的施展方式还不一样——要知道我们当时是通过穿孔卡片来输入代码的,每一种卡片机都是不同的。而 Pascal 在处理字符串上也很有一套,我认为 Pascal 非常优雅,能帮程序员高效率编程。
邹欣:上世纪 90 年代初,你在圣诞节假期作为个人兴趣项目创建了 Python,当时你有没有想过有一天 Python 会如此大放异彩?如何看待今天的 Python?
Guido:当时,我在工作中有个任务要完成:用C语言写一大批功能非常相似的小型工具。对于重复编写非常相似的C语言代码,我比较心烦,如果能有个比 C 语言更好的编程语言就好了,我就能非常快速地完成任务。后来,我索性自己发明了 Python。当时只是想创造一个“胶水语言”,把写过的 C 语言小程序粘贴在一起构成一个新的工具。
我对 Python 后来的发展其实根本没有什么预期,我觉得它就跟当时做过的许多失败的项目一样,没有什么特别之处。Python 最开始的发展其实非常缓慢。它后来之所以会得到大家的青睐,主要是在上世纪90年代末期,很多科学家开始在进行科学计算时,就像我一样用 Python 来作为“胶水语言”,调用原来由Fortran 或 C++ 编写的代码。对于这些科学家来说,Python 是非常顺手的工具。
对比现在的 Python 和最早的版本,你也许会发现 Python 这门编程语言几乎没怎么变,只是类的声明有少许改变;print 从一开始到 Python 2 一直都是语句,直到在 Python 3 里才变成了函数;函数从最开始没有关键字和参数到后来有;以及 Python 3 才出现的双下划线魔法函数(Dunder/Magic Methods),等等。但总的来说,现在的 Python 跟最开始相比并没有特别大的差别,无论是语法、语义还是其本质精神都非常接近。
邹欣:大家刚接触 Python 这门语言时都会好奇的就是强制的代码缩进。如果重来一次,你是否会放弃缩进这个强制要求?
Guido:代码缩进(Indentation)其实并不是我发明的,当时的同事给了我启发。在 Python 中要求进行代码缩进的原因是 30 年前的代码编辑器都不能很好地对代码进行缩进排版,所以我就想鼓励程序员自己来对代码进行正确的排版,从而确保程序员从视觉上对代码的理解与编译器对代码的解析是一致的。这其实非常重要,几年前苹果公司就发生过一次非常严重的代码安全漏洞事故,就是由于代码中一个语句与程序员实际设想的 if-else 语法逻辑没有匹配而引起的,如图 1 。其实,严格要求代码缩进确实有点夸张,改用花括号,也不是不可以。
图1:Apple的SSL/TLS错误
邹欣:开源编程语言 Python 的发展是否像所谓的“曲棍球曲线”一样,是突然获得了高速发展?
Guido:我其实不是很喜欢“曲棍球曲线”这个词,虽然这是一种非常直观的表述。实际上任何事物的发展最终都会变得平滑,就像一个S曲线一样,在发展达到一个高峰后就不会继续高速发展了。
对于我来说,衡量 Python 发展的一个指标其实是社区事件。Python 最早是在1991 年,一个与开发工具有关的 Usenet 新闻组里发布的,后来我们建立了邮件列表(mailing list),到 1994 年 Python 有了专属的 Usenet 新闻组 comp.lang.python。在 1994 年初,Python 仍然只是一个在线社区。后来社区里的开发者表示希望能有真实世界的线下活动,于是 1994 年底我第一次主导了线下研讨会,当时只有不到 25 人参加。半年之后又举办了一次线下研讨会,参加人数倍增到 50 多。从那时起,我觉得半年一次线下活动实在是太耗费精力了,于是从第三次开始改成了一年一次。再后来,我们有了 PyCon 的会议形式,其它的 Python 会议逐在世界不同的地点举办起来。
关于 Python 的技术书籍出版也呈现出同样的“S曲线”发展,最开始每一位出版Python 相关书的作者都会给我寄一本副本,我也开始收集这些书。到后来Python 的书出版得越来越多,很多作者也就没有给我寄书了。我也不知道这些书有多少本是成功的,但关于 Python 书籍的市场规模慢慢起来了。O’Reilly也出版了不少,甚至有个时期同时出版了三本 Python 的书。
邹欣:Python 的书在中国非常受欢迎,所有编程书籍里卖得最好的就是 Python,其中有一本《Python 编程从入门到实践》中文版畅销 100 万册,读者更是对其爱称为“蟒蛇书”。一定是因为 Python 能帮助人们解决他们在实际当中所遇到的问题,人们对此有极大的需求。
Guido:我想这一定也归功于中国庞大的人口基数,以及迅速的经济社会发展。
邹欣:技术和社会的确在快速发展,程序员也一直很忙,几十年前,程序员的显示器能显示的代码行数很有限。而现在的程序员喜欢用宽大的、分辨率高的屏幕,甚至是多个屏幕,并排在一起。你觉得多屏编程能极大地提升编写代码的效率吗?
Guido:你刚才描述的就是我在办公室的状态,被多个屏幕围绕,哈哈。但这并不会飞速提升编程效率。你得不停地转头查看各个屏幕,可能会让人分神。我有个个同事为了能更专注地写代码,他只用一个笔记本电脑屏幕,但开了 8 个代码窗口并排在一起,并用非常小的字体。
注本文节选自《新程序员·005:开源深度指南&新金融背后的科技力量》,目前已开启预售,欢迎大家扫描上方二维码订阅!
软件开发没有银弹
邹欣:随着硬件条件的改进,软件的进步,很多东西都变了,但所谓的“银弹”并没有出现。我们现在有 Python,也有了新的编程语言,例如 Julia、谷歌新近推出的 Carbon 语言等等,但这些是否只是语法糖?还是它们确实可以大幅提升开发软件的效率呢?
Guido:Fred Brooks 在《人月神话》书中最早引入这“银弹”这个词,阐述了没有什么工具能直接让软件开发的效率能得到大幅提升,我认为人的大脑可能才是软件开发效率的天花板,而不是屏幕上能显示多少行代码、或者编译器能跑得多快。新出现的 GitHub Copilot,我一用就喜欢上了它,它太棒了,但我也不认为这是提升代码编写效率的银弹——因为它自动生成了 10 行代码,你还得花时间去确认这 10 行代码所做的事情确实就是你想要的。
我想起以前听过的一个笑话,那是在 MS-DOS 的年代,有个外行的项目经理领导一个项目,要交付一百来个用户界面的应用,期限是六个星期。然而到第三个星期,他们还没有生成任何一个用户界面,这个项目经理非常焦虑,对他来说团队的生产效率就是零!然而程序员却说,他们正在构建一个工具,这个工具会在最后两天自动生成这一百个用户界面。这大概是所有程序员都梦寐以求的事情。事实上我当初创建 Python 的时候也是这么想的,我最后通过 Python 把原来所有 C 语言写的小程序都粘连在一起,很快完成了任务。
邹欣:什么才是软件开发最核心的东西?是使用“创造工具的工具”来极大提高效率么?
Guido:我认为对编程来说真正酷的事情,是将新软件构建于先前软件的基础之上,现在的程序员编写代码可以借鉴前人的代码。举例来说,假设我需要用Python 编写一个程序以对推特消息进行情感分析(Sentiment analysis)。虽然从未做过类似的事情,但我相信可以通过谷歌搜索引擎和Copilot就能在一个下午完成这项工作,因为我一定不是第一个去做这件事的人。可以看到我们现在构建软件的方式跟二三十年前很不一样。
软件实际上是由多层结构组成的。这有点像生物的进化。一方面 DNA 的编码方式已经有十亿年没有发生变化了,这就像计算机体系里的比特、字节、指针和内存一样。数亿年前隐生代的水藻细胞就已经有着自己独特的 DNA 编码,一个水藻细胞就像一个小型计算机。另一方面从水藻化石中发现的隐生代细胞跟现代的细胞,例如人类的组织细胞,没有太大的形态变化。不同类的多细胞可以组成不同的器官,各种不同的器官最终又组成了人类,人类自己又构成了人类社会。软件也像是这样,我认为软件开发领域最重要的事件就是通过网络把计算机都联系在了一起,从而能基于简单的细小结构构建出多层次的大型复杂体系。在简单当中蕴含着高层次的结构,这里面具有超乎想象的灵活性和可能性。
在软件当中其实最终都是指针、内存和计算,作为程序员了解这些最底层的概念非常重要。至少在学习编程的时候,要对此有所了解。这就像做加减乘除一样,你可以通过计算器来算出结果,但如果你不懂算术原理,当你在用计算器计算时不小心按错了,得到了错误的最终结果,你自己甚至都不知道错在哪里了。如果你懂一点基本算术原理,你就能对计算器的最终显示结果是否正确有一个大致的判断。如果还懂得更多一点的数学知识,就可以将一个原本无法直接用算术来进行解答的问题拆分成若干个小的算术问题,解决了这些小问题,就能算出最终答案。因此我们不能把计算机当作是一个魔法盒子,而要去了解它是如何运作的。这样虽然不一定能成为最厉害的程序员,但会比那些完全不懂基本概念的程序员更了解软件和计算机的弱点和约束,从而更好地运用各种软件工具,避免愚蠢的错误。
从“集市”走进“大教堂”,在微软做开源的日子
邹欣:谈起微软和开源,有一本书必须被提到,那就是《大教堂与集市》。许多人认为微软就像大教堂,而开源则像集市,现在你从集市走进了大教堂里。在微软内部从事开源有什么不一样的感受和印象吗?与 C#之父 Anders Hejlsberg、VS Code 负责人 Erich Gamma 等人有过交流和思想碰撞吗吗?
Guido:我对微软的第一个印象就是微软实际上并不只有一个微软,微软的内部实际上还有众多不同的部落,彼此有着不同的目标以及做事方式。有的人不怎么关心软件而只关心钱;有的人只关心软件而不怎么关心钱,但却不怎么关心使用软件的人;还有人会关心使用软件的人以及软件如何帮助到这些人。我很幸运在微软找到了属于自己的部落,这个团队关心开发人员,也就是使用 Python 的人。
当然,微软大部分的部门都关心用户。我最近有跟Excel团队有过接触,他们对 Excel 用户深入关注的程度给我留下了深刻的印象。我还跟 C#、C++、F# 和TypeScript 等团队都有过接触。实际上 Anders Hejlsberg 就是我的入职导师。
我发现微软内部对待不同的开发语言的态度非常有意思。这些编程语言的状态也很不一样,微软自己设计的语言,例如 C# 和 Visual Basic 得到了非常高的重视;而有的编程语言就像在光谱的另一端,不受关注,这里 Java 就是最显著的例子。由于一些糟糕的历史因素,Java 在微软内部很长时间都没有得到关注。
邹欣:在加入微软后,你有用过 VS Code 或是 Visual Studio 吗?你喜欢使用什么代码编辑器,是 Vim 还是 Emacs ?
Guido:这是一个非常有意思的问题。在我加入微软之前,我是一个有着至少30 年历史的 Emacs 用户。虽然我不是个非常极端的 Emacs 用户,但 Emacs的键盘快捷方式已经深深地嵌入了我的肌肉记忆当中。在Emacs之前,我用的是 Vim。一直到现在,任何时候我都能拿起 Vim 就用,我始终记得如何在 Vim 里切换编辑和导航模式。但只要超过了五分钟,我就会回到 Emacs 里进行工作。
在我加入微软之后,我决定去尝试一下 VS Code。然后我就喜欢上了它。这也是前面我提到 Copilot 的原因。虽然 Copilot 并不是 VS Code 专属的,但是VS Code 确实为 Copilot 提供了最为地道的支持。我个人认为 VS Code 是Emacs 的继承者,尤其是它的扩展架构。至于 Visual Studio ,我觉得那是微软自己的东西。虽然 Visual Studio 也有扩展体系,但显然不是面向所有终端用户的。
Python 4 还有多远?
邹欣:大家都非常关注 Python 4,对此你有些什么可以披露的?如果再次升级Python,对比从 Python 2 升级到 Python 3 会有什么不同?
Guido:实际上我也不确定 Python 4 是否会出现。因为从 Python 2 迁移到Python 3 对社区来说实在是一个太过于痛苦的事情,这次迁移还导致了社区里的分裂,甚至有些开发人员成了陌生人。Python 的核心开发团队没有预料到需要付出这么大的代价,所以大家后来不敢想象再有Python 4了。从我来看,即便今后会有 Python 4,它的迁移过程一定不能重蹈覆辙。
最近围绕 Python 有个激烈的讨论,是关于取消全局解释器锁(Global Interpreter Lock,GIL)。这个改变和迁移过程或许不会像之前那样痛苦。来自 Facebook 的 Sam Gross 就是极力提议要取消 GIL 的开发人员之一,他在过去很多年一直致力于采用多种策略来取消 GIL,从而实现线程自由。但这个观点既有支持的,也有持怀疑态度的。我对此不置可否。
如果 Python 指导委员会支持,我希望 Python 4 至少在扩展模块上能有很多的不同——唯有这样才能使 Python 3 到 Python 4 的迁移对普通用户而言是无感的。但或许对编写 Python 扩展的开发人员来说依然是痛苦的。因为整个Python 生态系统充满了各种扩展,例如 NumPy 和其它众多的科学计算库、数据科学库和机器学习库等等,它们将会从一个没有 GIL 的 Python 版本中受益。然而,它们已经使用含有 GIL 的 Python 版本编写了庞大的代码,迁移到没有 GIL 的 Python 版本肯定是个非常复杂的过程。但最终对于这些库来说,没有 GIL 可以实现更加安全的多线程以及多核计算。
邹欣:Python 在运行速度上的提升也是大家非常关注的方面。在这方面有什么新的进展吗?
Guido:在这方面我倒是持非常的乐观和正面的态度。加入微软之后,我被鼓励开启了自己的起步项目,我决定来看看如何提升 Python 解释器的运行速度。不过我非自己独自开发,还聘请了一个团队来做这个事情。这个小团队的第一位开发人员是过去十年来一直在努力提升 Python 解释器运行速度的人,他的名字叫 Mark Shannon。
再有几个月 Python 3.11 版本就会正式发布,根据我们的基准测试,对比Python 3.10,它会有 20% 到 25% 的速度提升。这是我们三到五个人花了一年左右的时间完成的。3.12 和 3.13 版本还在计划中,我们期待 Python 解释器将会运行得更快,拥有更好的未来。
“我不是个未来主义者,更专注当下”
邹欣:在 Python 发展早期,你曾经向 DARPA 写过提案,希望 Python 能成为大众的编程语言。你认为现在 Python 实现了这个目标吗?Python 的下一步发展是什么?
Guido:有意思的是,最近也有人向我提及了当年的提案。实际上 Python 并没有按照当初设想的那样发展。但 Python 今天确实拥有了非常多的用户,并且成为和很多人入门学习编程的语言——这是 Python 最大的成就。
最近我参与了一个采访,与我一同被采访的是个摇滚乐手,同时也是个业余Python 编程爱好者。他写了很多 Python 程序来管理他的摇滚乐队,例如巡回演出的安排、追踪他们歌曲的创作进度,等等。他非常热衷于写这些 Python 脚本,我寻思,这大概能让他从创作音乐中解放出来。他从 14 岁开始就在乐队里弹电吉他,那时他就有个梦想:在 23 岁的让他的乐队与唱片公司签约。他非常有目标驱动力,而且非常有雄心和专注,后来他真的实现了梦想,签约了唱片公司并且发行了热门唱片。他做事非常有计划,给我留下深刻印象。他会设定最后期限,按计划推出下一张专辑,为了创作出十首足够好的歌曲来发行一张唱片,他们常常需要先创作出一百首以上的歌曲来筛选。
邹欣:我曾读过一本 Bill Gates 的传记,他就是个非常有驱动力的人,这个传记书名叫《Hard Drive》,一不小心会和“硬盘”混为一谈。
Guido:这个书名的确开了一个小玩笑。
邹欣:Unix 的创造者之一 Ken Thompson 的故事和你说的乐手不同,他没有雄心勃勃的创业理想或商业目标,而是喜欢通宵在机房写程序、玩电脑,他对于“加入伟大的公司”,也并不热心。贝尔实验室花了一番功夫才说服他加入,最终他在那里和几个小伙伴创造了 Unix、C 这些影响世界的产品。
Guido:相比之下,我在自己 23 岁的时候还不知道自己将来要干什么,我只是关心当下什么事情最让我开心,那时编程就是。我不是个未来主义者,更专注当下,我对 Python 未来的发展也没有雄心勃勃的设想。
这个夏天,我的一大爱好就是沿着海岸徒步,或者骑山地车到处转悠。我也会花很多时间阅读,比如美国经典小说《杀死一只知更鸟》。我正慢慢看的另一本书是 Marlon James 的《七杀简史》。作者来自牙买加,目前在美国一所文理学院教文学,他写了一些我非常喜欢的奇幻书,而且故事背景设定在非洲。我非常享受这样的生活。
感谢 Python 中文社区/大妈对本次采访的鼎力支持。
——专题介绍——
《新程序员.005:开源深度指南&新金融背后的科技力量》特别策划了“开源深度指南”和“新金融背后的科技力量”两大专题。邀请当今开源世界的先锋人物,Python之父Guido van Rossum,MySQL之父Michael "Monty" Widenius,Apache之父、OpenSSF开源安全基金会总经理Brian Behlendorf,自由软件之父Richard Stallman,MongoDB CTO Mark Porter、凝思董事长宫敏、Linux内核守护者吴峰光等,更有国内外开源基金会、知名企业代表,从开源安全合规、企业内部开源、开源技术创新、开源行业落地等多方面,为开源背后的开发者、企业、开源组织及开源社区提供更清晰的开源生态建设与升级版开源发展全景式图鉴。
而在金融专题中,来自中国工商银行、邮政储蓄、中信银行、广发银行、中国人民银行、平安科技、微众银行、蚂蚁集团等十数家传统金融机构和头部金融科技公司的技术专家为我们带来了关于各类新一代颠覆性技术的深入讨论和案例分析。深入解答开发者应该如何更好融入金融产业,以及金融科技的人才培养之道,真正做好金融科技的技术创新和数字化转型