谷歌大量使用Python技术

191

谷歌大量使用Python,这只是一种口味还是给他们带来了竞争优势?


23
需要将此设置为社区维基。 - AutomatedTester
72
Alex Martelli即将为已接受的答案提供进一步解释。 - ChristopheD
5
我认为这个问题可以客观地回答(谷歌一定有解释为什么使用它的声明;) - Felix Kling
15
@nomemory,"heavy" 在这里是一个相当正确的形容词(当然,您需要能够查看我们的代码库以确认使用了多少 Python、Java、C++ 等语言 - 但是,我确实可以查看并贡献代码,主要是 Python,几乎每天都在做)。这个问题不是关于整个 IT 行业 - 它具体指的是 Google 这个有 20,000 名员工(包括非程序员)的公司,在那里,我们中的一些人最好“有一个全面的视野”,因为形成这个视野并付诸行动是我们工作的核心部分。因此,我投票重新打开它。 - Alex Martelli
7
@nomemory,在Python会议上,总有热心的Oracle招聘人员,所以如果他们的代码库中没有Python(如果是这样,这些招聘人员就在撒谎,浪费自己和Python爱好者的时间;-),我会感到惊讶。而且,无论如何,Oracle和Google究竟是如何竞争的呢?-) - Alex Martelli
显示剩余3条评论
4个回答

303

我无法给出明确的答案,因为在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,因为这两种语言在抽象级别方面涉及相似的领域)。


@Alex 可能我理解不正确,但似乎 Google 想要为工程师(尤其是研究人员)开放他们的环境,他们在大学里花了几年时间只学了 C 或 C++(因为每个人都从这些语言开始,大多数人最终也以它们结束)。在这里,Python 是一个强有力的竞争者,提供了一个接口到大量的 C/C++ 库。 - Ramiz Uddin
8
时间旅行 FTW:http://web.archive.org/web/20091222094118/http://labs.google.com/papers/sawzall.html - Jess Telford
非常棒的见解!可以帮助有意向加入谷歌的人们。 - kmario23
3
我从阅读Levy的优秀著作《In the 'Plex》中收集到的一个小知识是,Python如何进入Google(在其被命名为Google之前,它被称为“backrub”)。 Larry Page曾经用当时崭新的Java 1.0 beta编写了一个网络爬虫“spider”,但由于太过糟糕,他的宿舍室友帮助他将其改用更加稳定、可靠和高效的语言...Python。有趣的是,如果没有那个“spider”,Google可能永远不会存在... - Alex Martelli

35

我没有完整阅读这篇文章,也不知道它的代表性如何,但或许这可以回答你的问题: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搜索质量主管


那么这是品味问题还是竞争优势的问题? - Andrei Ciobanu
4
也许两者都有?这符合工程流程的要求,如果能更早地完成产品,可能会使他们具有优势。 - Felix Kling
2
谷歌这样的大公司,使用Python的工程师不在少数,这并不能构成一个有说服力的案例。 - Jason Baker

28
我正在阅读有关Unladen-Swallow的内容,这是一个旨在提高CPython性能的项目。在浏览他们的讨论板时,我偶然发现了此讨论,其中Collin Winter(Google员工和Python核心开发人员)回答了谷歌员工被劝阻在新项目中使用Python说法

嗯,当在Google的规模下运行时,简单的常识会限制Python的适用性:它不如Java或C++快,线程很差,内存使用率更高等等。我们在设计任何新系统时面临的一个设计约束是:“当负载增加10倍或100倍时会发生什么?如果整个星球都认为您的新服务很棒,会发生什么?”任何使满足该约束变得更加困难的技术——我认为Python属于这个类别——应该受到抑制,除非在其他方面有非常强的理由支持它。您必须平衡Python的优点和缺点:您的工程师可能会更有效地使用Python,但如果他们需要解决更多的平台级性能/扩展限制问题,随着体积的增加,您是否会获得更大的收益?等等。


20
如果您认同Paul Graham的观点,即简洁等于强大(即,如果我可以用语言X写10行代码完成您用语言Y写100行代码的工作,那么我的语言更强大),那么您就会订阅这个观点。
现在硬件很便宜,软件很昂贵。 我知道我可以在Python中编写更多、更快、更好、更清晰的代码,因为电池通常都包含在内。当然,它可能会慢一些,但是您真的会注意到0.05秒和0.0005秒之间的差异吗?
在一个更实际的例子中,如果Google开发人员在Python中编写程序,他们永远不必担心垃圾回收,而公司X在C++中编写程序,他们花费了10%的时间跟踪与内存分配相关的错误,猜猜谁做得更快——即使C++商店设法以同样快的速度编写其余的代码。
所以,是的,我认为在Python中编码是一种竞争优势。

2
该死的网站重新设计了!好吧,他有一个备用链接,所以你可以去那里。 - Wayne Werner
12
“你真的能感受到0.5秒和0.005秒之间的区别吗?” 你不在谷歌核心搜索、YouTube或Gmail工作,对吧? - jwg
6
如果您需要像Google一样多的硬件,那么成本并不便宜。 - NGRhodes
6
Python的优点在于,当你发现有明显的性能差异(例如~495毫秒)时,可以插入一些C/C++代码。Python允许你快速开发并且高效地进行优化。 - Trevor
3
0.5秒和0.005秒的区别在于前者是可以察觉的,而后者则不行。 - Charlie Schliesser
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接