谷歌大量使用Python,这只是一种口味还是给他们带来了竞争优势?
谷歌大量使用Python,这只是一种口味还是给他们带来了竞争优势?
我无法给出明确的答案,因为在2004年我面试谷歌时,Python已经在谷歌中占据了重要地位。
事实上,有一个看起来很有吸引力的解释,但我可以肯定地否认:谷歌之所以使用Python,并不是因为它雇用了如此多著名的Python开发者,相反,大多数“著名的Python开发者”加入谷歌,至少部分原因是因为我们知道Python在谷歌中的重要性(可能有例外的人包括Peter Norvig和Jeremy Hylton,但历史上谷歌选择Python甚至早于他们)。
这就是我最初感兴趣的原因(我的出版商让我知道谷歌购买了大量我的书 - 起初,我认为这是一个销售自由咨询服务的好机会...;-) ,后来我成功说服Guido加入我们,而且我相信,这也是像Greg Stein、Wesley Chun、Fredrik Lundh、Thomas Wouters、Collin Winters、Jeffrey Yasskin等Python开发者的动力所在。
我认为这一切的起源,是因为最早的谷歌员工(Sergey、Larry、Craig等)做出了一个很好的工程决策:“尽可能使用Python,必须使用C++” - 他们使用(C++的子集)来处理那些对内存具有极低延迟和/或紧密控制要求的软件堆栈部分,而使用Python则可更快速地交付和维护程序的其他部分。当时,即90年代晚期,这样的选择基本上只在Perl 和Python之间进行:其他脚本语言要么不成熟(例如,我认为Ruby还没有出现),要么存在其他问题和限制。Perl更成熟(特别是在CPAN可用的附加组件生态系统方面),但Python被认为更易读、易于维护,并且通过SWIG与C++库的接口更容易。
Java后来出现,涵盖了中间领域 - 最近当然还开发了Go(虽然我认为它还没有进行太多的生产工作,因为它仍在不断演化和成熟)。一些专门的语言,如Sawzall也在混合中用于非常特定的任务,当然JavaScript对于浏览器端的工作非常重要。
其他语言,包括Greg在'06年提到的那些,要么是“有点偶然”,要么用于其他特定任务(例如,Objective C用于iPhone或Mac上的客户端)- 例如,当Google雇用其第一批系统管理员时,这些员工不可避免地掌握了Perl和Bash,经常使用其中任何一种语言开发一些复杂的内部系统; 将它们重新编码为Python(以便于部署和易于维护)通常会发生。 其他语言(如C#)可能由于收购而暂时使用,但是,再次将其重新编码为“主要的Google语言”之一始终是相当高的优先级(在C#的情况下,重新编码通常大多数情况下会使用Java,因为这两种语言在抽象级别方面涉及相似的领域)。
我没有完整阅读这篇文章,也不知道它的代表性如何,但或许这可以回答你的问题:Google内的Python应用。
好的,我已经阅读了大部分内容,不幸的是它并没有提供太多深入见解,但我认为这仍然是一篇有趣的文章。也许最重要的是:
在Google公司,Python是三种“官方语言”之一,其他两种是C++和Java。“官方”在此处的含义是Googlers被允许将这些语言部署到生产服务中。(在Google内部,人们使用包括PHP、C#、Ruby和Perl在内的许多技术)。Python非常适合Google的工程流程。在Google,典型项目由一个小团队(3个人)完成,周期较短(3个月)。
还有一点不能忘记的是,Python的创建者Guido van Rossum在2005年至2012年期间曾在Google工作;)
我还发现了这段话,但无法证实:
“Python自一开始就是Google的重要组成部分,在系统不断发展壮大的同时仍然如此。今天,许多Google工程师都在使用Python,我们正在寻找更多具备这种语言技能的人。”
-- Peter Norvig,Google搜索质量主管
嗯,当在Google的规模下运行时,简单的常识会限制Python的适用性:它不如Java或C++快,线程很差,内存使用率更高等等。我们在设计任何新系统时面临的一个设计约束是:“当负载增加10倍或100倍时会发生什么?如果整个星球都认为您的新服务很棒,会发生什么?”任何使满足该约束变得更加困难的技术——我认为Python属于这个类别——应该受到抑制,除非在其他方面有非常强的理由支持它。您必须平衡Python的优点和缺点:您的工程师可能会更有效地使用Python,但如果他们需要解决更多的平台级性能/扩展限制问题,随着体积的增加,您是否会获得更大的收益?等等。