学 Java 还是 Go 语言?这事儿很简单!

相信很多学编程的同学都在纠结这个问题:学 Java 还是 Go 语言?

先给出省流结论,简单粗暴,就 4 个字:选 Java!

好,本期结束!

网上的讨论五花八门,有人说 Java 过时了,Go 才是未来;还有人因为自己或朋友学 Go 找到工作了就觉得 Go 真香,觉得学 Go 竞争更少、机会更多。

但是这些观点往往都比较主观片面,今天鱼皮会用一些 客观 的内容来帮大家选择语言,毕竟 只要做出了正确的决定,你的人生就会变得灿烂起来!

开始前先声明一下:肯定有朋友说,鱼皮你自己做 Java 项目教程、臭卖 Java 课的对吧?你当然劝大家学 Java 了。那有没有可能是因为 Java 确实比别的方向好,我才选择这个方向呢?当然我希望你可以带着这个想法继续看下去,如果下面的内容有不客观的地方,尽管来评论区骂我,毕竟我这期内容肯定会动某些人的蛋糕。当然,如果你觉得这期内容对你有收获,觉得有道理,也希望能点赞收藏三连支持一下~

推荐看本文对应的视频版:https://bilibili.com/video/BV1LXTrzCEi5

语言简介

咱们先简单了解一下这两门语言。

Java 是经典的老牌儿语言,它的特色是跨平台(一次编写,到处运行)。再加上生态好、性能也不低,所以很适合作为 企业项目开发的首选语言 。而且 Java 不仅是安卓开发的主语言,也是大数据开发的首选语言之一。

Go 语言是新兴的语言,语法简洁,天然支持协程,很适用于开发后台、网络通讯框架等高并发应用,所以也是 云计算、云原生、区块链等前沿方向的主流语言

市场需求对比

如果你学编程是为了找工作赚钱,那么 语言的选择很大程度取决于实际市场需求

目前 Java 的岗位需求量远大于 Go ,无论是看招聘网站的岗位数,还是看专业的 TIOBE 编程语言流行度排行,哪怕是看培训机构的广告也知道了,满屏幕的 Java 培训,Go 语言却寥寥无几。

为什么会这样呢?

因为 Java 本身的特性,再加上它出现得比较早,导致现在国内大多数后端都是用 Java 开发的,银行、金融、电商、教育、游戏、传统企业等几乎所有行业都在用。这些系统不会轻易重构,Java 的存量市场巨大

反观 Go 语言,虽然 Docker 容器、K8S、云原生已经流行一段时间了,但国内使用 Go 语言开发的项目还是很少的,主要在新兴技术领域,岗位也主要集中在一二线城市的互联网大厂。虽说字节跳动、B 站等大厂选择 Go 作为主语言,但是大厂的坑位毕竟只有少数,放眼整个市场,用 Go 的公司实在太少了

虽然 Go 性能更高,但绝大多数做业务的公司肯定还是用 Java。为什么?来换位思考一下,你现在就是公司老板,要招开发了。

首先会 Java 的人多,招聘更容易;现成的代码多,开发成本就更低;而且很多业务其实没必要追求那么高的性能,Java 这种成熟的编程语言已经能满足诉求了。

那为什么大厂在追求用 Go 来做后端呢?主要有几个原因:

  1. 大厂项目体量大,用 Go 单机并发更大,能降低成本,并且适应未来的云原生架构,便于业务变动时扩缩节点。

  2. 大厂能人和优秀团队很多,有研究的条件、时间和资源。

  3. Go 发展迅猛,作为大厂,当然要追求国内技术的布道,抢占市场和人才。

但是啊,Java 的岗位需求量远大于 Go 这个趋势,近几年估计不会有什么变动。看到这儿肯定有朋友会说,Java 虽然需求量大,但竞争也激烈啊 !没错,确实是这样,不着急,我们接着往下看。

生态对比

毫无疑问,Java 在国内的生态远远超过 Go ,无论是技术框架、学习资源、项目教程、技术文章、GitHub 开源项目、社区交流、经验分享等等,目前都吊打 Go 语言。

这会导致什么问题呢?你遇到 Bug 的时候,Java 相关的解决方案一搜一大把,但是 Go 语言可能就要费点劲了。而且像 AI 这种新技术,Java 一般也会比 Go 更快地推出开发框架来帮助开发者。

学习难易度

从语法层面上来说,Java 和 Go 要学的内容都是差不多的,都是变量、数据结构、流程控制、异常处理那些所有编程语言都要学的东西。但是由于 Java 生态好,学习资源 极其丰富 ,各种学习路线、各种保姆级教程,遇到问题也很容易找到解决方案,所以相对更适合新手入门,起码你不用为搜资料、搜 Bug 发愁。反之,连培训机构都很少有 Go 语言的班。

当然,也正因为 Java 学习资源多,才导致这几年学 Java 的人数如雨后春笋般涌现,导致竞争比较激烈。不过对于很多学习能力不强的朋友来说,学 Java 起码你能学得动,有机会竞争 ,就像走大马路,虽然人多但是路宽;学 Go 语言可能就像走山路,虽然人少,但是走得慢、而且可能走着走着就迷路了,半途而废。

有些朋友别来跟我说什么 Go 语言也不难呀、我随随便便就学会了,那只能说明你很厉害。我当年也是这么想的,但做了这么多年编程知识分享,我发现真的真的 很多朋友的学习能力是没有那么强的

未来发展趋势

