在2020年9月的编程语言排行榜中,C++排名第四。既然C++的发展不如Java、Python,我们为什么要学习C++?在有Java、Python等优秀编程语言存在的情况下,C++它的魅力与优势是什么,今天我们来了解一下:
我们到底要不要学 C++?当然要,而且必须要。为什么?
C++ 虽然包袱很多,但是有好东西,例如 Rust language reference 提到的几点,值得学习(当然你直接学习 Rust 更好);
C++ 背后的 ABI(包括对象模型、异常的实现等)对于其它语言实现的学习也是大有脾益的;
当然上述两点都不是充分的理由。我认为最充分的理由是——很多时候你逃不掉 C++:
我写 JS 的 —— Chrome V8, 查克拉,WebKit 清一色的 C++,还都是现代 C++;
我写 Swift/Rust ... 的——左转 Clang/LLVM,清一色的 C++ 11;
我写 Unity 的 —— 你猜,Unity 用什么写的?
我写 C#/Java 的——再猜,CoreCLR/主流的 JVM 等用啥写的?
我写 C 的 —— clang C++ 写的,Windows 的 UCRT C++ 写的,GCC 也逐渐加入了 C++;
我搞机器学习/深度学习/... ——TensorFlow & caffe 是啥写的?
我搞 OJ——刘汝佳的书,以及《挑战程序设计竞赛》等,用啥语言完成示例?
……此处省略10万+字
还有一条,学C++虽然难一些,但是正因为这个,C++的薪资也是偏高的,网友都说了要高薪就学C++,因为:
要是技术牛逼的有3-5年工作经验的,一线城市年薪20-30万没有问题。刚毕业,又没什么基础的,一线城市2000-4000不能再多。刚毕业,C++知识扎实,普通二流三流四流本科的,一线城市3000-6000。刚毕业,C++知识扎实,985重点的,一线城市6000-10000都有可能。
做程序员纯粹的脑力活儿,而且你只会C++这个语言,并不一定能代表你的能力。想做程序员,要学的东西很多,从底层的硬件要了解一些,到上层的抽象。还有通信,网络,所以思想是很重要的,而且要一直学习新的东西。语言只是工具,重要的是编程思想。你的编程思想好,哪个语言其实都很行。干程序员这行,如果你是偏向软件开发的,经常加班是肯定的啦。重要的是你喜不喜欢编程,你喜欢这行,就算累点,也是开心的。工资什么的,程序员很在意的就是经验,你写的代码多了,开发的经验有了,时间长了,工资是一个质的飞跃。一般刚入行都不高,3000左右吧,当然有拿的比这个多的,看个人情况了,3年左右大概会上在万元左右,再长些,年薪按几十万算了。
C++到底是何方神圣,有经验的居然能拿到几十万年薪?
这就给你们讲讲这个C++,一般学C++前都要学C,所以通常叫它们C/C++。C/C++历经40年,也被称作“永不过时的开发语言 ”。因为C/C++在国内的应用范围非常广泛,无论是在PC、移动设备、网络、通讯、图像、游戏、硬件驱动、嵌入式等行业,都获得了足够的市场份额。这主要是因为C/C++语言的稳定性及跨平台性。根据2015年3月编程语言排行榜,C++位居第四位,C语言继续稳占第一位,根据2016年以及2017年编程语言排行榜,C/C++依旧位居前十,它继续用事实证明C/C++语言在编程语言中的霸主地位。
C/C++作为应用特别广泛的编程语言之一,其从业人员的需求量也非常大。其中具备2年以上从业经验,能熟练的编写程序并做软件分析和设计的中高级工程师缺口很大,其市场需求度比C/C++初级程序员的需求还要大,尤其是在北京、上海、广州、深圳等城市。据统计,我国软件开发人才在2013年缺口就已经达到35万,现在每年仍以20%的速度在增长。
目前打算从事C/C++领域的人也增加了很多,C/C++初级人才缺口暂缓,然而中高级人才的培训却不是一蹴而就的,目前各大IT企业都在急招和抢招具备多年经验的C/C++工程师,C/C++工程师依然成为香饽饽。
那么,要成为C/C++软件工程师,需要具备什么条件呢?
C/C++工程师是运用C/C++这个开发工具去完成软件的需求分析、程序设计、算法、开发、测 试、维护升级等工作,高级的工程师还需要做系统架构,包括业务需求的分析与沟通,功能模块详细设计,业务功能实现与单元测试,系统维护;参与产品构思和架 构设计,还需要撰写需求文档、技术文档、解决技术难题等。
会编写点C/C++程序的人不少,然而真正满足企业要求的C/C++工程师少之又少。现在企业对软件的要求比较高,不仅要用到比较通俗的技术,更会用到多种新技术,开发的产品也是五花八门,可能要解决各种难题。许多新手编写比较通俗的程序(如考试系统、购物商城、CMS等)比较得心应手,然而碰到一些新东西,新需求,就束手无策。所以只有具有软件工程知识,具备算法思想和开发思想,了解常用的各种技术,具备解决各种技术难题的能力,还需要具备一定的沟通和表达能力,才能成为真正合格的C/C++工程师。