python语言发明者 google_谷歌的语言何以战胜Python?50%的人都应该立即学习Golang...

全文共2623字,预计学习时长9分钟

图源:dailybtc

很多软件工程师视Python为最喜爱的语言之一,工作生活都和它死死绑定在一起。但Google, Uber, Dropbox, Soundcloud, Slack, 和Medium的软件工程师并不是这样。长期以来,顶级企业的程序员们一直迷恋于另一种语言。

尽管大部分开发者还在使用Python,但无论是对于API、网页服务,或是数据处理,高级员工都已经增加了对于Golang(Go)的使用,它的表现棒极了!

由先驱建立

Go是由谷歌的一个全明星三人组发明的:

· Rob Pike参与开发了Unix环境,并参与创建了Limbo编程语言。

· 有了Ken Thompson,这个团队就有了Unix和B语言(C语言的前身)的发明人。

· Robert Griesemer是谷歌的V8 JavaScript机器的负责人之一,同时也是谷歌创造的另一门语言——Sawzall的主要开发者。

谷歌最初正是用Python编写的,但是在2007年前后,工程师们正在寻找一种更好的语言来执行谷歌的主要任务。

Rob Pike在2012年的一次篇演讲中提到了他们遇到的问题:

图源:unsplash

· 构建缓慢:生成新代码需要很长时间。

· 依赖路径不可控:你是否曾经试图安装一个软件包,结果却发现你不得不安装至少5个其他的依赖路径和无数的子依赖路径来让它运行?是的,即使是谷歌人也有这个问题。

· 版本偏离:由于到处都是重复的代码,工程师可能只会更新原始代码片段的一个版本,而忘记其他版本。因此,最终得到的版本既包含新代码,也包含旧代码。

· 编写自动工具较困难:编写自动写代码的程序是可能的——事实上,大多数程序在某个阶段都会这样做。但在现代编程语言中,这仍然很难实现。

· 每个程序员都使用语言的不同子集:对于Python,一个开发人员可能使用numpy包,另一个更喜欢scipy包。诸如此类,当程序员想要将他们的代码混合到一个包中时,情况就会变得混乱。

· 程序理解能力差:那些说自己一读代码就懂的人是在撒谎,它不是一个简单的“Hello World”程序。而且代码的文档通常帮不上什么忙——在大多数情况下,它甚至不存在,或者被编得很糟糕。

· 重复操作:你是否曾经从程序的某个部分复制一段代码?这是不好的做法。但大多数编程语言都使其易于实现。

· 更新成本高:在上面描述的这种混乱情况下,更新软件需要花费大量的时间和脑力。

· 跨语言构建:Python适合于中小型脚本,c++适合于复杂的程序,Java适合于web开发,Haskell适合于有惰性但稳健的代码。结果是,一个程序常常包含许多不同语言的代码片段。但是为了编译、调试和保持简洁,用一种语言编写程序要好得多。

图源:unsplash

于是三人组开始设计一种干净、简单、易读的语言。一种可以消除或至少减轻软件工程中这些常见问题的语言。

一门精简的语言

这些常见问题的根源在于现代语言的复杂性。想想Python或C——你有没有试着阅读过整个文档?祝你好运。相比之下,Go最大的特点就是简单。这并不意味着你不能用它来构建复杂的代码。但Go考虑到了,不要有引入复杂性却不能解决问题的特性。

例如,Go不像其他面向对象语言那样有类。作为其他语言中常用功能,类可以使一个对象继承另一个对象的属性。

问题是,如果试图改变一个对象的结构而不改变其他对象的结构,就会破坏代码。Go有一个被称为struct替代方法,其更偏向组合而不是继承。

Go的其他主要特征是:

· 类型安全:在C语言中,使用光标做任何事情——包括使程序崩溃。Go不会让你这样搞砸东西的。

· 正交性:这意味着如果在代码中更改一个对象,其他对象不会因此而更改。与C语言不同的是,比如,如果你改变了一个变量,那么其他的变量也会随之改变。Go是正交的,因为它使事情更简单。

· 最小化:在Go中,只有一种方法来编写代码。而Python有无数种方法来编写一个东西!

· 可读性高:和Python一样,Go会把可读性放在第一位。因此它相比大多数语言来说对新手更友好,也使维护代码更容易。

· 文档化:尤其对于初级开发人员,他们觉得为了使别人可以使用代码而写一些关于代它的简介是很乏味的。使用Godoc,这个过程会比大多数语言更加自动化,开发人员不需要浪费宝贵的时间来记录他们所做的事情。

