为什么Google等顶级公司的程序员都不用Python,而是用Go?

liftword3个月前 (03-04)技术文章20

普通的程序员仍然非常爱用Python, 但这不包括Google,Uber,Dropbox,Soundcloud,Slack和Medium等国际顶级公司的程序员, 他们很早就开始使用Golang或者Go了。

这并不是说Python不好,而是因为在API,Web服务还是数据处理中,Golang或Go能发挥出更高的性能。

Go语言由Google开拓者创造

Go是由Google的一位全明星三人发明的:Robert Griesemer是Google V8 JavaScript机器背后的负责人之一,也是Google发明的另一种语言Sawzall的主要开发者。Rob Pike与他人共同开发了Unix环境,并共同创造了Limbo编程语言。 在肯·汤普森(Ken Thompson)的带领下,该团队加入了Unix的发明者和B语言的创建者(C的前身)。

Google最初是用Python编写的,但是在2007年左右,工程师们正在寻找一种更好的语言来执行Google的典型任务。 根据罗布·派克(Rob Pike)在2012年的讲话,他们遇到了很多问题:

  • 缓慢的构建:生成新代码要花很长时间。
  • 不受控制的依赖项:你有试过在安装软件包时,发现必须安装至少五个其他依赖项和多个子依赖项才能使其工作?即使是Google的程序员也有这个问题。
  • 每个程序员都使用该语言的不同子集:在Python中,一个开发人员可能会使用numpy包,另一位开发人员则希望使用scipy,依此类推。当程序员希望将其代码混合到一个程序包中时,程序代码会变得一团糟。
  • 程序理解能力差:那些说在看到代码的那一刻就理解代码的人都是在撒谎!因为这些代码不是简单的 “Hello World” 程序。而且代码的文档在大多数情况下,甚至根本不存在或编写不正确。
  • 重复工作:你肯定试过复制过代码,然后粘贴到其他程序中。
  • 更新成本:更新软件将花费大量时间和精力。
  • 版本偏斜:到处都是重复的代码,工程师可能只会更新原始代码片段的一个版本,而忽略其他版本。因此,你最终得到了一个既包含新代码又包含旧代码的版本。
  • 编写自动工具的难度高:可以自动编写代码的程序,大多数程序在某个阶段可以做到这一点。但是对于现代编程语言而言,这很难实现。
  • 跨语言构建:Python非常适合中小型脚本,C ++非常适合精致的程序,Java非常适合Web开发,Haskell非常适合懒惰但功能强大的代码。结果是单个程序通常包含来自许多不同语言的代码片段。但是为了让代码更容易编译、调试和简洁,最好用一种语言编写程序。

于是这三人开始设计一种简洁、易读的语言。一种可以消除或至少缓解软件工程中这些非常常见的问题的语言。

Go是一种精简的语言…

这些常见问题的根源是现代编程语言的复杂性。如果你不知道用Python还是C,那么你需要仔细看了文档之后再作决定。

相比之下,Go的最大特点是它的简单性。 这并不意味着你无法使用它来构建复杂的代码。 但是Go会非常刻意地避免在没有带来复杂功能的情况下,而带来太多问题。

例如,Go没有像其他面向对象的语言那样的类。 类是其他语言经常使用的功能,可以很好地使一个对象继承另一个对象的属性。 问题是,如果你在不更改其他对象的结构的情况下,而去更改其中某个对象的结构,那么,代码就会被破坏。Go有一个叫做struct的替代方法,它更倾向于使用组合而不是继承。

Go的其他主要功能包括:

  • 类型安全性:在C语言中,你可以使用指针执行几乎所有操作,包括让程序崩溃。
  • 可读性:和Python一样,Go将可读性放在首位。与大多数语言相比,它对初学者更加友好,并且使代码更易于维护。
  • 注释文档:特别是初级开发人员,为了让其他人可以更方便地看懂代码,那我们就要为代码进行注释,这是一件很繁琐的事情。与Godoc相比,使用Godoc可以使该过程更加自动化,开发人员不需要浪费宝贵的时间来把自己的工作记录下来。
  • 正交性:这意味着,如果你在代码中更改了一个对象,就不需要更改其他对象。换一个说法,例如收音机是正交的,如果我们更换电台,音量是不会改变。在C语言中,如果我们更改了一些代码,那么其他地方与该段代码有联系的,也要进行更改。 Go是正交的,它能让编程变得更简单。
  • 最小化:在Go语言中,只有一种方法来编写一段代码。相比之下,Python拥有无数种编写一件事的方法!
  • 实用性:任何编程语言的目的应该都是方便写代码。需要这意味着Go不能做其他事情。我们都想通过快速简便地执行重复任务来提高开发人员的生产效率。如果存在更加复杂的问题,我们也可以用另一种语言编写。