从长远来看,我们其实很难预测到底未来 Go 语言会不会超越 Java、什么时候会超越 Java,毕竟 技术发展往往不是线性的 ,也很难说未来会不会出现一个更牛的编程语言,超越这两者。

但是我们可以结合语言适用的领域来看待它们的发展,比如从区块链的发展看 Go 语言的发展。怎么说呢,区块链这个概念从我大学时(17 年)那会儿就开始炒,炒到现在离普通人还是比较遥远;再加上国内这么多历史包袱(老的 Java 项目),Go 语言几年之内应该很难在 后端开发领域 动摇 Java 的地位。在我的印象中,这几年 Go 语言好像没有什么特别炸裂的消息,反而 Rust、鸿蒙的浪花感觉更大一些。

所以大家还是保持理性,也别被什么 "Go 语言才是未来" 之类的话冲昏了头脑。

我的建议

前面做了一通分析啊,我再来给大家总结一下,5 个不要:

1)如果你是为了快速就业,不要选 Go!

因为 Java 岗位需求量大,就业机会多,学习资源丰富,容易上手,薪资水平稳定,职业发展路径清晰。

2)如果你不是一本计算机专业的学生,不要选 Go!

因为 Go 的岗位主要集中在名企大厂,竞争激烈,无论是学历还是技术的门槛都更高。

3)如果你自学能力不强,或者对自己实力没有绝对自信,不要选 Go!

毕竟 Go 语言资源更少,我是真担心你浪费时间去找教程、去搜 Bug 怎么解决。

4)如果你没有特定的技术方向兴趣,不要选 Go!

除非你对云计算、区块链、分布式等 Go 语言有一席之地的领域特别感兴趣,否则还是建议从 Java 开始。

5)如果你是为了考研或者学习算法,不要选 Go!

国内考研或编程竞赛的算法机试可能不支持 Go 语言,C++ 和 Java 更保险。


当然,如果你成功通过了前面这几层过滤,想挑战一下更高的薪资,当然是可以选择 Go 语言并且冲击大厂的。不过,如果你要做后端开发的话,我有个更好的建议!

后端开发建议

Java 和 Go 目前主流的应用场景都是后端开发,对于后端开发来说,语言只是一个工具和基础 ,除了语言本身和对应的开发框架外,其他要学的后端开发技术都是通用的,比如数据库、缓存、队列、搜索引擎、Linux、分布式、高并发、设计模式、架构设计等等。

除了技术外,业务理解能力、项目开发经验、算法等计算机基础同样是程序员求职涨薪的关键,这些也是独立于编程语言的。所以比起纠结选什么编程语言、反复学习新的编程语言(像螃蟹一样横着走),为什么不先学习资源丰富的 Java 语言,来快速学习提升这些通用技能呢?技术的本质是解决问题,语言只是实现的手段。只要通用技能学得好,转什么语言都是横着走。

而且有一个很现实的求职现状是:Java 和 Go 后端是可以互相面试的 。你 Java 学得好,依然可能通过 Go 语言的面试,因为在实际面试中,编程语言只占很小一部分比例。面试官更关注的是:

  • 你的项目经验

  • 对系统设计的理解

  • 解决问题的能力

  • 对后端通用技术的掌握程度

  • 计算机基础和编程思想

对于简历上的项目来说,面试官关注的重点也 不是说你用了什么编程语言,而是要看你做出来的成果 ,运用哪些技术解决了问题,系统的性能怎么样等等。

不过如果你的项目和面试岗位的编程语言一致,肯定是加分的。想做到这点也很容易,等你学完 Java 和主流后端技术、做了 2 个项目后,如果你能力还不错、又想追求高薪,只需要花几天去学一遍 Go 的语法,再花 1 天利用 AI 把你的项目重构为 Go 语言,就可以去找 Go 语言的工作了,顶多再花点时间刷刷八股文,在 面试鸭 也都给大家整理好了,不是美滋滋?

说了那么多,但最后我还是相信那句话 "兴趣是最好的老师" ,其实初学编程可以不用想那么多,喜欢什么、什么能学下去,那就先试试,学自己感兴趣的语言会更有动力,也更容易坚持下来。像我大一学习 C、C++、Python、Java、JavaScript、PHP 甚至是 C#,虽然走了弯路,但也培养了自己的兴趣、提升了知识广度吧。之后我在自学 Go 时过了一遍基础语法后就直接开工干项目,在实验室用 Go 开发区块链还出版了书籍,后面在字节跳动实习也用过 Go 语言,持续在实践中学习就好了。

总之,立即行动起来,才是最重要的 。加油!

更多编程学习资源

相关推荐
chengchong_cc5 分钟前
海康对接摄像头
java·vue.js
菜鸟小九38 分钟前
Leetcode20 (有效的括号)
java·数据结构·算法
加瓦点灯41 分钟前
什么?工作五年还不了解SafePoint?
后端
悟能不能悟41 分钟前
讲一件Java虚拟线程
java·开发语言·oracle
fictionist1 小时前
动态 Web 开发技术入门篇
java·服务器·开发语言·笔记·学习·mysql·spring
louisgeek1 小时前
Java Date-Time
java
N_NAN_N1 小时前
[蓝桥杯 2024 国 Python B] 设计
java·数据结构·算法·并查集
他日若遂凌云志1 小时前
Lua 模块系统的前世今生:从 module () 到 local _M 的迭代
后端
David爱编程1 小时前
Docker 安全全揭秘:防逃逸、防漏洞、防越权,一篇学会容器防御!
后端·docker·容器
小码编匠2 小时前
WinForm 工业自动化上位机通用框架:注册登录及主界面切换实现
后端·c#·.net