找回密码
 立即注册
查看: 671|回复: 20

对于C++ 开发者来说,服务器端开发,游戏开发, 嵌入式软件开发,哪个方向更有前景?

[复制链接]
发表于 2021-9-4 14:44 | 显示全部楼层 |阅读模式
C++应届小白一枚,决心选C++作为主武器,但是目前各大公司招C++岗比较少,目前看到的都是服务器端开发,游戏开发, 嵌入式软件开发这三个方向,请教各位大佬,哪个方向前景更好?
发表于 2021-9-4 14:48 | 显示全部楼层
在软件开发领域 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++强势领域吧,基础设施和超大型应用。
发表于 2021-9-4 14:57 | 显示全部楼层
这么久以后再来看这个问题,补充一下哈,其实游戏开发(基于UE4的c++方向)也是很有前途的哈,喜欢c++并且喜欢游戏的可以学习UE4。
--------------------------------------
我目前在鹅厂从事的是服务器的领域,用的是c++。后台开发都比较低调内向,很少有人来回答类似的问题。我也不能在这里说某某游戏在线人数多少、用了多少台配置多高的服务器。但是因为选用c++,我们的服务器成本做到了最低,同时因为用户量巨大,很多场合c++几乎是唯一的选择。
其实,有不少周边的服务,请求量并不高的,随便用什么语言开发都可以,只是团队中大部分人都熟悉c++,为了避免切换的成本,对于周边服务一般也会选择c++。但是从公司制度上来说,从来没人限制我们必须用啥语言,公司内部用go、java来做服务器的都有。
曾经在一次开发论坛上听过一个演讲,演讲者是某游戏引擎的开发人员,当时印象最深刻的就是他说了这样的一句话:脚本的耗电量是c++的30倍。现在手机越来越高级,可以玩越来越复杂酷炫的游戏,但是电池本身的瓶颈一直未有大突破,导致玩几下就没电了。这个时候,c++的优势就体现出来了。
某现象级手游客户端本身是用unity开发的,后来发现提高性能的解决办法是将其中部分功能改成c++。根据我和前端同学的交流,他们也认为很多性能问题优化到最后还是需要C++,所以不如从一开始直接上C++。以后我们这边的前端会逐渐从unity切换到UE4,因为UE4的开发语言就是C++。前端同学的技术栈更新得很快,我见过技术就有flash、cocos、HTML5、unity,曾经很多前台同学跟我表示很羡慕后台开发C++万年不变,现在终于也能用上C++了。
关于耗电量,其实不仅仅是移动端,服务器其实也有一样的问题。几年前看过一个视频(这里有介绍和链接:Why C++ ? 王者归来 | | 酷 壳 - CoolShell)。现在几年过去了,随着云计算越来越流行,以后有越来越多的机房和服务器,电费占了不少的成本。我觉得云计算给c++带来了不少机会。
作为一个喜欢c++的人,对于“使用c++的人是否越来越少”这个问题不是很关心。第一,我只是特别喜欢c++而已,并不是不会别的;第二,c++的市场永远存在,作为一个使用者,只要保持自己学习的节奏,混口饭吃不难。就像现在在鹅厂的后台开发,看不到c++被取代的迹象。
其实,BAT都有用c++的。因为c++的人才培养时间极长,所以成本很高,一般的公司会慎选。在我们这里,新人进来都有导师,导师在一段时间内会看新人写的每一行代码,还有些负责任的技术leader会细心review组内每个人的代码。总之培养新人的成本是非常高的。但是c++的缺点只是难学,并不难用,说好听点就是难学易用,付出高回报也高。我们愿意花时间去培养新人,每年也都会招实习生、毕业生,新鲜血液的加入才能让我们的团队保持活力,新人也能提醒我们这些老油条不忘初心。对于正在学C++、喜欢C++的同学来说,欢迎毕业以后来鹅厂。
发表于 2021-9-4 15:03 | 显示全部楼层
对于写C++的同学来说,抛开面试难度,只说个人成长、待遇以及未来需求、发展。无论是服务器端开发还是游戏开发以及嵌入式开发前景都一般。
嵌入式开发我记得5、6年前火了一把,但是,当时主要原因是被炒作的(物联网啥的),实际上待遇一般,即使现在需求和待遇都不太好。
游戏开发的话,网易游戏面试要求比较高,但是进去后多数都是写Python脚本,腾讯游戏是写C++逻辑,从我认识的同学来看,工作2年后,技术没有太多成长,跳槽出来想转行多数待遇也一般(我那届去网易游戏的很多,认识的得有5、6个,目前全部离职转方向了),但是这些人当年在校期间可是实力强劲的。当然如果能去做游戏引擎开发还是值得的,但是这种需要隐忍以及对游戏是真爱才可以。
服务器端开发多数实际上是业务岗,增删改查,快速迭代业务上线,如果技术没有太多积累的话,成长也有限。
实际上如果对技术有追求,个人推荐往底层方向走,走系统和基础架构类、分布式机器学习平台等方向,毕竟这种技术难度大,成长高,未来比较火且赚钱很多的技术方向啊。拿阿里招聘JD来举例:
职位详情 - 阿里巴巴集团招聘 可以看到以下几个要求:
1、熟悉AI领域常用算法以及开源框架(如Tensorflow/Caffe等); 2、熟悉大数据处理框架(如Spark/Flink等); 3、熟悉计算表示层技术(如Cloud Dataflow等); 4、熟悉大规模服务调度系统(Yarn/Mesos等); 5、熟悉资源隔离等技术(Docker/Kubernetes); 6、熟悉分布式存储系统。
这6个选项,任意找一个方向深入,都是不错的选择,我再补充2个,那就是搜索/推荐底层相关的生态开发。
而如果喜欢做嵌入式,可以选择:
职位详情 - 阿里巴巴集团招聘
当然异构计算系统架构师这种职业也是未来高端人才的要求,就是即会分布式机器学习算法,又懂嵌入式,又懂分布式系统设计。
再补充一点,上述提到的方向,做个几年后,语言就不是那么重要了,重要的是懂得如何解决问题。
发表于 2021-9-4 15:07 | 显示全部楼层
专注于服务器后台开发,包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等学习地址:https://ke.qq.com/course/417774?flowToken=1013300
发表于 2021-9-4 15:08 | 显示全部楼层
现在干实时音频的表示我们这行果然没存在感。
发表于 2021-9-4 15:10 | 显示全部楼层
说实话,这几个领域都挺难的。
嵌入式开发,服务器开发都属于受限系统开发,经常需要优化,当年有兄弟在dsp 32k 片上mem上实现cif大小的视频编码,绝逼不是会点语言能解决的。
服务器开发受限稍微好点,对架构能力要求很高,上集群啊,io非阻塞模型啊,cpu密集优化啊,负载均衡,zerocopy,数据库优化等,也绝逼不是会点语言能解决的。
游戏我不知道,不说话。总体来说,选一个自己可以长期干下去的方向,持之以恒,必有厚报。
发表于 2021-9-4 15:15 | 显示全部楼层
为什么要用语言来区分开发者,语言难道不是一个程序员的职业技能中最好习得的一个么?
目前在做数据库项目,golang + c++混合编程,项目启动之前毫无golang背景,经过两个星期时间,golang的部分就可以开发和调优,然而数据库那部分的知识才是通过长年累月的实践踩坑得到的宝贵经验。如果语言那部分比你的领域知识更重要的话,《xxx:21天从入门到精通》的作者们才应该经常在各领域顶会露脸。
话回到题目上,个人觉得c++的服务器端开发还有的可做,不过要看是什么服务器,对性能要求越高就对底层语言黏性越大,上层应用应该快速迭代,基础设施应该精耕细作。举个比较常见的例子,当你发现你的服务因为CPU context switch而影响性能的时候,你觉得是用了高级语言然后去改虚拟机好,还是用了c++去修改通信模型比较好,这当然见仁见智,但是第一个方案通常让你发现xxx语言的虚拟机是c++写的(逃
发表于 2021-9-4 15:20 | 显示全部楼层
C++后台开发Linux服务器架构方向学习路线,感兴趣可以看一下
C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
发表于 2021-9-4 15:27 | 显示全部楼层
喜欢c++的话就来我大腾讯吧 管他什么程序什么方向都是首选C++
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 14:07 , Processed in 0.092328 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表