这些功能听起来可能很无聊,也没有什么创意。但是,从某种意义上说,这是正确的,Go不是一种有着可以用来打动别人的语言,不是解决很多问题的方法,也不是没有限制的自由。 Go并不是一种可以用来探索和研究的语言。

但是当你试图建立一个有用的东西的时候,会让你大吃一惊。当你与不同技术背景的团队一起工作时,使用居然是相同的代码。

Go有一个欣欣向荣的社区

Go语言因其简单性而成为当今最具协作性的语言之一。程序员们过去常常坐在自己的小隔间里,从不与他人见面的时代已经过去。

现在,我们有了StackExchange来解决所有的编码问题。我们有Slack、Zoom、谷歌Meet等功能,可以与我们的团队保持联系。但现代语言仍然是为小隔间里的书呆子量身定做的。

Go改变这些现状,尽管比Python年轻20岁,但它有一个充满活力的社区。

Go社区把尊重、开放和友好放在行为准则之上。虽然其他语言,如Python或C,也有类似的社区语句,但对这些基本值的强调较少。

因此,社区在Go年度调查中扮演了明确的角色也就不足为奇了,这与许多其他语言不同。

数据说明一切

根据2019年Go调查,Google的语言最常用于Web开发,网络和系统编程。 这与Python的情况看起来非常相似:

唯一的显著差异是Python用于数据分析和机器学习更多。 在这些领域中,其他热门新程序语言也在涌现。

除此之外,Go还可以代替许多Python用法, 其中包括Web开发中的46%,系统管理和DevOps中的37%,以及网络编程中的19%。 即使你假设许多开发人员完成了这三项工作,你也可以大胆地假设有一半的Python程序员正在Go中完成自己的工作。

实际上,很多开发人员已经意识到Go提供的巨大潜力。 根据Hackerrank的说法,大约有三分之一的程序员希望在2019年学习Go。

这种趋势是真实存在的,而且由于Go更加易于学习,在接下来的几年中,我们会看到很多人从Python到Go的转变。 对于大多数公司来说,可能不会把所有代码重写为Go,这样会很浪费金钱,但是在新项目中进行尝试,会是更好的选择。

在大公司里,已经有开发人员借助Go取得成功。你会选择学习Go语言吗?

--END--

喜欢本文的同学,记得转发+收藏哦~

也欢迎大家关注我们的公众号:为AI呐喊(weainahan),学习更多AI知识!

相关文章

Python和Go都很火,我要怎么选?

选自Medium作者:SoftKraft机器之心编译参与:魔王「人生苦短,我用 Python」是当下非常流行的一句口头禅。但你有没有想过,Python 就那么好吗?在某些方面,其他语言真的不香吗?本文...

Python和Go,谁才是编程语言的“王者”?

技术迭代的速度越来越快,这一点在编程语言的更新变化中尤为明显。前不久,Python开发商Anaconda发布了PyScript,让Python应用可以在浏览器中运行。而在近日,开发者采用相同的思路让G...

为何我们用 Go 而非 Python 来部署机器学习模型?

Python 是当下最流行的机器学习语言,对这一点大家应该没有什么异议。不过很多机器学习框架进行实际计算使用的是 CUDA C/C++ 等语言,只是它们都提供了 Python 接口。因此,大多数机器学...

我们为什么用 Go 编写机器学习架构,却不用 Python?

“如果你有兴趣成为一名机器学习工程师,那么必须熟练掌握Python——但是,如果你对机器学习的基础架构感兴趣,则应该认真考虑Go。”作者 | Caleb Kaiser译者 | 弯月,责编 | 郭芮以下...

《2020年开发者技能报告》发布:IT圈最想学Go和Python

【环球网科技报道 记者 林迪】日前,记者从编码社区HackerRank官网了解到,其公布的《2020年开发者技能报告》(以下简称为“报告”)显示,JavaScript是最知名的编程语言,其次分别是Ja...