相信很多学编程的同学都在纠结这个问题:学 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 来做后端呢?主要有几个原因:
-
大厂项目体量大,用 Go 单机并发更大,能降低成本,并且适应未来的云原生架构,便于业务变动时扩缩节点。
-
大厂能人和优秀团队很多,有研究的条件、时间和资源。
-
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 语言,持续在实践中学习就好了。
总之,立即行动起来,才是最重要的 。加油!