软件开发领域C++曾保持了二十年的统治地位,C++开发几乎应用到了所有领域。
背后的原因就是计算能力的价格昂贵,而人力相对便宜,所以开发商愿意采用运行效率比较高的语言和平台来节省计算能力的成本,为此愿意付出一定的开发、测试和维护成本。
但是摩尔定律几十年如一日地有效,每18个月计算能力的价格就下降一半,20年下来,单位价格的计算能力提升了近万倍。
最近几年我们可以看到,在各个领域,尤其是应用开发领域里,多种语言都有取代C++的趋势,并且这个趋势是不可能逆转的。
最近几年已经很少有新成立的大型项目选择C++作为开发语言了,应用程序开发领域C++基本也退出了,尤其是移动App,自从Symbian和黑莓挂掉之后,就没有移动平台把C++作为第一语言了。
这不是说C++就要完蛋了,也不等于C++程序员没人要了,只是C++的领土面积有些缩水,但是离亡国还早得很。
C++传统上很强势的领域,它依然具有统治地位,主要就是基础设施和超大型软件应用领域。
比如:
数据库,编辑器,编译器,脚本引擎,虚拟机,排版软件,游戏引擎,应用程序框架,计算平台等。
代表性的项目有,MySQL,VisualStudio,LLVM,V8,VMWare,Office/WPS,3DMAX,Qt,WebRTC,Tensorflow等
可以看出来,都不是小项目,源代码都是上百万行,甚至千万行的,并且都有很长的历史,有的多达30+年。
这类项目采用C++一方面是历史惯性,一方面是C++的性能在这些特地领域的确有优势,比如C++和C汇编混合调用的时候几乎没有额外开销,而Java的JNI,Golang的CGO都是有额外成本的。
对于刚进入软件开发领域的年轻人来说C++并不友好,新的工作机会的确在变少,而现有的项目需要的基本功和相关知识积累又非常高,不是初如职场的新人可以快速掌握的,除非你很聪明勤奋,又有很大决心去学习,比如编译器,数据库领域,再聪明勤奋也要学很多年,而且要有丰富经验的业界前辈来指导。在这些领域C++本身不是问题,难的是领域相关知识技能。
选择了C++就要断了速成和赚快钱的念头,要潜心研究慢慢积累,花5-10年去深入某个领域,这需要很大的决心毅力,别太在乎投入产出比。
虽然我写了二十年C++,也用C++写了些大项目,但是我已经在逐步放弃C++了,最近一年里用得最多的是Golang,Python,Objective-c,Java。
因为我的领域是应用开发,是面向广大最终用户的应用,这个领域越来越强调开发效率,对性能到不是那么介意,C++显然很难胜任。
以前的软件开发,版本迭代周期一般是半年到一年,而如今互联网软件的迭代周期通常是周为单位的。比如YY在某一年里发了25个版本,只有春节休息了下,这还不包括十多个小补丁版本。
C++对工程师coding水准要求太高,很容易就搞出野指针,内存泄露,缓冲溢出什么的,所以测试成本,调试成本,崩溃解决成本都比较高,周期也长,耗费了开发者大量精力。
那时候,经常有大量崩溃上报,看minidump又是崩得乱七八糟的callstack,至今心有余悸。
具体到题主的问题,我可以说C++在这三个领域都没啥前景,按照趋势来看这三个领域未来都不算是C++的强势领域了。
服务端的瓶颈已经不是计算性能了,而是传输、IO、伸缩性,并行度等
游戏开发除非是引擎,业务逻辑剧情基本都是写脚本了,而除非是大公司有积累,否则也不会自己撸引擎。
嵌入式依然受摩尔定律支配,随着计算能力越来越便宜,语言也会更倾向于开发效率更高的,而不是运行效率高的。
如果真的对C++有情有独钟,非要写C++不可,那么就去我上面提到的几个C++强势领域吧,基础设施和超大型应用。