选择 C++ 还是 Java 语言?
首先,明确一点,C++ 和 Java 都是非常优秀的主流编程语言,编程语言和技术没有绝对的优劣之分,只不过在不同的场景下,有更优的选择。而且,像很多大神说的一样,语言只是工具,编程思想才是核心。不过,选择好的工具也是至关重要的,“好的抓手才能带来更大的赋能”。
很多大学是科班的同学应该都是先接触的 C++ 再学的 Java,那么我们到底把哪个语言作为主语言呢?
鱼皮自己是选择了 Java,但是下面我会客观地分析一下这两个语言的特点和现状,给大家一些参考。
语言对比
语言特性
Java 作为一门高级程序设计语言,拥有非常多的优秀特性,比如面向对象、简单性、分布性、解释性、健壮性、可移植性、高性能、多线程、安全性、动态性。当然,C++ 作为较底层的编程语言,也有众多优秀的特性,比如高性能、灵活等,但是在很多方面,Java 和 C++ 存在一定区别,使得 Java 更适合作为开发企业项目的首选语言。
- 简单性:Java 语言在继承了众多 C++ 语言的优点的同时,移除了 C++ 中学习成本高、易出错的指针、多重继承等概念,并且通过接口机制减少了类间关系的复杂度,学习成本更低。此外,Java 的语法结构和 API 也相对更简单、更丰富,使用更方便、开发效率更高。
- 可移植性:跨平台可以说是 Java 最大的优点,Java 通过虚拟机执行,并不依赖固定的平台,使用 Java 开发的应用程序可以运行到任何操作系统,这对于企业中复杂多变的需求和架构场景尤为重要,一定程度上降低了开发和维护成本。
- 健壮性:Java 语言的设计使得用它来编写高可靠软件变得相当容易,很多银行的电子交易系统、知名公司的大型电商系统、秒杀系统都是使用 Java 语言开发的。
- 安全性:这里不是说使用 Java 就能比 C++ 更安全,而是因为 Java 自带的一些机制(比如垃圾回收)以及限制,使得很多由于程序设计不合理导致的问题能够被规避。
虽然因为 C++ 更偏底层(Java 都是 C++ 实现的),使得其性能通常是比 Java 高的,但在大多数公司的业务开发中,这些性能的提升对应用来说是微不足道的。
C++ 更适合开发一些计算类的程序(比如音视频处理 / 图像处理 / 游戏引擎)、高性能的后台程序(比如网络开发框架 / 轮子)、操作系统相关的程序等。
我是在跟着学校学习了一段时间的 C++ 后,才主动自学了 Java。刚开始学习 Java 时,就被它更简单的语法深深吸引了。不需要自己去管理内存在应用开发中实在太爽太方便了,能够大大提升开发效率!
语言生态
由于 Java 具有的优秀特性、易上手、学习成本低等原因,使得 Java 的发展非常迅速,尤其是 Spring 等知名开发框架的崛起,进一步降低了企业应用的开发成本。
C++ 虽然也有类似 Spring 之类的上层框架,但因为相对没有那么 “上层”,所以没有 Java 那么适合业务开发。
在国内,越来越多开发者选择 Java,也因此涌现了很多 Java 技术交流社区,很多的问题都可以通过百度和社区询问来解决。而阿里巴巴作为国内超一流互联网公司,也选择了 Java 作为主要的后端领域编程语言,进一步推动了 Java 在国内的发展。
有同学可能会说:“腾讯不是把 C++ 作为主语言么?”
的确是这样没错,但毕竟腾讯是一家存活了 20 多年的公司了,很多 C++ 的代码其实都是老旧代码,对整个 C++ 社区生态的贡献也没那么大。
应用场景
Java 语言的优秀特性和繁荣生态,使得其非常适合企业级 Web 项目开发,在大数据分析处理、微服务、云计算、移动开发等领域也都处于领先地位。此外,Java 语言和 C++ 语言一样,也是可以应用到图像处理、桌面应用开发、分布式系统开发、嵌入式等近乎所有场景的。
市场需求
综合以上的种种因素,导致在国内 Java 软件工程师的需求量非常大,就业机会多。
这和近年来中国在移动互联网这块发展迅猛有很大的关系。如今创业成本降低,越来越多的创业公司和中小型企业加入市场,因此对于网站、安卓 APP 等应用开发的需求变大。而 Java 作为国内企业开发的首选语言,自然更受欢迎,优秀的 Java 工程师的薪水也是非常诱人的!因此,我们要思考如何成为优质的 Java 开发者,而不是只会 CRUD(增删改查)的工具人。
我曾经也想过做一名 C++ 程序员,但是后来查阅了网上的一些招聘数据,发现如今互联网公司在后台开发方面招的 Java 程序员明显更多一些。虽然大公司也会招 C++ 程序员,但整体来看,Java 会有更多的就业机会。这一点,相信大家按照平时看到的培训机构课程数和广告数就能看出来了。
学习成本
Java 的学习难度相对于 C++,以及其他的编程语言来说,算是很低的了。虽然 C++ 更底层、性能也很高,但是正因如此,涉及的系统层面的知识以及需要学习的概念也会更多,比如指针、内存管理、进程管理等,尤其是指针,对新手而言简直是噩梦!而学习 Java 时,你不需要自主管理内存,降低了很多出现 bug 的概率,即使没有对操作系统有深入的了解,也能写出比较健壮的程序。
当然,这并不意味着你不需要学习操作系统、指针等底层知识,但如果时间有限,当你能够熟练开发 Java 应用后,再来补课也为时未晚。
由于 Java 语言自身的优秀特性,再加上巨大的市场需求,使得学习 Java 的同学也非常多,促使越来越多的培训机构盯上了这块大蛋糕,像黑马、尚硅谷等等。因此,现在网上的 Java 教程非常非常多,关键还有超级多免费的优质学习资源。随便去 B 站一搜,就能找到一大堆。
我的 Java 就是利用网上的资源完全自学的。先跟着网上的视频教程或文档,看一节敲一节,上手是比较轻松的。然后通过看《Java 核心技术卷 I》打实基础,再学习 SSM、SpringBoot 等框架来开发企业级项目,学习过程中多跟着视频敲代码、发挥想象做一些自己想做的项目,帮助我顺利找到了实习。再学习 SpringCloud 微服务框架以及 Redis、Zookeeper 等中间件,学会设计技术架构,用技术解决实际问题。在找工作前,再深入学习多线程高并发编程以及 JVM 底层原理,最终帮助我拿到了大厂 offer。
如何选择?
如果你对操作系统底层、图像处理、音视频处理、游戏等方向感兴趣,可以选择 C++;否则就无脑选择 Java。
不过对于身在校园、且时间充裕的同学来说,我更建议 “我全都要”。可以先学 C 语言或 C++ 打基础(这也是大部分计算机专业学生在高校内学到的第一门编程语言),因为它相对底层,能帮助你接触到更多计算机的概念,比如操作系统资源管理、网络通讯等,从而为学习其他的编程语言做铺垫。然后再学习 Java 来做项目、找工作。
此外,因为 Java 和 C++ 都可以作为后端开发语言,所以无论把哪门语言作为主语言,都要重点学好后台开发通用知识,比如数据库、缓存、消息队列、Socket 通讯、Linux、Git、计算机基础知识等。但选择 C++ 的同学要对操作系统、计算机网络和 Linux 更熟悉一些。
