最近在一个强二线城市找工作,那些招聘网站上列出的最近三天发布的c++开发岗位只有两页,其中还包含着不少培训公司的招聘广告。唉,c++的需求是越来越少。工作了8年,以前的搞c++的同事有转c#的,也有转行搞java的,当然,还有当上日理万机的领导的(基本没有时间code了),出去创业的就更不用说了。让人郁闷的是,新招的年轻猿们搞java和c#的一大堆,那些c++的招聘启事上基本上没有投的......抱怨归抱怨,咱今天还是说说c++的应用领域。还是从招聘网站的需求上说起吧。
First
游戏服务端和客户端程序。此类应用算是c++的一个传统应用吧,主要是内存管理和网络以及执行效率这几方面比较有优势,绝大部分游戏引擎都是用c++写的,比如UE4、大部分手游服务端(比如cocos2d_x)。看下面这家公司的c++服务端的招聘要求。(原谅我把无关的内容划掉了)。
游戏服务端开发岗这是北京的一家比较大的上市软件公司的c++招聘要求。C++语法精通是必须的,boost的asio网络库也是一个硬性要求,数据库这块到不是很难。虽然没有介绍具体使用的那款游戏引擎,估计应该是cocos2d_x,因为cocos2c_x提供了c++和lua这两种开发api。
就这个岗位来说,对于还没做过项目、只会c++语法的同学还是挺有挑战性的。具体来说,由于这家公司的服务端程序运行在linux下,所以基本的linux知识还是要有的,不过这个要求不会太高,掌握基本的linux分区、常用命令、常用api(比如上面说的多线程)基本能应付。Linux网络这块比较庞大,这份岗位上已经指定了使用asio库,建议基本的socket通信还是要会比较好。Mysql数据库提供了c++的开发套件,直接下载开发文档即可,其他数据库情况也差不多。
这份招聘岗位的要求对于游戏服务端还算是比较典型的。所以,有志于游戏服务端开发的同学,可以在学完c++语法后,学习下linux基本知识,比如在linux系统下用c++开发一些简单的小程序,比如linux聊天室程序,设计客户端和服务端、网络及多线程。下一步可以尝试看看数据库方面的开发资料,然后自己动手把之前的聊天室程序发送的数据写入到数据库上。至于boost的asio库,网上学习资料很多,看完后可以把聊天室的网络这块由linux的socket换成asio库来执行网络传输。
其实,游戏服务端今年来使用java开发的情况也越来越多,数量上也可以和c++平分秋色,甚至还要多一些。硬件性能的提高和硬件价格的下降以及java性能的提升是重要原因吧。所以,想从事游戏服务端开发,c++和java都学一些,还是比较保险。
总结一下,对于使用c++开发的游戏服务端和客户端来说,网络库、数据库、三维引擎都是要掌握的,这三方面基本都可以用c++搞定。
Second
虚拟现实和仿真软件:大家听得比较的多应该是虚拟现实,仿真软件在生活中不常见。前两年VR确实挺火的,常规的VR引擎基本上由c++开发。其实这由设计到c++的另一个应用领域:图像处理,这个以后再说。其实上面提到的三维引擎,好多都是支持VR的,比如UE4、U3D等,基本上还是应用层的开发。现在VR应该还有一些团队在开发,应用的方向可能比较有限,比如房地产行业的楼盘三维展示,感觉更像是三维引擎的一个应用方向,就行游戏也是三维引擎的一个应用方向一样。先看下这方面的招聘要求。
虚拟现实开发工程师这是北京的一家专注于做三维设计的公司的岗位要求(二线城市这类岗位确实不多,一线城市也没找到几个),和上一个岗位一样,精通c++的语法是基本要求,还有熟悉U3D或UE4,以及opengl。这个岗位倾向于研究三维引擎,需要比较深厚的数学功底和计算机图形学知识。这种岗位比较少,就不多说了。
计算机仿真应用还算比较多,比如电路模拟、工业仿真、军事推演等。这类岗位对专业知识要求就比较高了,c++仅仅是一种专业知识的表达、展示工具。
上面的岗位是一家专注做仿真的公司的c++高级研发工程师的招聘要求。可以看出,对专业知识的要求还是挺高的,对c++开发相关的技能没有提出太多要求(其实想做好这个岗位,软件开发的技能要求还是比较高的)。
列出这两个岗位,只是说明下c++在这方面的应用。由于专业性太强,不大适合广大计算机专业的猿猿们。
PS:有种感觉,以后也许这种仿真才是c++仅有的几种应用方向之一......
Third
ARM等嵌入式平台、硬件驱动:随着物联网的大热,嵌入式开发工程师的需求也越来越多,同样也带动了底层驱动工程师的需求,另外,现在的硬件的性能也逐渐的不再是瓶颈,所以c++在嵌入式系统上的应用也就多了起来(以前主要是c语言为主)。
这类嵌入式方向的应用也离不开网络开发,而且绝大部分嵌入式软硬件运行在linux系统上,winCE已经很少了。另外,虽说嵌入式系统的硬件性能有了大幅提升,但是还是不能喝PC相比,所以,嵌入式系应用的开发还需要考虑代码的优化,而且优化这方面也挺重要。
驱动开发方面,c语言和c++都有需求,这方面也是c++的一个传统应用方向,windows和linux都有应用场景,而且这方面和硬件创业也能扯上点关系(有志于硬件创业的同学可要学好c\c++哦)。个人感觉从事驱动方面开发需求还是挺大的,毕竟,很多硬件需要驱动才能工作呀。下面的岗位就是嵌入式方面的,待遇还不错。
驱动开发岗位从第一条要求来看,这个岗位适合的专业还挺多的,另外要求精通linux下的驱动程序的编写于调试,市面上有很多linux驱动开发的书籍,讲的很透彻。另外,该岗位还要求了解arm的体系结构和总线接口协议(这个真不太懂....)。可见,这个岗位对于想要自学硬件的同学有点难度,毕竟这些东西还需要亲身拿着设备去实践才能理解的深些,对于c\c++开发语言来说,反而没有硬件的要求高。另外,对于这些岗位,个人感觉对linux操作系统了解的比较深是很有好处的。
待续........