· 实用性:重要的东西应该易于编写代码,即使这意味着其他事情不可能在Go中完成。逻辑是,你希望通过使重复的任务变得快速和简单来提高开发人员的效率。如果有更复杂的问题他们可以用另一种语言来写。

或许这些听起来毫无创意,从某种意义上说,确实如此,这不是一种带有时髦特征的语言,Go不是一种用来探索和研究的语言。

图源:unsplash

但神奇之处正在于此,当你尝试着去创造一些能运行的东西的时候,当你在一个团队中,有许多不同背景的人在同一个代码上工作的时候,当你厌倦了其他语言带来的混乱的时候,Go能救你于水火。

图源:Golang website.

日益繁荣的社区

由于其简单性,Go是当今存在的最具协作性的语言之一。过去程序员们总是坐在自己的小隔间里,从不与别人见面,这样的时代已经一去不复返了。

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

Go改变了这种局面。尽管比Python晚了20岁,但它拥有一个充满活力的社区。他们将尊重、开放和友好置于行为准则之上,虽然其他语言,如Python或C,也有类似的社区声明,但对这些基本价值观的强调较少。

因此,社区在Go年度调查中扮演着明确的角色也就不足为奇了

有关社区和领导力的问题 | 图源:2019

数据不言自明

根据2019 Go Survey,谷歌的语言主要用于网站开发、网络和系统编程。Python的前景看起来与之非常相似:

Python的使用数据 | 图源:2019 Python

唯一显著的区别是有多少Python用于数据分析和机器学习。在这些领域,其他热门的新语言也正在涌现。

你可以看到许多Python的用法都可能被Go所取代,包括46%的网络开发46%,37%的系统管理和DevOps中,以及19%的网络编程中。即使你认为许多开发人员完成了所有这三种工作,至少一半的Python支持者正在做他们在Go中可以做的事情。

事实上,开发人员已经意识到Go提供的巨大潜力。根据Hackerrank的数据,在2019年,大约有三分之一的程序员想学Go。

接下来的热门语言 | 图源:Hackerrank.

由于Go非常容易学习,我们应该会在未来几年看到从Python到Go的转变。虽然对于大多数公司,尤其是不像Dropbox或Medium那样庞大有钱的公司来说,把所有的代码重写用Go编写将是非常昂贵的。但对于新项目来说,你至少应该尝试一下。

给彼此一个机会,给未来一个可能,何不去试试Go呢?

留言点赞关注

我们一起分享AI学习与发展的干货

编译组:马梦瑶、孙梦琪

如转载,请私信小芯,遵守转载规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础文档_python基本文件操作

python文件操作python的文件操作相对于java复杂的IO流简单了好多,只要关心文件的读和写就行了基本的文件操作要注意的是,当不存在某路径的文件时,w,a模式会自动新建此文件夹,当读模式,文件不存在&#xff0…

python如何计算整数和_python 整数和浮点数

Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。基本的运算:1 2 3 # > 64 * 5 - 6 # > 147.5 / 8 2.1 # > 3.0375使用括号可以提升优先级,这和数学运算完全一致,注意只能使用…

cocoscreator连接MySQL_CocosCreator幼麟麻将搭建步骤

