Alex Martelli
,意大利计算机工程师,《Python in a Nutshell》第一、二版作者,《Python Cookbook》前两版与 《Python in a Nutshell》第三版的合著者,Python 软件基金会(PSF)成员。
因在 Python 社区的卓越贡献,2002 年与 2006 年分别获得 Activators 精选奖与 Frank Willison 纪念奖。
2005 年起,他开始在谷歌工作,现任谷歌高级工程师、谷歌云平台社区支持团队技术主管。
Alex 是 Stack Overflow 积极贡献者,还常在各种技术大会上发表演说。
访谈主题:
Python 图书,Python 2.7 与 Python 3.x,谷歌与 Python。
Mike Driscoll:
能简单介绍一下您的背景吗?
Alex Martelli:
我是意大利人,在国内学的是电子工程专业。
毕业后,我想从事集成电路设计,虽然设计其它系统也很酷,但我还是钟情于集成电路。
那时,真正有意思的电路设计都是美国公司在做,所以,我的第一份工作在美国,也就是大家耳熟能详的德州仪器
(TI)
。
德州仪器名气很大,不管是消费产品还是前沿芯片,他们都在做,但我并不适应这家公司。
德州仪器的风格是一下子启动很多项目,然后毫无征兆的就废弃这些项目,结果,我就在各个废弃的项目团队间跳来跳去。
Alex Martelli:
‘我就在各个废弃的项目团队间跳来跳去。
’
我也不能指责德州仪器这种做法。
他们不想干扰工程师的生活,而我当时只是个小年轻儿,还是移民,反正在哪里都一样。
不到一年,我就在达拉斯、奥斯汀、休斯顿与拉伯克的四个实验室工作过,还不到一年!
这么折腾给人的压力很大。
之前觉得德州仪器的工作更有意思,我拒绝了 IBM 给的 Offer,后来,我只好又回过头去找 IBM。
IBM 也开发过不少颇具创意的集成电路,只是不广为人知,他们关注的主要是科研,不是为了量产,仅仅是为了验证概念。
IBM 在这个领域也有很多走在时代前沿的技术。
我记得 IBM 获得过一次诺贝尔奖,他们用单个原子拼写出 IBM 三个字母。
比起观测原子,用电子显微镜摆放原子绝对是别出心裁,就像科幻小说似的。
IBM 当时要在意大利,具体说是罗马,设立一家研究院,他们希望有人能毛遂自荐,不用想,我肯定自告奋勇。
这个机会不错,还能回国,那里有更好喝的卡布奇诺,还有更美味的面食!
就这样,80 年代我又回到了意大利,从此我的事业开始起步了。
Driscoll:
您是怎么成为程序员的?
Martelli:
那是在 IBM 时的事儿,我们当年刚开发了一台图像处理原型机,这在当时可是很了不起的成就。
这台原型机配备了专属芯片、帧缓冲器和显示器,现在看起来这算不了什么,但当时可是价值不菲。
Alex Martelli:
‘我们当年刚开发了一台图像处理原型机,这在当时可是很了不起的成就。
’
我们还为这台原型机举办了启动仪式,有位主管走过来和我说,“恭喜你们,只可惜这台原型机今后要在角落里吃土了。
” 我很惊讶,“怎么会在角落里吃土?
IBM 研究院有各个领域的科学家,天文学家、地质学家,都能用上这台机器啊。
”
“你说的没错,” 他说,“但这台机器不支持他们用的编程语言啊,这些科学家用的是 Fortran 和 APL。
想让这台机器派上用场,要有人写个通道程序
(Channel Program)
,地质学家和天文学家才不会干这事儿。
” 这可是一个庞大的软件项目,要开发所有科学家所需的界面与支持库。
我说,“能不能让我们组建一个小团队开发这个软件呢?
” 他反问我,“你觉得多少人合适?
”
我当时真的希望“自己设计”的机器能有用武之地,而不是放在那里落土,于是,我大着胆子低声说道,“3 个人?
”
他笑了起来,“没问题,我负责找人,你负责组建团队,不过半年后得做出点成绩来。
”
我就这样稀里糊涂地当上了 IBM 小主管,成了一名低层管理者,准确的说是技术带头人。
但这并不意味着标准降低了,我需要自学大量的软件技能才能编写通道程序,要整合各个支持库,还要找出为那些外围设备加速的支持库算法。
Driscoll:
那您成功了吗?
Martelli:
半年后,我们只搞出了一套凑合能用的概念模型,好在领导同意我们接着干。
最后,这个项目搞了两年,不过总算为 APL 与 Fortran 开发出了所需的支持库,这已经很难能可贵了。
Alex Martelli:
‘我们总算为 APL 与 Fortran 开发出了所需的支持库,这已经很难能可贵了。
’
这个软件项目让我们精心打造的硬件系统派上了用场,科学家与程序员可以用它实现图像处理与可视化,无需居间软件,也不用学习汇编语言或通道程序。
不过,两年完全没有接触硬件设计,这是个大问题,我甚至没有跟进硬件设计的趋势。
那个年代,硬件设计,特别是集成电路,每年都有革命性的发展。
不能在这一行占据前沿位置,很快就跟不上潮流了。
Driscoll:
这就是您为什么会转向软件?
Martelli:
是啊,我有多年经验,就算那些刚毕业的大学生,哪怕他们精通最新的高科技工具,我也比他们强。
但另一方面,哪怕最简单的管理工作与软件开发,也可以为我真正想干的事业添加很多附加值,比如,这些为集成电路设计的软件系统。
走了几年下坡路以后,我不得不承认自己设计不了像样的现代硬件系统了。
长期以来,我干得软件开发与管理工作越来越多。
其实,很多人与我的际遇类似,都是从硬件起步,然后,逐渐发现硬件本身不能真正解决问题。
Alex Martelli:
‘很多人与我的际遇类似,都是从硬件起步,然后,逐渐发现硬件本身不能真正解决问题。
’
我女儿现在就是这样。
她是电信工程专业,也就是高级无线电系统专业的博士,虽然痴迷于硬件,但她现在的工作四分之三都是软件。
这是因为所有的网络,越往底层走,越是软件驱动。
打个比方,假如设计一个天线,没有软件与数据的支持,其自身无法运作。
如今的设备都会配备让人眼花缭乱的天线阵列,并有足够的智能支持,基于信号质量,判断什么时候激活哪个天线。
这与我毕业时的无线电技术不可同日而语,需要大量软件支持。
Driscoll:
您为什么会学 Python 呢?
Martelli:
这段经历其实挺有意思。
很多年前,刚踏入迷人的软件世界时,我曾用业余时间开发过一个研究定约桥牌打法的实验系统。
定约桥牌是 Harold Vanderbilt 在 1920 年代发明的。
我学打定约桥牌的时候,有关这个游戏的数学理论很少。
只有一名数学大师,Émile Borel,写过一本关于桥牌的数学理论图书。
那时,计算机的运算能力已经很强,也很便宜,就算拿来分析这些娱乐活动也不算可望而不可及。
我就是在当时新卖的个人电脑上重构了 1930 年代首次提出的一种试验性思路。
Alex Martelli:
‘我重构了 1930 年代首次提出的一种试验性思路。
’
我是按照传统的硬件思路搞软件,从编程系统的组织方式上看,这个解决方案就是一团糟,用的语言数不胜数,Modula-3、Perl、Visual Basic、Scheme,等等,等等,我自己都觉得害怕,但不管怎么说,这一堆七拼八凑的东西能跑得起来。
Driscoll:
这个程序能赢牌吗?
Martelli:
这个程序每手玩了一百万次,并记录了所有结果,证明了 1920 年代与 1930 年代最聪明的桥牌大师,Ely Culbertson,令人不可思议的直觉。
我把分析结果写成了研究报告,提交给了《桥牌世界》,这是当时最有名的桥牌杂志。
杂志编辑看了以后非常感兴趣,还与我一起改进这篇报告。
这篇研究成果最终发表在《桥牌世界》 2000 年 1 月刊与 2 月刊上。
之后,我与不少桥牌选手互通有无,甚至有桥牌冠军问我,“你能用这些理论帮我解决问题吗?
”
我很高兴能帮上他们的忙,只是这个程序太脆弱了,哪怕改个标点符号,也会莫名其妙地崩溃。
纯属一团糟!
所以我决定,不管是不是个坑,我都要重写一遍。
目标就是尽可能用一种编程语言重构这个程序,但问题是用哪种语言!
Driscoll:
那您找到了想要的语言吗?
Martelli:
能实现我要求的语言只有 Lisp,其实我更偏向 Scheme,这可能和我的硬件背景有关。
可惜它的免费版没有足够的支持库,不能实现完成所需的辅助任务。
再怎么说这也只是个人项目,我已经耗费了不少时间,不想再在这上面花钱了。
有个同事向我推荐,“你可以试试新出的那个编程语言,现在特火,叫 Python。
”
Alex Martelli:
‘有个同事向我推荐,“你可以试试新出的那个编程语言,现在特火,叫 Python。
”’
我说,“别别别,我都学了一打编程语言了,我可不想再学了!
” 但他非要坚持,而我又很尊重这位兄弟,最终还是我挡不住他的狂轰乱炸,决定给这个编程语言一次机会。
我给自己定了个小目标,用它解决个小问题,看看它到底好在哪里。
Alex Martelli:
‘我说,“别别别,我都学了一打编程语言了,我可不想再学了!
”’
1990 年代后期,我还不懂网络,这还是个新鲜事物,看上去蛮有趣的,我就琢磨着自己搭建个网站。
网站编程与 Python 我都是自学的,你猜我花了多长时间?
才一个周末!
我说过,不论做什么事情,都得下点功夫。
我周五晚上开始边看手册边试着写代码,没过多久,我就不看用看手册了,我连猜带蒙,再根据其它代码的写法推断下一步该怎么写,我居然有 90% 都蒙对了。
这门语言貌似和我的脑回路很搭,就好像我怎么想的,它就是怎么做的。
Alex Martelli:
‘这门语言貌似和我的脑回路很搭,就好像我怎么想的,它就是怎么做的。
’
周六下午刚过,我就学完了。
我做出了一个能初步运转的 CGI,还有一个 Web 应用,可以用它计算定约桥牌中同花色分牌的条件概率。
周末还剩一天,接下来,我该干点什么?
我就想,“这个程序不错,但只支持意大利语,其它语种的人可能对它也有兴趣。
我应该做个支持英语、法语的多语版本,反正,这两种语言我也很擅长。
”
做多语版本需要模板系统,但我没找到满意的 Python 模板系统。
我试过 Gofer 等工具,但都不合我意。
最后,我干脆自己写了一个模板系统,叫“Yet Another Python Template Utility (YAPTU)”,即,“另一个 Python 模板工具”。
周日,这个工具就可以顺利运行了。
然后,我把它打包上传到一个发布自由软件的地方,这样我就有了自己的网站。
Driscoll:
有人对您的作品感兴趣吗?
Martelli:
YAPTU 当时确实吸引了一个人注意,他正为加州大学伯克利分校开发计算机科学专业网站。
他觉得 YAPTU 是最好用的模板工具,并打算用 Python 开发网站,他还对 YAPTU 做了一些优化,并给我发了补丁文件。
我们一起讨论怎么能把 YAPTU 做得更好,后来还成了朋友。
Alex Martelli:
‘我们一起讨论怎么能把 YAPTU 做得更好,后来还成了朋友。
他就是 Peter Norvig,现在是谷歌研究主管。
’
他就是 Peter Norvig,现在是谷歌研究主管,也是畅销编程书《人工智能:
一种现代手段》的作者。
由此可见,Python 从那时起就帮我搭建了非常好的人脉。
人工智能:一种现代手段
我还尝试在工作中推广 Python,可惜没有成功。
决策权在专业管理人员手里,他们认为就算我们现在用的程序都是面向 Unix 工作站的,但未来属于 Windows,其它操作系统都将不复存在。
的确,如今已经很难买到 Unix 工作站了。
到处都是使用 Linux 或 Windows 的 PC。
从这点上看,他们的预判非常正确。
我不愿意只使用微软乐意支持的编程语言,但高层管理人员也不会同意用其它编程语言。
我只能在他们注意不到的地方偷偷用 Python,比如测试框架,一个叫做 haha.bat 的 Shell 脚本文件。
这是 Windows 推出 cmd 之前的事情了。
Python 脚本非常有用,且易于维护,只有一点让人不太满意。
上班时,我只能用微软的 Fortran 编译器处理漏洞,然后挤出可怜的时间使用 Python。
Driscoll:
咱们稍微换个话题,您是怎么成为 Python 图书作者的呢?
Martelli:
我非常喜欢 Python,Guido van Rossum、 Python 开发者及社区里的每一位伙伴,他们给了我如此美妙的礼物,我希望有所回报。
我能做什么呢?
当时有个叫 comp.lang.python 的 Usenet 小组,很多人都在这里问问题。
我比较擅长帮别人解决技术问题,虽然,我只是 Python 新手,但仍开始尝试回答别人的问题。
只要看到自认能有效解决的问题,我就会回答,很快就有了不错的成绩!
Alex Martelli:
‘我比较擅长帮别人解决技术问题。
’
几个月后,Python 社区的一位高人给我起了个外号,马爹利机器人(Martelli Bot)。
众所周知,我是 Python 社区里第三个“机器人”,只有回答了超级多的问题,而且基本上都正确,才会被人称为机器人。
给我起外号的这位大神就是 Steve Holden,我很荣幸告诉大家,他是我的新书《Python in a Nutshell》第三版的合著者。
总之,这让我在 Python 社区里声名鹊起,也给了我联系 O'Reilly 出版社的勇气,我看到他们在为《Python in a Nutshell》这本书找作者,于是我问他们,“能不能让我尝试一下,或者找个经验更丰富的人一起写?
”
他们说,“你还要找人合作?
发个样章和大纲给我们吧。
” 我就这样成了 Python 图书作者。
Alex Martelli:
‘我问他们,“能不能让我尝试一下,或者找个经验更丰富的人一起写?
”’
Driscoll:
您为什么会写《Python Cookbook》?
Martelli:
合著《Python Cookbook》一书时,我走了一点弯路,之前计划中的一位作者放弃了。
这本书很有意思,所有的解决方案都来自社区,只是为了切实有效地解决问题,才进行了改写。
我还在 ActiveState 网站上贡献了很多解决方案,并且乐此不疲!
ActiveState 有点类似现在的 Stack Overflow。
Stack Overflow 对特定主题技术的问题与答案处理的非常到位。
我也这个网站的活跃用户:
Python 标签下的发帖排行榜上,我排名第二,我还是首页荣誉榜的前 0.001%。
多说一句,Stack Overflow 的首席数据科学家发表过一个研究报告,介绍编程语言的流行度,该报告称,随着时间推移,基于 Stack Overflow 上的标签与问题,流行度增长最快的编程语言就是 Python。
Alex Martelli:
‘这项研究表明,2019 年初,Python 将会成为最流行的编程语言。
’
这项研究表明,2019 年初,Python 将会成为最流行的编程语言。
现在,Python 仅次于 Java 与 JavaScript,但是它已经超过了其它所有编程语言。
Perl 消失了,Ruby 也消失了,C# 排名下滑极快。
只有 Java 与JavaScript 还算坚挺,但是它们的变化幅度不大,只有 Python 突飞猛进。
Alex Martelli:
‘只有 Java 与JavaScript 还算坚挺,但是它们的变化幅度不大,只有 Python 突飞猛进。
’
Python 的基数已经非常大了,但仍能实现跨年增长 27%。
年初
(2017年)
,我看过《Spectrum》杂志一篇文章,宣称 Python 是今年最流行的编程语言。
该文章基于一些主观指标,比如岗位需求、课程、与研讨会等,而 Stack Overflow 的调研则是量化的、客观的,它的结论来自于超出想象的巨量数据。
虽然,两者都得出了同样的结论,不过 Stack Overflow 得出结论的量化手段更好、更精准。
Driscoll:
能介绍下作为 Python 图书作者有什么收获吗?
Martelli:
首先,你可能会觉得自己对一门语言了解的已经非常透彻了,但写书以后就会发现,这一认知十有八九是错误的。
运气好的话,可能会有一位有耐心、意志坚定的编辑与你一起合作,他的职责是了解这门语言,搞明白图书应该怎样排版印刷、读者如何从书中获取知识。
英语是我的第三语言,我从来没觉得自己的英语水平有多高。
但写作增进了我对英语,特别是书面英语的理解。
Alex Martelli:
‘这就是我们为什么要用编程语言:
因为自然语言有歧义,虽然强大,但却难懂。
’
自然语言是一种强大、内容丰富、却难于理解的沟通工具,这就是我们为什么要用编程语言:
因为自然语言有歧义,虽然强大,但却难懂。
想用自然语言极其精准地描述事物是不可能的。
Driscoll:
您能举个例子吗?
Martelli:
我曾在邮件列表看到过一个小故事,讲的是自动化与计算系统的风险。
这是一个用于在市区调度救护车而设计的形式化定义系统
(Formally-Defined System)
,显然,这是一项性命攸关的任务。
用自然语言最初写就的内容,也是其中一个限制条件是,不论何时,急救热线接到中风等急症电话后,救护车应该在 15 分钟之内
(即,这些病症的最佳急救时间之内)
赶到病发现场。
将这一自然语言正确转化为编程语言后,大部分情况都有所改进,但却出现了已经安排了救护车,可是救护车一直没有到达病发现场的个案,这种情况虽然很少,但实在是让人忧心。
这就是自然语言未能与形式逻辑
(Formal Logic)
相匹配的问题。
Alex Martelli:
‘这就是自然语言未能与形式逻辑(Formal Logic)相匹配的问题。
’
要知道,这是市区,交通堵塞。
救护车虽然可以鸣笛开路,但仍会被堵在路上。
如果出现延误,哪怕是 15 分多 0.01 秒,系统也会推断救护车已经到达,这是因为之前假设的前提是救护车总会在 15 分钟内到达。
所以如果假定救护车已经抵达了,系统就无需让该车继续前往,进而重新调度该救护车。
自然语言里,我们说必须在 15 分钟以内,并不是说一定在 15 分钟内,而是最好在 15 分钟内。
要表达的意思是,在此时间内到达至关重要,需要尽一切努力实现,确保救护车在此时限内到达。
但这并不意味着,如果 15 分钟没有到,就不需要救护车了,也不代表 15 分钟多 1 秒已经没用了。
虽然,这个结果不理想,但总比没有强!
Alex Martelli:
‘在编程语言里,断言(assertion)更简单:
说一就是一。
’
这只是自然语言引起歧义的一个小例子。在编程语言里,断言
(assertion)
更简单:说一就是一。如果说一不是一,就会触发异常。自然语言则不同,很多时候你会免不了想当然,这包括各种常识,还有同一词语在不同文化背景中的不同涵义。
Driscoll:
能介绍下您与读者的互动中最有意思的事情吗?
Martelli:
这种例子很多!
我可以介绍一些工作中遇到的乐子,总有同事问我,“我碰到一个特别奇怪的问题……” 这通常是他们刚写的程序或函数。
我会帮他们找出问题,并进行修复。
不是说我对 Python 的了解比他们更深,而是我擅长 找茬儿。
比如说,给我一篇有错别字的文章,不知道为什么,在阅读任何内容之前,我一眼就能看出错别字。
这对编程与电路设计而言,非常有好处。
以前,老有人问我,“我一直想问,你是写那本书的 Alex Martelli 吗?
” 我总是很高兴地回答,“是啊,就是我,那本书是我顺手写的。
” 这让我一天都很开心。
Alex Martelli:
‘除了搞定问题,我也有虚荣心。
’
现在,这种事没以前那么多了,我在这个公司已经待了 12 年半了。
我的意思是,虽然这种事儿没什么实际意义,但是,嘿嘿!
除了帮别人搞定问题,我也有虚荣心。
Driscoll:
您觉得 Python 2.7 已经要被淘汰了吗?
Martelli:
《Python in a Nutshell》第三版里提出过这个问题。
书里曾经说过 Python 2.7 离被淘汰还远着呢,我现在仍然认为这是对的。
现在,生产环境中仍有大量的 Python 2.7 或 2.x 代码,并且这些 2.x 代码可以轻轻松松地就升级到 Python 2.7。
大家都知道 Python 2.7 就到此为止了,虽然,我笃定有不少企业会提供商业化支持,但到 2020 年, Python 软件基金会将停止对 Python 2.x 的官方支持。
所以,我们的书里对 Python 3、3.5、3.6 及未来新版的支持,就显得格外重要。
Alex Martelli:
‘Python 2.7 离被淘汰还远着呢。
’
现在就抛弃 Python 2.7 还为时过早,所以我们的书里包括了 Python 2.x 与 3.x 的内容。
如果读者只想了解其中一版的话,可能会觉得该书有些冗余,不过,我们会在下一版解决这个问题,到时某些内容将只支持 Python 3,不再支持 Python 2.7。
Python 2.7 的代码库非常庞大,仍有很多公司与产品还会滞留在 Python 2.7。
比如, YouTube 总的来说就是一个用 Python 开发的系统,有几百万行超级优化过的 2.7 版代码,说实在的,从商业角度上看,这种切换太难了。
要知道 YouTube 已经对这些代码优化 10 多年了,不可能上来就说,来吧,咱们重写下这几百万行代码。
如果切换到 Python 3 会把 YouTube 的速度减少 10%,这不仅要量化谷歌的成本,还要量化所有用户的成本,YouTube 的流量太大了,要考量性能降低对互联网带宽的占用会增加多少。
哪怕性能只降低 10%,都会让所有人的感受变得很糟。
这是不能容忍的!
这条路走不通,只能选择其他方向。
Driscoll:
那么 Python 作为一门编程语言,您觉得它现在有什么问题吗?
Martelli:
如果我能穿越回 Python 第一版发布之前,且只能对它做一项更改的话,我觉得是不要区别大小写。
Alex Martelli:
‘最优秀的编程语言都不区分大小写。
对我来说,这是最好的地方。
’
自从 C 语言在编程语言领域称霸以来,大家都觉得不区分大小写很怪。
但是,不管是 Fortran,还是 Pascal,甚至是 Ada,这些最优秀的编程语言都不区分大小写。
对我来说,这是最好的地方。
可能很多人都没有注意到,西方文化中,大小写的概念其实不是自然出现的,而是刻意人为的,这点可能很多人都意识不到。
大小写是在写作发展过程中出现的,这是我们文化里刻意制造出来的人造物。
我喜欢 Macintosh 的文件系统,比如新建一个名为大写 F-O-O
(FOO)
的文件,它会按大写文件名存储文件。
但是,如果你用小写 foo 进行搜索,系统也会找到。
这种感觉与人类思维更相似。
Alex Martelli:
‘语音输入一下子就成了主流输入方式。
’
比如说语音识别系统。
语音输入一下子就成了主流输入方式,这是因为对着手机说话,比用屏幕上的小键盘打字要容易的多。
但用语音输入的时候,区分大小写让人很头疼,这就是我为什么说大小写是刻意的人造物!
自然拼读根本就不需要区分大小写。
Python 社区里希望 Python 不要区分大小写的人很少,与 Python 竞争的编程语言也都区分大小写,我估计这是当今所有流行语言共有的缺陷。
Python 的关键字也有些问题,这是 Python 与其它编程语言不同的地方,如果与其它语言一样的话,Python 将会是一门更好的编程语言。
Python 最常用的关键词,即定义函数的 def。
问题是 def 既不是关键词,也不是单词,它没有任何涵义!
你知道哪种编程语言做的最到位吗?
JavaScript。
Driscoll:
JavaScript 有何不同?
Martelli:
JavaScript 里用的关键词是 function。
我想不明白为什么 Python 不用 function。
就算 function 要多输入 4 个字符,就算这得多敲好几下键盘!
但现在的编辑器不都支持自动补全了吗,是不是?
我明白,从技术上讲,def foo 与 function foo 没什么实际区别,但我更关注这些小小不言,却影响易用、易懂的小瑕疵。
Alex Martelli:
‘Python 可能是迄今为止,最好用、最好理解的编程语言。
’
我认为 Python 可能是迄今为止,最好用、最好理解的编程语言,所以这些小瑕疵在我看来就显得特别刺眼。
Python 的 range 只有一种,而且总是不包括上界,所以它的一致性更强,也更清晰。
其实这里用任意单词都是一样的,比如 def,就可以在设计时使用像 function 这样更易懂的单词。
如果觉得 function 这个词太长了,我觉得 fun 也不错,这个词多有意思。
不管怎么说,Python 这个名字毕竟是源于 Monty Python 这个喜剧片。
用 fun 作为 function 的缩写也可以表明 Python 编程很有趣
(这里的原文是 fun)
。
反正我觉得比 def 好。
Driscoll:
那您觉得 Python 最大的优势是什么?
Martelli:
在讲瑕疵的时候,我其实已经提到了。
Python 的优势在于清晰、一致性,这门语言的野心很大,就是,只用一种自然的、显性的方式做事情。
目前,Python 还未达成这一目标,举例来说,加法符合交换律,a+b 与 b+a 是表示汇总的两种方式, Python 无法改变这点。
但在阅读别人写的代码时,你依然会觉得更容易理解。
不管是 Python 老手,还是新人,都会不约而同地选择显性编程,因为 Python 往往是显性的。
就算不这么做,也可以告诉他们应该怎么写,而且很容易就能说服他们。
也许正是这种只用一种显性方式表达事物的野心,就是 Python 更清晰、更好用、更实用的原因吧。
Alex Martelli:
‘也许正是这种只用一种显性方式表达事物的野心,就是 Python 更清晰、更好用、更实用的原因吧。
’
我相信,Python 之所以能在你能想到的各个领域都得到充分应用,正是因为它的这种清晰与简洁的理念,Python 太容易上手了。
不是所
有人都像我学 Python 学得那么快。
我不认为是个经验丰富的程序员就能用一个周末就学会 Python,但这种事确实发生了。
就算 Python 里很多功能与其它编程语言类似,比如 Rust,我不敢想象有人能用一个周末就学会 Rust。
Driscoll:
您认为 Python 未来会如何发展?
Martelli:
无处不在!
你知道吗?
近年来最伟大的科研成果是发现了引力波。
PyCon 意大利上曾有一两个主题演讲,讲的是,Python 是控制所有采集数据设备的通用语言,最终这些数据显示两个黑洞相互撞击,并发出了引力波。
Alex Martelli:
‘正是 Python 在处理这些数据。
’
如果我没记错的话,碰撞后几秒钟所发出的引力波产生的能量,比宇宙中其它物质发出的能量加在一起都多。
这可是超大规模的数据量,而正是 Python 在处理这些数据。
这意味着, Python 负责监控这个强大到匪夷所思、眨眼之间发生的瞬时事件,对它的所有测量数据进行清洗、分析,找出其相关性,并对之进行解释,这本身就已经超级了不起了。
这次冲撞发生在几十亿年前,现在监测到的只是当时的引力波而已。
而这只是 Python 无处不在的一个例子。
科学,正是因此而令人着迷。
我和互联网巨头聊得越多,越发现这些公司使用其它编程语言开发其核心应用,只不过是因为它们的创始人只懂那些语言,但是因为并购了其它公司,它们不得不接纳 Python。
很多并购都出现在高科技领域。
大多数这些公司用的都是 Python,这正是它们成功的原因。
他们的效率是用其它语言的公司的两倍,甚至三倍。
Driscoll:
这么说,您认为更多公司开始使用 Python?
Martelli:
是的,很多大公司需要采用 Python 是因为必须接入它们并购公司的生产系统。
TensorFlow 的兴起,让我觉得 Python 必然会走在机器学习与人工智能领域的前沿。
即便 TensorFlow 的内核是用高度优化的 C++ 与汇编语言开发的,但其商业逻辑应用层用的是 Python,因为没必要耗费心力重新开发,所以 TensorFlow 的核心是 Python。
Alex Martelli:
‘TensorFlow 的兴起,让我觉得 Python 必然会走在机器学习与人工智能领域的前沿。
’
我很难想像还有哪些领域 Python 可能会永远都无法涉足。
不过,接下来探讨的这个领域是个例外:
嵌入式系统。
Python 对优化内存占用做的不够好。
嵌入式系统则要对内存精打细算。
然而,就算Python 自身解决不了,Python 的方言也能解决这个问题。
具体来说,解决物联网嵌入式设备的编程语言是一种名为 MicroPython 的 Python 方言。
我听说 BBC 给在校生配备了约上百万台运行 MicroPython 的设备。
Driscoll:
MicroPython 是 Python 吗?
Martelli:
不完全是 Python,因为它必须为内容使用设置限制条件。
不要指望在价值两美元的设备上动态分配内存,这些设备的内存最多也就是 64K,就算多,也多不了哪儿去。
但在有限条件下仍可以实现动态分配,进行编程。
过去,Python 的一些实施特性阻止了它进入某些应用领域,正是这些特性饱受诟病。
据我所知,Larry Hastings 正在苦苦寻求移除全局解释锁
(GIL)
。
不管大家怎么想,GIL 与 90% 的应用不相关,但对另外 10% 要用更多芯片内核的应用而言,GIL 非常致命。
要把算法从 32 位优化成 64 位,移除 GIL 后效果会非常显著。
不过也不要着急,这些限制条件早晚会被移除的。
Alex Martelli:
‘在操作系统核心领域,Python 将来涉足的内容也不会今天多多少。
’
在操作系统核心领域,Python 将来涉足的内容也不会比今天多多少。
如果动态分配没问题,就可以用 Python,但这只是内核的很小一部分内容。
也许一些设备驱动对时间要求没那么严格,但我觉得,在绝大部分情况下,Python 只是运行在用户层面,而不是内核层面。
Driscoll: