GO、Java、C/C++、Python,这些编程语言谁才是王者?

算法逐光
• 阅读 976

最近我加入了一个使用Go语言的项目组。由于此前对Go语言的了解还停留在理论认识的阶段,没有大型项目的经验,加入这个项目组让我算是真正体验了一把Go语言,职业技能树也更加丰富了起来。

Go语言的很多语言特性让人耳目一新,而最让我感到震撼的莫过于Go语言服务开发流程的简单便捷,通过Go Build出来的二进制文件,发布到服务器后,直接就可以运行。

相比C/C++语言出来的二进制文件来说,无需管理一大堆依赖、处理各种动态库、静态库等等的问题,且C/C++语言的开发流程,如果是和性能平台相关的程序,光是开发环境、编译环境就能够折腾个人几天,相比之下,Go语言的开发流程让人感觉舒服。

当然了,我也不是无脑鼓吹Go语言,在Go语言的使用过程中也有一些不解和疑惑,为此也专门横向地对比了一下自己熟悉的语言:Java、C/C++、Python,主要是后台的语言。

开发环境

就开发环境而言,Go语言是最让人省心的;当然Java也很省心,只需要在本地和生产环境分别安装了JDK,其他基本和Go类似了,Java由于JVM中间层可以随处运行,Go的二进制可能需要根据二进制平台重新编译,但是现在主流的平台基本都已经统一了Linux版本,所以Go语言二进制我目前是没有遇到需要分别编译的情况。

C/C++、Python的开发环境就有点一言难尽了,先说Python,虽然Python使用简单,但是长久依赖历史版本2.x和3.x相互不兼容以及各种依赖包的问题,也是让很多开发者感到困扰,虽然有pyenv等环境治理的工具,为混乱的环境治理隔离出一片宁静之地。但是,只能说没有对比就没有伤害。

再说C/C++,由于是和平台强相关的语言,所以就链接库、路径、符号表等等,都和底层操作系统的关联更加密切一些,对开发者的要求也相对更高,但即使是优秀的开发者,也时常得被C/C++搞得焦头烂额,特别是涉及对别人的依赖的时候,由于编译时的平台、依赖等等,部分函数的符号信息不一致、菱形依赖等问题是最难搞定的,大型的C/C++项目需要强大的专业的团队进行环境治理。

运行性能

性能这个老生常谈了,其实就现在的开发而言,服务对性能的要求已经没有前辈们的那个时代那么高了,此前看过小时候玩的那些马里奥、魂斗罗等的游戏的实现,看他们是如何把图片素材、逻辑压缩到128k、64k的卡带内存里面,真的是精益求精。

今天就服务而言,即使对于大流量的服务,往往在追求极致性能和成本之间,更多的会选择扩服务、加机器来支撑起相关容量的服务;当然,不是说性能不重要,而是说在今天,性能的问题已经可以从更高的维度或者说从更多的维度解决了。

就具体语言的性能,没有对C/C++、Go语言的进行过压测,但从原理上来说,两者相差应该不大,而对于Java、Python,两者都有虚拟机,但是Python是解释型语言,Java虽然是由中间层,但是也有JIT技术的加持,性能也是更上一个台阶,但Java的GC问题和Stop The World的机制,也使得一些服务不会选择Java。

横向对比来说,各种语言就开发环境、运行性能而言,都有他们的特点,也各有长处、各有短板。这也使得这些语言在不同场景下,会有不同的使用频率。

Java、Python、Go、C/C++这几门语言,主要的应用都在后端开发这里,虽然后端开发是一个比较明确的方向,但也依然可以有很多细分的领域,不同领域常使用的语言也依然有很大的差别。

对于不同的岗位,写之前专门看了慕课网的首页,慕课网首页做了非常详细的划分,这个分类对当前行业的划分也是非常准确的。

GO、Java、C/C++、Python,这些编程语言谁才是王者?

上面提到的Java、Python、Go、C/C++这几门语言,主要的应用也都在后端开发这里,虽然后端开发是一个比较明确的方向,但是在后端开发里,也依然可以有很多细分的领域,不同领域常使用的语言也依然有很大的差别。

Web后台

最常见的,也是大学时期常做的后端开发的工作,大部分都是Web开发,也即是面向数据库增删改查,编写接口的业务逻辑,向上承接前端(Web、安卓、iOS、H5等)的请求,完成数据组装并返回,兼顾性能的考虑,加入缓存层、分库分表等设计。

在Web后台,Java、Python都是常使用的语言,其中尤以Java见长,这与Java的生态相关,Java以及Web生态的Spring Boot、MyBatis等,已经成为中小企业Web开发必不可少的技术栈,在企业招聘岗位当中,对Java这一类的技术要求也是最多的。

其次是Python,虽然Python有丰富的Web框架支持:Flask、Tornado、Django等等,但做小网站还行,用Python做大型项目的不多,早年Python Web技术的经典案件——知乎,因为性能,一些核心的服务,也已经改成Go。Python的Web多见于一些访问量不大的网站,比如一些运营平台、活动平台等。

微服务

微服务是近几年火起来的概念,随着云技术的不断成熟,现在都提倡把大服务拆成微服务,通过服务注册、服务发现来完成调用链关系,兼顾云的动态伸缩来实现无状态服务的扩容缩容,也已经是比较成熟的技术了。

在微服务里面,Java也是用得比较多的,Spring Cloud已经为微服务环境提供了非常多的功能齐全的工具,上手便捷,开箱即用;但由于JVM进程本身的消耗,在一些使用微服务架构里面的关键模块,为了减少资源的使用和调度的成本,依然会使用C/C++来实现,通过通用协议对外提供服务。

微服务在这里提及,和Web后台这些不完全是并列的关系,微服务是架构,本身是不含逻辑的,Web后台也可以通过微服务架构来实现,因而在这需要强调下,这里主要是针对微服务生态提到Java Spring Cloud,Java提供了比较完备的微服务生态。

中间件

中间件是一个比较大的概念,在这里把与业务无关的服务统一视为中间件服务,常见的比如消息中间件。

中间件的开发工作在大厂也都被认为是后台开发;对于中间件,Java也是最常见的语言,Go语言也比较常见;其实中间件的存在主要依托于生态环境,一个开发的生态环境只有足够的复杂,也才需要中间件的存在,所以这也解释了为什么Java、Go才是最常见的语言。

存储服务

存储服务,如数据库、文件系统、kv存储等,主要是使用C/C++。

因为存储服务和操作系统、硬件设备是强相关的,所以这项工作也只有C/C++容易胜任;在存储服务的实现过程,大量的系统调用、系统参数调优,在实际开发的时候还需要看相关的内核源码,所以天然C/C++是最适合的;当然了,也有使用Go语言的也有一些,这主要是在开发效率和性能之间做的取舍。

云基础设施

云基础设施到今天基本是Go的天下了,依托kubernetes,今天非常多的云基础设施使用的都是Go语言,在资源调度、资源隔离等方面,Go都有非常成熟的使用。要说资源调度,本来Go语言就没多少年,现在的云基础设施为什么会成为Go的天下?

在早年Google Big Table论文大行其道的时代,Hadoop、Yarn是进行大数据平台资源管理调度的核心,不过那个时候也只有大数据平台平台需要这么多的资源,那时候的容器都是交给yarn托管的;后来docker技术出现、成熟,再到容器编排、kubernetes,Go语言也成功夺位,成为云基础设施里面最常使用的语言。所以,今天我们看到的腾讯云、阿里云这么丰富封装对外的产品,在它们的背后,都一定有Go语言与其相关的服务在支撑着。

工具平台

