大家好,我是阿Q。
今天这篇就是专门给现在还迷茫不知道自己到底要做什么方向C++开发的同学们。
几年后回过头看的时候,你一定会感谢当初那个努力的自己!
C++作为当下也非常流行的一个面向对象语言,有着非常多的应用,一定会有一个是你喜欢的,也是适合你的。
C/C++发展方向甚广,包括但不限于以下方向,仅供参考!!!
一、后端/服务器开发工程师
C++后端/服务器开发,因为现在互联网后端开发的主力语言是C++、Java、Golang,但是C++的主要优势是性能十分优异,它极致压榨CPU;Java和Golang的话更适合写业务代码,我认识的好几个Java大佬,校招那会儿去公司都转去用Golang了。对性能有严格要求的后端会优先采用C++开发,像bd、tx这些大公司的后端开发都是用C++语言来开发的。在高频交易领域,像量化私募企业、证券公司也都在用C++语言做后端开发。博主本人也正在证券行业做C++后端开发。
后端开发首先肯定要精通C++语言,也要熟悉操作系统、计算机网络、Linux网络编程、设计模式、数据库,还有个常见的数据结构与算法以及各种后端中间件。
关于后端开发,我以前的分享基本上都是根据这块的需求来更新文章的,从最简单的C语言基础到后面的一些算法,更多的是希望大家打好基础,在后边学习更高级点的东西能有好点的基础;而且现在校招不仅看重基础,还要看你的实践能力,所以我希望大家不要再在基础这块儿吃亏。
【后端开发】
编程基本功扎实,掌握 C/C++/JAVA 等开发语言、常用算法和数据结构;
熟悉 TCP/UDP 网络协议及相关编程、进程间通讯编程;
了解 Python、Shell、Perl 等脚本语言;
了解 MYSQL 及 SQL 语言、编程,了解 NoSQL, key-value 存储原理;
全面、扎实的软件知识结构,掌握操作系统、软件工程、设计模式、数据结构、数据库系统、网络安全等专业知识;
了解分布式系统设计与开发、负载均衡技术,系统容灾设计,高可用系统等知识。
下边是某公司的招聘要求,大家可作参考。
看看上边这两个岗位要求,不仅学历这块有要求,有的还需要相关实习经历。这已经筛选掉了很大多数人,因为大多数人在学校都是按部就班的完成学校的任务,只有一些对这个方向有提前规划的同学在提前布局。
还需要有良好的数据结构和算法基础,那些有ACM经历或者是竞赛经历的同学更有优势,所以说如果你是大一大二的同学就积极参加点类似这种的竞赛,不管你学校是否非常ok,那都是很好的一个履历。
对于语言来说,那肯定是必须要掌握的,作为C++这块的话,如果是第一次看到这篇文章的话,我建议大家关注之后翻翻以往的文章,对你绝对有很大的提升。
再就是TCP/IP这块,不管是开发还是测试,只要你面试的公司差不多,这块内容肯定就是必问的。
还有其它一些的使用,像MySQL、Nginx、Redis等等,想成为一名优秀的后端开发工程师,那学习它们是一条必经之路。
所以说要想卷后端这一块,语言能力是最最最基本的要求。还有其他的一些学习内容,可以看以往的内容。
二、桌面客户端开发工程师
这类客户端产品主要指的就是在个人电脑上的应用程序。分别有Windows客户端开发工程师和Mac客户端开发工程师,主要就是Windows和Mac上的界面和逻辑开发。
【PC客户端开发】
计算机软件相关专业本科或以上学历,热爱编程,基础扎实,理解算法和数据结构相关知识;
熟悉 windows 操作系统的内存管理、文件系统、进程线程调度;
熟悉 MFC/windows 界面实现机制,熟练使用 VC,精通 C/C++,熟练使用 STL,以及 Windows 下网络编程经验;
熟练掌握 Windows 客户端开发、调试,有 Windows 应用软件开发经验优先;
对于创新及解决具有挑战性的问题充满激情,具有良好的算法基础及系统分析能力。
同样的,语言是基础。这类岗位的话,一般都是在Windows/Mac环境上开发的。用的开发工具是Visual Studio,像它里面有的框架也是需要了解的。
常用的一些工具,像Cmake等等也是客户端开发过程中必不可少的。
对于操作系统和计算机网络,不管是做C++什么岗位,面试中都是必问的,那肯定也是你必须要会的。多进程、多线程、网络编程也是绝不能少的。
近几年,QT作为一个跨平台C++图形用户界面应用程序的开发框架慢慢流行起来。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。如果你感兴趣也可以进行学习,现在市面上这个岗位的招聘也慢慢增加,前景也不错。
所以说想做C++开发但不想卷后端,对客户端方向感兴趣的也可以做这个方向。它不像Android或者IOS需要用Java和object-c,入门的门槛主要还是C++的学习。
三、图形学/游戏/VR/AR
上边这几个,算是同一个类别的。
就比如说图形开发工程师,这个岗位比一般的开发工程师门槛要高一些。编程语言是C++,但是要学较多的数学应用,像线性代数、解析几何、微积分等等,还需要了解GPU架构。
一些较常见的图形学方面的功能,一般商业游戏引擎或者是渲染器都已经提供了,图形开发工程师主要就是按照项目需求做出一些修改,或者是研发出一些专用的新功能。比起其他的业务方面的工作,这块儿的话难度较大,所以说涌进来的人就相对少。
图形学一般对性能都比较敏感,特别是实时应用(比如说游戏),每帧只有16.6毫秒的上限,对编程的要求还是相当高的。
还有就是需要学习使用一些游戏引擎,比如Unity、cocos2dx、UE4等,使用起来还需要一些时间成本的。
【游戏客户端】
计算机科学/工程相关专业本科或以上学历,热爱编程,基础扎实,理解算法、数据结构、软件设计相关知识;
至少掌握一种游戏开发常用的编程语言,具 C++/C# 编程经验优先;
具有游戏引擎(如 Unity、Unreal)使用经验者优先;
了解某方面的游戏客户端技术(如图形、音频、动画、物理、人工智能、网络同步)者优先考虑;
对于创新及解决具有挑战性的问题充满激情,有较强的学习能力、分析及解决问题能力,具备良好的团队合作意识;
具阅读英文技术文档能力;
热爱游戏。
上面这个是某游戏公司开发的岗位,对于游戏公司来讲, 效果和性能是很有追求的。对秋招的小伙伴们来说,并不是一件容易的事儿,因为绝大多数学校是没有这门课程的,如果你对这个方向很感兴趣,也可以转语言或者方向,但是一般来说门槛不是很低。
四、测试开发工程师
或许有人问,测试开发是测试还是开发,本质上来讲还是测试。因为测试是核心,开发是手段。
一般来说,测试开发工的岗位,就一定要求你懂研发,懂测试,并且还要有一定的深入工作的能力。那么你就要会Java、Python、Shell、SQL等等,这些都是最基础的,然后就是进行业务测试。
【测试开发】
计算机或相关专业本科及以上学历;
一至两年的 C/C++/Python 或其他计算机语言的编程经验;
具备撰写测试计划、测试用例、以及实现性能和安全等测试的能力;
具备实现自动化系统的能力;
具备定位调查产品缺陷能力、以及代码级别调试缺陷的能力;
工作主动积极,有责任心,具有良好的团队合作精神。
大家来看看这是某手的岗位要求,对于测试相关岗位来说,计算机基础也是必知必会的,面试的时候不需要你侃侃而谈,最起码也得答上来十之八九。
对于软件工程专业的同学,学校肯定会开软件测试相关的课程,什么黑盒白盒测试那都是最基础的...
也有人可能会对测试开发岗位有点误解,以为去了就是鼠标点点就ok(不过我确实有认识的朋友做那样的测试),事实并不是那样,不仅仅需要测试基础,对于开发也是有一定要求的,至少得熟悉Java吧,不过你熟悉C++也是有机会和优势的哈。不乏也有别的技术,你要根据企业具体想要招的人的岗位要求进行很大扩展的学习。
还有就是测试部门的同学也是需要性格好点的,因为要跨部门沟通,你品你自己品。。。
五、网络安全/逆向开发工程师
其实网络安全开发工程师是网络安全大方向下网络安全建设与实施岗的一个细分岗位。
那么对于网络安全开发工程师的话,计算机组成原理和操作系统还是需要杠杠滴,并且还要熟悉网络安全的一些基本知识。
【安全技术】
热爱互联网,对操作系统和网络安全有狂热的追求,专业不限;
熟悉漏洞挖掘、网络安全攻防技术,了解常见黑客攻击手法;
掌握基本开发能力,熟练使用 C/C++ 语言;
对数据库、操作系统、网络原理有较好掌握;
具有软件逆向,网络安全攻防或安全系统开发经验者优先。
还是根据某安全公司的具体岗位要求来分析分析,这是一个漏洞方向的。其实我也看了有些公司对安全开发工程师的要求还是蛮高的,必须985,211亦或是硕士......那也没办法,也很正常。
再来看看这个岗位要求,细分的一些技能多少还是有东西的,光看前两条,大家有没有发现不管什么岗位对编程语言、计算机组成原理、计算机网络、操作系统都有要求!!!
用现在理解的话来讲就是,这些是开发工程师的默认就必须懂的。
这个漏洞方向的安全开发对于其他的技术要求也不是一点两点,其实不用看这肯定的研究生起步了,本科生哪有这么细分的技术让你研究学习??
还有加分项,我觉得你要是有这些加分项,不管哪个岗位都是加分的哈哈。。。
所以,打铁还得自身硬!
六、物联网/嵌入式开发工程师
这个方向这几年也是越来越火,物联网和嵌入式都可以按软件和硬件来分;范围很广,所以也就有很多细分的方向。物联网是一个行业大类,嵌入式是一个技术大类,它们的共同特性就是软硬件都要学习理解。
嵌入式的话,主要做一些单片机软件开发,计算机科学与技术和电子信息类专业的同学在学校肯定都玩过那东西,还有Linux软件开发,驱动开发,嵌入式系统软件开发,相对而言更接近底层的开发,所以说用到的语言肯定是C语言。除了软件学习之外,还有硬件方面的,要看得懂时序图、电路图,汇编语言也要会,因为在调试的时候可能会用到C语言的反汇编。FPGA、DSP软件开发 这类相对上层一点硬件专业中属于偏软,还有一些其他的工业控制软件开发。
相比于其它软件开发,嵌入式就业的方向更广、更深,就业机会和入职待遇比普通软件工程师好。
【嵌入式应用开发】
有良好的编程基础,熟练掌握 C/C++ 语言;
掌握操作系统、数据结构等软件开发必备知识;
具备较强的沟通理解能力及良好的团队合作意识;
有 Linux/Android 系统平台的开发经验者优先。
上面这个,嵌入式开发的岗位要求还是很明确的,也比较详细。
前面也说过,嵌入式这块儿的话主要就是C/C++,还有就是我们常见的数据结构与算法,如果有幸能看到这里的话,大家不妨关注一下博主看看前面总结的数据结构与算法的相关内容,对校招还有1-3年经验的同学还是很有帮助的。
Linux系统也是必不可少的,像这种的开发一般都不会在Windows上。那在Linux系统上,必然要会Shell,那更好更快的编译也少不了Makefile。
后面还有多进程多线程编程,其实这些我在前边的章节都有很详细的介绍。大家可以随时学习,需要PDF的也会有相应的获取方式。
后边就比较有垂直度了,要会MCU相关的东西,但是其实作为一个校招生的话,如果没有这方面的经验也还行,前面的基础比较好的话,这方面对于招聘方来说也还是可以接受没经验的。
总的来说,嵌入式是近几年非常火的一个方向,对于想进这个方向的同学来说还是非常友好的,薪资待遇还是相当不错的。
七、音视频/流媒体/SDK
先说说音视频吧,它的本质就是在极端复杂的网络环境下充分利用硬件终端,给用户带来听觉和视觉上带来极致的体验。所以音视频的开发过程是一个追求极致的体验。
【音视频编解码】
硕士及以上学历,计算机、信号处理、数学、信息类及相关专业和方向;
视频编解码基础扎实,熟常用的 HEVC 或 H264,有较好的数字信号处理基础;
掌握 C/C++,代码能力强, 熟悉一种汇编语言尤佳;
较强的英文文献阅读能力;
学习能力强,具有团队协作精神,有较强的抗压能力。
看看这个是某手的音视频方向,但是说实话啊,学历要求还是有的。往往在岗位上有学历要求的,如果你是本科就别想了,某手对于学历这块要求还是很严格的。
那么作为硕士的话,不仅仅是自己研究的方向,更多的还是要考察基础的一些语言、操作系统、计算机原理。。。
加分项确实有垂直度,也可以看看前面那些的加分项,它们都比较垂直,更多的是对某一细分方向有深入的理解。。。
八、计算机视觉/机器学习
其实计算机视觉就是人工智能 (AI) 的一个领域,就是让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息,并根据该信息采取行动或提供建议。如果说人工智能赋予计算机思考的能力,那么计算机视觉就是赋予发现、观察和理解的能力。
然而这些岗位的话一般都是硕士起步,本科生几乎没有做这些方向的,除非特别特别优秀。所以我们一般普通本科的同学就尽量别碰这个方向,如果是硕士的话还是很有学习的必要。
为什么会说这个方向呢,因为它们大部分东西还是要用C++来完成的,Python也会是一个非常好的选择。
【计算机视觉研究】
计算机、应用数学、模式识别、人工智能、自控、统计学、运筹学、生物信息、物理学/量子计算、神经科学、社会学/心理学等专业,图像处理、模式识别、机器学习相关研究方向,本科及以上,博士优先;
熟练掌握计算机视觉和图像处理相关的基本算法及应用;
较强的算法实现能力,熟练掌握 C/C++ 编程,熟悉 Shell/Python/Matlab 至少一种编程语言;
在计算机视觉、模式识别等学术会议或者期刊上发表论文、相关国际比赛获奖、及有相关专利者优先。
看看吧,说的没错,这个方向不仅是学历的要求,对其它方面的知识也需要有深入的研究,研究生要是想找这个方向的工作,也还是需要努力的。
总的来说,现在的校招和社招比我们那会儿难太多了,今天看这儿cy,明天看那儿cy,害。
但是呢,外界因素都不是问题,最大的问题还是自己,俗话说“打铁还需自身硬”,只有自己强大了,外界环境只是外界环境。不要每天都去某脉看这个看那个,给自己制造焦虑,认真做好自己的就ok了。。
还有就是适当的降低预期,你会发现一个更好的世界,每天看各种没有营养的东西,在某脉上看到的基本上都是至少年入四五十w的,永远活在焦虑中,自己不如别人.....有意义吗???
好好加油吧各位,秋招中下一个offer收割机就是你!