华人澳洲中文论坛

热图推荐

    C++衰败了?学习C++没有出路了?从业者给你揭晓谜底

    [复制链接]

    2022-9-21 07:16:24 26 0

    比来看到大家在探讨C++开发言语的学习价值与开展前景,明天作为C/C++软件开发的多年从业者,来谈谈我的了解和意识,给大家提供一个鉴戒和参考。
    1、概述
    在早些年的Windows桌面和PC互联时期,C/C++始终都是各大IT公司广泛使用的编程言语,无论是客户端顺序仍是办事器顺序都在少量地使用C/C++。
    时至今日,C++依然是古歌公司开源名目的次要言语。


    近年跟着挪动互联网的衰亡与遍及,挪动APP遍布于咱们日常糊口的每个角落,挪动APP的开发变得炽热起来,作为安卓APP开发言语的Java又被注入了新的活气。而且跟着大数据与云计算技术的普遍运用,作为大数据技术框架编程言语的Java,其位置又失掉了进一步的加持。Java得益于其良好的开源生态,技术更新迭代很快,近些年来又推出了基于Java的云原生与微办事的新技术,这进一步晋升了Java的炽热水平。另外,Web前端技术的开展势头也对比迅猛,Go、Rust等新兴的编程言语也失掉了普遍的运用与遍及。只专一于言语规范推动的C/C++,没有开源生态与开源社区的反对,显得落漠了不少,部份细分畛域已逐步被Go、Rust等新兴言语抢占。



    这些年互联网的开展异样的炽热,蓬勃开展的大数据与云计算技术,煊赫一时的云原生与微办事技术,使得大家都把目光会萃到与这些技术严密相干的Web前端及Java后端开发上。这也诱发了一个趋向,各大院校计算机专业的先生在选择学习及开展标的目的时大少数都选择了Web前端或者Java开发。
    这其中还有一个很首要的缘故是,由于C++言语规范的臃肿与繁杂的言语特性(指针与内存办理等),让得多人望而生畏。学习C/C++的人变得愈来愈少了,这给C++岗位的招聘带来了很大的影响。当初公司想招聘一个C++岗位的人,无论是社招仍是校园招聘,都比前些年要难一些了。
    另外,还有一个对比广泛的景象,从从业多年的身旁状况来看,得多从事C++开发的人员都不是计算机科班结业的,都是从其余工科专业跨界转过去的。
    为何非计算机专业的先生,大多都选择了C++标的目的呢?其实很简略,非计算机的工科专业都会学习C言语顺序设计这门课,所以接触到的根本是C/C++方面的内容,关于考研的工科类同窗,接触C/C++的也对比多,所以得多人结业了都选择从事C/C++开发的相干的任务了。硬件的门坎对比高,学习硬件或者从事硬件钻研的先生对比少,所以大部门工科结业的先生都去从事软件相干的任务了。
    2、C++的位置与运用畛域
    C++作为一门偏底层的初级编程言语,降生的对比早,在多个畛域有着普遍而成熟的运用。虽然近年遭到了Java及Go、Rust等新兴言语的冲击,但其依然放弃着旺盛的生命力,紧紧占领着世界编程言语排行榜的前几位。



    C和C++在履行效力上是最接近汇编言语的初级编程言语,在许多对代码履行效力有很高要求的场景中会优先斟酌使用C++。除了一些传统的运用畛域,在对运转机能要求很高的人工智能、机器学习、计算机视觉与图象辨认、自动驾驶等新兴技术畛域,都在使用C++去做少量的开发任务。跟着技术的不停开展,C++的运用场景也在不停地扩展延长,特别是在物联网和云宇宙畛域。
    作为软件工业根底之一的C++,从以后的活泼水平及运用现状来看,是有普遍的用武之地的,是不会退出历史舞台的。C++虽然没有Java那样繁华的开源社区和通用的开源框架,但C++也有宏大的开源技术与功用体系,一个大型的商业化零碎老是离不开C++的,后盾的多个业务模块都是用C++开发完成,也会少量地使用多种C++开源库。
    从C++开源库ACE和boost在高机能通讯畛域的运用,以及MTL这样的高效数值计算开源库在数值计算畛域的杰出表示,咱们能够看到C++在高机能运用场所下的不成代替的作用,而嵌入式零碎这样内存受限的平台,C++曾经发扬着而且将发扬更大的作用。 能够预见的是,无论当前下层运用软件怎么变,它的底层中心都会是由C/C++这类高效力的编程言语完成的,好比Java虚构机、微软的.NET Framwork框架。由于只要这样的高效力编程言语能力彻底完全地发扬机器的功用。
    对代码的履行效力和速度有很高的要求的场景会选择使用C++,从以后的现状来看,使用C++的次要畛域有:
    1)算法畛域
    常见的算法有路由算法、搜寻算法、图象辨认算法、语音辨认算法、音视频编解码算法、广告保举算法、内容保举算法等。这些算法代码可能会对比简短繁杂,可能会被频繁的调用和履行,要及时地给出剖析后果,所以对代码的运转速度的有很高的要求,这些算法个别都会使用C++去完成。
    2)人工智能与计算机视觉畛域
    人工智能当初是最炽热的一个开展标的目的之一。这外面有两个典型的运用,一是图象辨认与图象处置,二是语音辨认,这些场景对实时性要求对比高,完成时会使用到少量的算法,所以个别也会选择使用C++去完成。
    3)后盾办事器畛域
    一个残缺的大型软件零碎,从前端到后盾会使用到多种开发言语,出于效力斟酌,后盾的得多业务办事器会使用C++开发。后盾办事器顺序个别是运转在linux零碎中的(办事器个别会选用Linux零碎作为其操作零碎),所以次要是进行Linux零碎上的C++开发。
    在这里分享几个后盾办事器开发的学习视频
    【C++后端开发】内存泄露的3个解决计划与原理完成,知道一个能够轻松运用开发任务
    150行代码,带你手写线程池,自行筹备linux环境
    100行代码完成tcp/ip协定栈,自行筹备好Linux零碎
    徒手完成一个协程框架,为你造轮子事业,再添一坑
    学习地址:C/C++Linux鏈嶅姟鍣ㄥ紑鍙?/鍚庡彴鏋舵瀯甯堛?愰浂澹版暀鑲层??-瀛︿範瑙嗛?鏁欑▼-鑵捐?璇惧爞
    4)游戏畛域
    得多大型桌面真个游戏客户端及后盾办事器都是C++开发的,客户端会使用C++加公用的游戏渲染引擎去开发游戏界面。
    5)VR/AR虚构理想与加强理想畛域
    这也是比来几年开展起来的一个抢手畛域,是计算机图形学、多媒体技术、传感技术、网络技术等多种技术的聚拢,包孕了多媒体、三维建模、实时视频显示及管制、多传感器融会、实时跟踪及注册、场景融会等新技术与老手段。VR/AR在数字地球、数字城市、虚构地舆环境中有着普遍的运用。
    6)汽车无人驾驶畛域
    汽车畛域的无人驾驶也是开展势头微弱的一门高尖端技术,它是传感器、计算机、人工智能、通讯、导航定位、模式辨认、机器视觉、智能管制等多门前沿学科的综合体。目前百度是无人驾驶畛域的佼佼者,华为紧随其后。除了这两家头部公司以外,得多车企也开始在该畛域有所规划,好比公众旗下就有专门钻研无人驾驶技术的子公司,咱们有共事当初就在那边做,次要使用C++。
    7)音视频编解码畛域
    音视频编解码一方面是管制摄像头收集图象,并对图象进行编码,另外一方面对收到的远端图象进行解码显示,这些编解码的管制代码根本都是用C++完成的,这其中会使用到音视频编解码算法根本是用C完成的。在音视频编解码畛域有得多出名的开源库,好比ffmpeg、WebRTC、live555、SDL等。
    音视频开发相干学习视频
    音视频开发系列-音视频入门中心常识精讲
    FFmpeg之音视频同步原理剖析
    【音视频开发】WebRTC第一个必学的名目-一对一通话
    2022年音视频流媒体初级开发课程FFmpeg-RTMP-HLS-RTSP-WebRTC
    【收费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体初级开发-学习视频教程-腾讯课堂
    除了上述畛域,其实还有嵌入式畛域、物联网开发畛域等,这里就不展开引见了。
    另外,有时乃至为了进步代码的履行速度会在源码中间接嵌入一段汇编代码,乃至全部函数都用汇编代码去完成,这在音视频编解码模块的代码中是很常见的。
    有人可能会问,通过IDE编译出来的二进制文件中也都是汇编指令,你报酬的添加一段汇编代码,都是汇编代码,为啥会有履行速度上的差异呢?由于源代码通过编译器的处置生成的汇编代码在完成上可能不是最优的,这要依赖于通用的编译器,而咱们报酬添加的汇编代码,编译器不会做任何修正,所以咱们能够间接在汇编代码中间接去管制操作,包管汇编代码是最优的,再也不依赖编译器去生成。3、常见的C++岗位都有哪些?


    在IT行业里,C++相干岗位个别有Windows/国产化客户端软件开发、通讯协定开发、音视频编解码开发(非算法类)、网络模块开发、专用开源组件及平安组件开发、业务组件开发、办事器侧业务软件开发、数据库开发、办事器侧开源组件开发、算法开发等。固然还有其余的一些细分岗位,咱们此处只大略地说一下这些常见的岗位。
    3.1、Windows/国产化客户端软件开发
    该岗位次要开发客户端UI软件,一方面要将数据在UI上展示出来,另外一方面要在UI界面上做一些业务操作。该开发岗位需求会使用罕用的UI界面库进行软件界面的开发,还要对软件业务有一定的理解。当初正在鼎力推广国产化过程,所以得多厂商记要开发反对Windows零碎的软件,也要开发反对国产化Linux操作零碎的软件。此类岗位的门坎较低,一个刚结业的老手,通过几个月的相熟与学习就可以很快上手,得多代码的完成细节均可以在网上找到,得多交互场景及用法都有迹可循。
    该岗位的门坎不高,较容易被新人代替,仍是要尽量地多去涉足一些有深度有难度的问题及畛域,掌握一些个别人不具备的技巧和教训,使本人变得更为片面更有价值,这样就不易被取代了。
    3.2、通讯协定开发
    该岗位次要开发保护一些规范的或者自定义的通讯协定,好比大家熟知的SIP协定、GPRS协定以及一些挪动通讯畛域的协定。有可能也需求去封装和保护一些通用的http/http、webSocket等开源协定库。
    该岗位会波及到Socket网络通讯、协定协商与通讯的具体细节,有一定的专业深度和门坎。
    3.3、音视频编解码开发
    该岗位次要是使用音视频编解码算法库去管制音视频的收集编码、音视频码流的解码播放显示。该岗位个别不会去开发详细的音视频编解码算法,算规律由专门的算法工程师去开发保护。该类开发人员会时常和赫赫有名的开源音视频库打交道,好比ffmpeg库、webrtc库、live555库、VLC播放器、SDL等,会使用到开源库中的一些功用模块。
    做音视频编解码开发的人员相对于其余岗位不是得多,次要集中在做视频会议、视频监控、在线视频、短视频、直播、图象检测与辨认、音视频解决计划(好比声网)的这些公司中。此类开发人员专业性对比强,在招聘市场上相对于较紧缺一点,也对比受欢送。
    3.4、网络组件开发
    该岗位次要从事供各个业务单元通讯的专用网络模块的开发,即处置Socket网络编程相干的事务。可能会用到一些网络通讯的开源库,好比ACE、Boost等。搞Socket网络编程,要处置Socket网络通讯过程当中的各种网络异样,需求对TCPIP协定栈有一定的理解,要掌握一些罕用的网络常识,要会使用Wireshark抓包剖析各种网络毛病。
    这种岗位个别专业也相对于强一些,当初的软件零碎都是经过网络和远真个办事器进行近程通讯的,网络通讯模块是必不成少的。
    3.5、专用开源组件及平安组件开发
    该岗位次要是保护一些专用的开源组件和平安组件,对开源组件进行封装,排查开源代码中存在的问题。C++降生的时间对比长,有宏大的开源体系,有完成各种功用的开源库,特别是一些国外顶级的IT公司开发了少量的开源库,好比古歌。
    得多开源库个别都反对跨平台,代码编写的很繁杂,会使用到各种新的C++规范中的内容,浏览起来有较大的难度,保护也有较大的难度。开源库很好用,但开源库一旦出问题,则对比难查。大型IT公司和互联网大厂,都在少量的使用开源库,他们也有少量的初级专家去处置开源库的相干事务,解决开源库使用过程当中遇到的问题。
    该岗位会频繁地和开源库打交道,能够学到开源库中优秀的设计思想和完成机制,专业性也对比强。
    3.6、业务组件开发
    该岗位是将底层的协定模块、音视频编解码模块、网络模块、专用组件集成在一同去实现相干业务的管制与开发,要担任和远真个办事器进行数据通讯。业务组件模块次要是为下层的Windows/国产化/MAC客户端、iOS/Android挪动APP、嵌入式硬终端等办事的,将这些下层运用软件的通用的业务模块或业务管制模块笼统出来,一致放到业务组件模块去处置。
    该岗位的开发人员任务量会对比大,会对比辛勤,要为下层的各个状态的运用软件办事,要排查各个运用软件业务上的毛病问题。由于要和远真个办事器通讯,会使用到一些规范的网络通讯开源库,好比http/http库、libwebsockets库,固然还会使用到公有的网络库。
    3.7、办事器侧业务软件开发
    该岗位是开发各个业务办事器,办事器与办事器之间要交互,又要为多个并发的客户端提供交互办事,会频繁地使用到多线程编程及多过程通讯的技术。办事器要包管24小时不中断无端障的不乱运转,要为多个并发的客户端提供及时的交互办事,办事器还要做多机备份,在泛起毛病时要及时地将业务切换到备份办事器上。
    办事器的不乱性和机能比客户端要严苛得多,办事器侧的顺序会使用到少量的开源技术,技术含量也要高得多,所以搞办事器侧的C++开发要更有应战,更有技术含量一些,更无利于集体才能的疾速晋升。咱们有得多搞终端侧的共事,都转行搞后盾C++办事器开发了。
    3.8、办事器侧开源组件开发
    该岗位次要是保护开发各办事器交互的专用开源组件。办事器顺序会少量地使用到各种开源技术,使用到的开源库也会十分担任,保护的本钱也对比高,一旦开源库出问题,会对比难排查。
    3.9、数据库开发
    该岗位次要处置平台侧数据核心的数据存储与查问事务。在有的小的零碎或公司中,可能没有的专门的数据库开发工程师,这些数据库事务都被办事器业务开发工程师代劳了。在大型IT公司和互联网大厂,由于会波及到海量数据的存储与查问,对数据的存储与查问机能有着很高的要求,他们会有专门的数据库工程师去处置数据存储及数据查问的效力问题。
    3.10、算法开发
    该岗位次要开发完成各种算法。常见的算法路由算法(内置于网络装备中的)、搜寻算法、图象辨认算法、语音辨认算法、音视频编解码算法、广告保举算法、内容保举算法以及一些人工智能算法等。算法类的岗位要求对比高,门坎也比其余岗位的要求高得多。
    下面只是大略地说了一下C++相干岗位的状况,假如要具体理解岗位对技术才能的详细要求,能够到招聘网站上查看这些岗位的具体阐明。
    4、如何晋升集体的技术竞争力?



    技术老是在不停地向前开展,每个行业每个技术岗位都有被他人代替的危险,不异性质的岗位被代替的水平可能会有所不同。为了升高被代替的危险,需求咱们不停晋升本身的技术程度和才能,要在岗位上体现出个别人不具备的作用和价值。
    要勇于被动地去钻研和解决各种难解的疑问杂症,在剖析和解决问题的过程当中,能学到平时学不到的货色和教训。另外,还要踊跃被动地参预到相干模块的重构与机能优化工作中。不要将目光局限在以后本人保护的模块中,在软件零碎联调或者进行问题排查时,多去理解相干模块的一些技术完成细节和内容,要下认识地去捕捉这些学习的时机,善于去开掘这些时机,不只能裁减眼界和常识面,还能积攒不同场景下问题的排查教训。
    要勇于去钻研个别人不肯去深化钻研的技术,深化进去并吃透相干的技术细节,这样能力搞定个别人搞不定的问题,这样能力体现出纷歧样的作用与价值。
    最初给大家分享一个c/c++ linux后盾办事器开发的学习线路(取自零声教育课程大纲,该技术栈对标腾讯T8技术栈)
    学习线路网页版:闆跺0鏁欒偛 绗?十二浠? Linux C/C++鍚庡彴鏋舵瀯寮?鍙? 鎴愰暱浣撶郴璇剧▼ - v1.5



    需求C/C++ Linux办事器架构师及音视频开发学习材料加qun8十二855908获得(材料包罗C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),收费分享

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    注册会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题31

    帖子41

    积分195

    图文推荐