我的客户端和服务器都是在本机Windows8上搭建的,软件环境为:MySQL:5.7Node.js:6.11.0CocosCreator:1.6.2步骤如下:一、服务器环境搭建1、安装MySql数据库(百度)2、登录MySql: mysql –u用户名 –p密码 (登录…

hikaricp mysql_使用 HikariCP 数据源

概述HikariCP是Spring Framework 5.0的默认 数据库连接池,这得益于他的高性能。但是如果配置不当,数据库连接池也可能因影响到系统性能。重要参数maximum-pool-sizeminimum-idlepool-nameauto-commitidle-timeoutmax-lifetimeconnection-timeout初始化过…

return两个返回值_异步函数的两个视角

我们来一起看一下两个程序员之间的故事。以下示例代码是用Scala写的,不过本文所讲的话题并不仅限于Scala,任何有Future/Promise支持的语言都是适用的。下面这个wiki页面罗列了各个有Future/Promise支持的语言,已经涵盖了大多数的常用语言。Fu…

python怎么控制速度_如何控制python的ThreadPoolExecutor的吞吐量速度?

我使用python的concurrent.futuresThreadPoolExecutor启动异步任务。按照this方法,我使用tqdm进度条监视异步调用的进度。在我的代码如下所示:with concurrent.futures.ThreadPoolExecutor(max_workers n_jobs) as executor:future_to_url {executor.s…

mysql57win10安装配置_Win10 OS安装(配置)MySQL 5.7(解压版)

Win10 OS安装(配置)MySQL 5.7(解压版)下载及解压文件名:mysql-5.7.27-win32.zipzip是解压版,msi是安装版,本教程仅说明zip格式的配置方法。解压(假设解压后根路径为D:\ide\mysql-5.7.27-win32)相关截图添加环境系统变量path 增加D:\ide\mysql…

mysql数据库更新数据库语句_MySQL数据库之UPDATE更新语句精解

UPDATE和REPLACE基本类似,但是它们之间有两点不同。1. UPDATE在没有匹配记录时什么都不做,而REPLACE在有重复记录时更新,在没有重复记录时插入。2. UPDATE可以选择性地更新记录的一部分字段。而REPLACE在发现有重复记录时就将这条记录彻底删除…

ubuntu安装python编译器_Ubuntu中安装VIM编辑器

Ubuntu安装好以后,默认是安装使用nano编辑器。不过这对于用惯了vim的人可能会有些不习惯。好在Ubuntu下安装vim还是比较简单的,使用如下命令即可:sudoapt-get install vim(apt-get install vim-full这下就好了 在输入 :syntax on 或者把/etc/…

pep8 python 编码规范_如何用好python编码规范,写一手漂亮的代码

前一段时间在编写python 代码的时候编辑器中一直在提示规范问题,因为强迫症的原因,我决定遵循python 的编码规范去编码,然后把需要注意的点记录下来, 帮助自己和大家一起成长。这是我的main.py文件中的一部分代码,经过…

MySQL故障检测_检测MySQL的表的故障的方法

表的故障检测和修正的一般过程如下:检查出错的表。如果该表检查通过,则完成任务,否则必须修复出错的数据库表。在开始修复之前对表文件进行拷贝,以保证数据的安全。开始修复数据库表。如果修复失败,从数据库的备份或更…

mysql约束_Mysql约束条件

约束条件1约束条件约束是一种限制,通过对表中的数据做出限制,来确保表中数据的完整性,唯一性默认约束CREATE TABLE tb(id INT DEFAULT a ,name VARCHAR(20));插入数据的时候,如果没有明确为字段赋值,则自动赋予默认值在…

mysql导入greenplum_greenPlum中通过gpfdist导入文本数据到数据库表中

1.python版本要求2.4.4以上[roottest install]# pythonPython 2.6.2 (r262:71600, May 14 2009, 10:46:21)[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2Type "help", "copyright", "credits" or "license" for more informatio…

解决方案和项目的关系_项目经理入门知识系列之《项目团队的职责分工》

项目团队的组织结构组织结构项目经理职责整合制定项目计划所需的活动。整合执行项目计划所需的活动。整合进行范围变更所需的活动。1、目经理负责对横跨多个职能线的活动进行协调和整合。整合管理2、项目经理核心技能---沟通能力(因为他的权力太少了)如果一个人有良好的沟通与人…

python小车行驶路线图_基于opencv-Python小车循线学习笔记

基于opencv-Python小车循线学习笔记加入摄像头模块,让小车实现自动循迹行驶思路为:摄像头读取图像,进行二值化,将白色的赛道凸显出来选择下方的一行像素,黑色为0,白色为255找到白色值的中点目标中点与标准中…

python 字符串大小写转换 其它不变_python字符串大小写如何转换

平常开发过程中对字符串的一些操作:#字母大小写转换#首字母转大写#去除字符串中特殊字符(如:_,.,,,;),然后再把去除后的字符串连接起来#去除hello_for_our_world中的_,并且把从第一个_以后的单词首字母大写…

java读取文件夹_Java读取某个文件夹下的所有文件(支持多级文件夹)

packagecom.vocy.water.batch;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.File;public classCopyOfReadFile {publicCopyOfReadFile() {}/*** 读取某个文件夹下的所有文件(支持多级文件夹)*/public static boolean readfile(String filepat…

武汉大学信息管理学院java上机考试_java上机试题

展开全部import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Main extends JFrame implements ActionListener{LabledText upperBase new LabledText("上底:"),62616964757a686964616fe59b9ee7ad9431333337373561lowerBase …

python中cmd全称_【转】Python中执行cmd的三种方式

原文链接:http://blog.csdn.net/menglei8625/article/details/7494094目前我使用到的python中执行cmd的方式有三种:1. 使用os.system("cmd")这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要im…

数据库字段 到类 java bean_将数据库中表的字段自动转换为javaBean实体类

具体代码如下:package param;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Resul…