工具平台多指测试、运维等的平台,在实际场景中也有着非常核心的作用,对于这种工具平台,不要求很高的性能,但是一般会有很多临时性的需求,整体的规划也更模糊一些,对于这种场景,Python这种短平快的语言就很排得上用场,所以Python多见于这些工具平台的实现里面。

最后,关于编程语言,除了语言本身的生态,团队的技术栈也是影响你选择语言的重要原因,在有选择的情况下,还是需要根据大的生态做出更好的选择,对的语言做对的事情,事半功倍。

作者:咚咚呛

简介:

全栈工程师,目前就职于BAT的大数据部门,超过4年的技术研发经验,熟悉java、python研发,担任过多个系统研发主程,目前专注于分布式系统研发,在高并发、分布式系统有丰富的经验

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
易娃 易娃
4年前
知乎从Python转为Go,是不是代表Go比Python好?
众所周知,知乎早在几年前就将推荐系统从Python转为了Go。于是乎,一部分人就说Go比Python好,Go和Python两大社区的相关开发人员为此也争论过不少,似乎,谁也没完全说服谁。知乎从Python转为Go,是不是代表Go比Python好?我认为,各有优点,谁也取代不了谁,会长期共存!“由Python语言转向Go语言
Alex65 Alex65
4年前
为什么要从php 加入到 go 的潮流
为何我要说加入go开发是一种潮流,尤其是对于php开发人员,我加入了很多go的开发群或者爱好群,发现大部分人都是从php过来的,原本google开发golang是想让更多的c/c人员来使用。PHP语言作为当今最热门的网站程序开发语言,它也是我多年来一直使用的语言,它具有成本低、速度快、可移植性好、内置丰富的函数库等优点,因此被越来越多的企业应用于网站
Nick16 Nick16
4年前
Go语言开发的利与弊
Go语言有多火爆?国外如Google、AWS、Cloudflare、CoreOS等,国内如七牛、阿里等都已经开始大规模使用Go语言开发其云计算相关产品。在Go语言的使用过程中,需要注意哪些Yes和But?最近,我们使用Go语言编写了一个API,Go语言是一种开源编程语言,2009年由Google推出。在使用Go进行开
Stella981 Stella981
3年前
Go语言开发Windows应用
当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场。Go不是脚本语言,但却有着脚本语言的轻便简单的特性。相较于php和python之类以服务器控制台为主要战场的脚本语言来说,Go语言是真正的圆了“动态语言的应用开发梦”。WindowsApiWindows桌面应用依
Wesley13 Wesley13
3年前
CTO:不会Go,迟早得Go!
近几年,关于Go与Java还有c的对比和讨论愈演愈烈,但不可否认的是,在十年多的时间里,Go语言发展势头强劲,凭借其简洁、高效的特性,在竞争激烈的编程语言市场中占据了一席之地。Google、腾讯、阿里等大公司纷纷选择使用Go语言来开发服务应用项目。Go的应用范围一直在扩大,微服务,区块链和云计算,哪里都有用Go写的重量
Wesley13 Wesley13
3年前
Go语言规范(介绍)
Google发布Go语言已经有一段时间了,但是还少有在论坛看到关于Go的讨论,几个Go语言的BBS也冷冷清清的,国内程序员对Go语言似乎还持观望态度。在看了它的一点特性和一段时间的试用之后,我感受到了Go语言给我带来的乐趣,个人觉得Go语言以后将会有很好的发展前景,我已经是等不及了,我要好好学习一下这门语言,当然还有对里面的大牛们产生的崇拜!^\
Wesley13 Wesley13
3年前
Go接口
Go接口的定义Go语言不是一种 _“传统”_ 的面向对象编程语言:它里面没有类和继承的概念。但是Go语言里有非常灵活的 接口(Interfacesarenamedcollectionsofmethodsignatures) 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明 对象的
算法逐光
算法逐光
Lv1
在乎的够深的东西,别人碰一下都觉得是抢。
文章
3
粉丝
0
获赞
0