loveme88 发表于 2023-10-3 19:22:24

为什么大家都怕学C++?

为什么大家都怕学C++?

Cfz 发表于 2023-10-3 19:22:52

小马过河的时候问到了不该问的动物

ak789@163.com 发表于 2023-10-3 19:23:44

cpp的护城河决定了很多人学不下去。
C++后端岗位是否会越来越少,如果是五年前、十年前抑或二十年前,我的答案显而易见: 会。
但是站在2023年的当口,新世纪已经迈入第三个十年。我的看法是: 不会。这么说的原因倒不是因为C++回春,只是说今时今日还能对C++有需求的,基本上也不是JAVA或Go能替代的了,一类原因是领域本身严苛的技术要求与限制,让C++拥有了最后的乐土。比如网络,存储等。另一类原因是招聘企业内部的C++历史包袱,尾大不掉(比如腾讯)。这类公司如果在十年前没有迁移到JAVA,三五年前没有迁移到Go,时至今日,恐怕以后也不会再迁了。
很多人喜欢踩C++上位。其实你现在真去一家用C++的公司,日常工作还不是写if else?那么对你来说,用C++来工作难吗?和其他语言有区别吗?说难也不难,写基础架构的人可能会说维护C++难点,但由于二八原则,大部分程序员还没到这个工作层面,即使是在某某公司的基础架构部任职,可能也是做一些日常修补的工作。大多数码农不管是什么语言的,还不只是熟练使用if else的水平?换门语言上手工作对你来说并不难,真的… if else是无国界的…
与其争论语言,不如把视野放开,多看看语言之外。
我好像没特指后端的C++,其实我现在很少提后端这个词了,更遑论C++后端了。十年前的后端是数据库curd,是web。后来的后端是分布式、服务化、rpc、nosql、mq、blabla……前几年我叫做大后端。
近年来呢,越来越感觉后端一词很模糊了。做离线数据分析,跑MR任务这种工作算后端吗?你可能说这是大数据岗位或者叫基础研究(腾讯叫法)、策略(百度叫法)。原先更多的是算法同学的专长,但是慢慢的边界越来越模糊。除了专业的机器学习模型和算法本身工作以外的一些工作慢慢都被纳入到早些年被称之为后台开发的同学们的技能要求,后端/后台开发指什么?越来越难以统一口径了。可能后端backend大家默认是在线服务?by the way 机器学习模型很多也是C++实现,提供的Python API,那么这些工作算C++后端么?还有CV,这个是被归类到客户端了么?
我感觉吧,大家先把后端一词的理解统一了,再来争论吧…
唉,又跑题了。
Go:我不要面子的啊?
什么?
好像我没怎么提到Go? 是啊,我从来不觉得觉得Go是用来取代C++的啊。我反倒觉得:Go出现后,PHP后端岗位可能会越来越少吧。毕竟Go也快成世界上最好的语言了。
PHP:躺枪……这你也能黑到我?
来源: 作者:果冻虾仁 链接:https://www.zhihu.com/question/363448565/answer/1022274156今年秋招已经开始了,很多同学问我大厂面试的核心知识点,东哥熬夜整理出来了9大核心知识点,需要的自取:
校招进大厂,9大核心课程知识,熬夜整理成思维导图送给大家BAT大佬整理的进大厂必看秘籍!​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487114&idx=1&sn=3daf22898b8149910b297f48376395a3&chksm=fdb3f054cac47942e2dcd43ba8a33ab414e0dafb2300ac2eebc9fe18af5cd9f4618b3b4f3266#rd另外,我当初在准备各大公司技术笔试的时候刷了大量的算法题,其中就是参考了一本谷歌大神的LeetCode刷题笔记,帮我整理了解题思路,归纳了出刷题方法,非常不出错,转给需要的同学:
BAT大佬写的Leetcode刷题笔记,看完秒杀90%的算法题!​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd卧槽!字节跳动《算法中文手册》火了,完整版 PDF 开放下载!​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487117&idx=1&sn=652cf7049054f421f502ee045454cc3b&chksm=fdb3f053cac4794516387eae78395d23879162d9ce15719444c246c86ca0dad021d8c713502c#rd最后给大家介绍一份计算机经典书籍,送大家一份硬核书籍资源:读大学跟工作期间,我买了很多书,大部分是一些技术书籍,也收集了这些书籍的电子版,都在这里,现在免费share给大家,包括了计算机类常用电子书,包括C,C++,Java,Python,Java,Linux,Go等,希望大家能认真阅读。点击下方链接直达获取:
计算机经典必读书单(含下载方式)觉得对你有用,麻烦给我 :
@码农出击
一个点赞,鼓励下我!

janbo 发表于 2023-10-3 19:24:22

我有个程序猿朋友说:
C++目前要么用来做中间件、要么做底层引擎的加速开发,包括通讯协议、无人机驾驶、游戏开发等等,基本都是一些比较深入的开发领域,招人基本上都是名校学生、技术大佬、程序员老鸟,除此三种人之外,走C++难度相当大。好处就是:市场C++程序员偏少,技术门槛高,不那么卷,同时薪资高。如果不适合做C++,想做后端开发,只能转成Java。
一流程序员靠数学、二流程序员靠算法、三流程序员靠文档、四流靠API,五流靠百度;数学水平决定了程序员思维模式的上限,经典算法早已经证明完了,如果再改进和升级,数学不到位那就只能继续用经典算法。
C++也不难学的,作为一种工具,至少入门是很简单的。
学习C++,如果是初学者,不管是在校学生,还是毕业了的,还是低学历的,或者没有读过书的,也不管是以前学过的,还是没学过的,或者以前学过C的,请都仔细学习一遍《C++ Primer Plus》这本书,这本书是针对初学者的,讲解很详细很全面,一步一步的解释,程序实例并不做枯燥的数学运算,而是生活的小例子,从而增加兴趣和降低难度。
接着是《C++编程思想》开始,学习基本语法和面向对象程序设计思想。也可以参考汤子灜的《计算机操作系统》。这是所有操作系统的通用理论。然后你可以去学习《Windows程序设计》和《Windows核心编程》深入学习Windows编程知识,或者学习Linux系统等,当然,如果真心想深入研究,建议学习Linux系统,因为它是开源的,你能看到系统所有内核的代码,深入学习,而Windows是封闭的,你看不到。不过,如果你要在Windows平台上发展和找工作,那建议学习好,学好后还可以对比学习Linux系统,更好的理解它,从而更能提升操作系统的知识水平,而不限于哪一种操作系统。然后就是各种应用级别的,比如图形方面的,网络通信方面的,等等。但是系统是它们的基础,所以必须先学好,才能更好的学习它们,当然这是建议,可以根据自己的情况做调整。

然后如果有项目可以跟着项目学习,借鉴前辈的经验。如果没有项目则可以借鉴书籍,例如《深入浅出MFC》等,通过一段时间的演练,相信对抽象,封装,多态,继承等就会有较深的认识了。然后可以接触下《C++ primer》,《Effective C++》,《More Effective C++》等书,借鉴大家的经验,修正自身的一些毛病和问题。再往后就可以了解下设计模式相关的一些书籍,然后在实践中靠自己多积累了。
C++基础学好了,还是不够的。它只是一门语言而已,仅此而已,不要把它想得太神圣了。真正能够发挥最好的作用的,还是要与平台结合,还有学会其他的开发工具,比如框架,类库什么的。初学者一般都是从事Windows开发,当然也有准备从事Linux开发,对于服务器方面的开发,基本上是用Linux了。所以根据自己的发展方向,进行选择吧。不管是哪个系统平台,操作系统的基础理论必须学好,因为它是所有目前操作系统的通用理论。然后再分别深入学习。
鉴于Windows是微软的操作系统产品,因此,工具最好还是使用微软的。因为这样的话,可以和系统做到最高效的对接,提高程序的效率和兼容问题。在平常开发中,使用的开发工具则推荐使用Visual Studio ,开发时使用MFC(微软基础类库)。MFC覆盖了编程中所有的方面。当然,在这之前,需要学习Windows编程,也就是API编程,因为MFC有些功能是API的简单封装,简单的意思就是把一个API函数放在MFC函数中,将API函数需要的句柄作为MFC类中的一个成员变量,从而减少了函数的一个参数。仅此而已。还有的功能,根本就没有MFC类或者类成员函数对应,因此就必须使用API函数来解决。同时MFC是一个类库,还是一个程序框架。
   所谓的程序框架,就是将Windows程序的流程进行了封装,然后在MFC中可以轻松的编程而不用关注内部很多细节。有人会说MFC开发的程序效率很低,我之前也听信了他们的看法。其实,我现在倒不这么觉得。说它效率低是因为MFC是一个框架级别的,因此考虑问题都是很高很远的,自然,有些方面就要考虑到很全面,自然也就对程序添加了很多一般用不上的东西,导致程序效率变低。之前我也是这么认为了的,从而产生了对MFC的鄙视,相信从底层开发更能体现技术。但是这种想法是错误的。效率低不低,其实不关工具的问题,表面上看,确实如此,如果以默认向导配置生成了一个程序,自然会加入很多不必要的东西,程序效率自然变得低了,但是,如果是一个高手,很精通MFC,自然,每个部分是干什么的摸得一清二楚,试想,编出来的程序能低吗?我想,因为是跟操作系统同源,所以执行效率更高,因为很多东西可以直接是系统的内核的东西,而其他类库,因为Windows是封闭的,不能够做到深入内核的一些东西,因此就使用用户态的东西模拟内核的,因此效率也就变低了写。就像Java的虚拟机运行程序,如果能在Windows中的程序直接运行,免掉了中间的转换,自然效率就高了。
学习MFC之前,当然C++必然是要学好的,同时Windows API编程也必须学好。MFC只有C++才能使用的类库,有些初学者还不知道,我当初开始接触也不清楚。当然这都是建议,可以根据实际情况调整。当然,如果这两个不先学好,MFC想要学好就真难了,MFC就像C++一样,也是博大精深的。因为涵盖了C++、Windows,还有MFC本身的文档视图结构和一些其他的机制,直接学MFC,不可想象。Windows的学习,可以看《Windows程序设计》,MFC初学可以学《MFC Windows程序设计》。这些都是适合初学者的。MFC的深入可以学习侯捷的《深入浅出MFC》。这些都学好了,基本的开发都不成问题了。
   要想进一步学习,就要学习更多具体领域的开发,就要学更多的东西了。再此先推荐学一下STL(C++的标准模板库)和Boost库,这些库在实际开发中经常使用。MFC中有容器库,比如CArray,它是先于STL出现的,有很久的历史了,也很好用,想Java的容器使用一样,很方便。但是真要学好容器,还是学习STL。STL是后来添加到C++的,是一个标准的模板库,当然容器也是标准的,不同的容器有不同的分类,而不是想MFC的容器库一样,一个容器类实现了各种容器,使用起来方便,可是理解起来就不是那么容易了。STL中vector和map是不同的容器,用法也不一样,所以,学会STL,你就能够很清楚容器的内部原理,使用起来就得心应手。容器的内部构造就是数据机构中的东西,比如树,链表等,正是这些结构,才使得容器可以很容易实现了动态增长,和各种特性。然后STL中的各种算法,当然是与容器分开的,通过适配器将容器和算法连接起来,使算法可以操作容器,这也就是泛型编程的思想的结果。算法中则是数据结构中的算法作为基础,STL强调效率第一,而这些算法都是世界顶级大师的杰作,效率上绝对是杠杠的。因为注重效率,因此在错误控制上就很少,所以使用时务必注意,否则出现的错误你都看不懂。而STL是基于模板的,因此,想要学好STL,C++的模板需要有深入的学习,还有数据结构的知识。

shuguang1985 发表于 2023-10-3 19:24:37

因为C++不能赚快钱,投入时间长,且对学习的人综合能力要求高。
我就随便说一下综合能力要求高是怎么回事吧。很多即使即使学了C++,也不知道能干什么方面的工作,因为C++的工作各门各类数量众多,且差异很大,于是就有人造出梗,说C++方向唯一的共同点就是使用C++。
这个说法没错,但是很多人没深究,也不知道如何深究。那么学习C++到底如何找工作呢?很简单,说穿了不值一毛钱,就是先找一些你想去的公司,作为目标公司,就像高中的时候填志愿一样,其实高一高二大家都有意向了。目标公司的招聘要求里面非常清楚地写出了该公司需要的技术栈,照着那个要求去学就行了。
比如说某公司的C++后台开发,要求是这样:
1.计算机、通信相关专业本科以上学历;2 年以上 Linux 后台开发经验;
2.编程基本功力扎实,精通至少如下一门编程语言:C/C++、Python、Golang、PHP;
3.精通TCP/IP协议相关知识及网络编程;
4.熟悉常用算法、数据结构、设计模式、多线程、分布式等技术;
5.熟悉DB操作;
6.对新技术敏感,求知欲强,能快速学习并具备较强的技术领悟能力;
7.有强烈的上进心和责任感;具有良好的逻辑思维、语言表达能沟通力及团队协作精神;比如某公司的ue5游戏客户端,要求是这样:
1.计算机相关专业本科以上学历,5年以上游戏行业客户端开发经验;
2.熟练掌握Unreal Engine构架及相应的工具整合、开发;
3.熟练掌握C++语言,熟练掌握Unreal C++;
4.具备良好的算法和数据结构基础知识;
5.对Gameplay、网络同步、UI框架、工具链等各个游戏开发相关领域有一定的了解;
6.有一定的ARPG游戏开发经验;
7.具有良好的团队合作精神、沟通协作能力、复盘总结能力,具有较强的自我驱动力;技术方向已经很清楚了,按照这个学就简单了很多。
容易学的东西一定卷,其实很多人不是不明白这一点,他们只是想赚快钱,捞几年再说。
不过总有些人会迎难而上,就像我,当初选C++就是听说它难,所以才选。回头去看,非常明智的选择,C++的确不能赚快钱,但是可以赚很久的钱啊,而且收入又不低。
某些人杞人忧天,说C++后继无人,我每年都招聘应届生,仅985/211里面学C++的就大有人在,知乎上也有不少年轻人和我交流过。我觉得C++再火20年没任何问题。

zhl5025 发表于 2023-10-3 19:25:21

我来知乎7年了。c++标准都从98 提升到20了。
我看到很多人回答痛点获得了不少赞,我也很眼红。
也有很多人说其他语言简单,容易,被赞了。
也看到很多人说其他语言岗位多,好找工作,被赞了。
我眼红了,也想回答被赞。结果呢?我想了想,却回答不出来。因为我没有办法证明我学了c++之后变得智慧了。也没有什么作品,能否跟现成的功能库媲美,我甚至轮子也不想造,我本来就是过客,一个游客。我甚至搬运都不想搬运,我就只想静静地看着,然后敲击代码。
此刻,我不论说什么,大家都不喜欢看,原因是必有面向对象思想,延迟调用和计算,赋值,以及异步协程,模块化,工程化,以及各种设计模式和框架在里面,这么复杂的东西,我都不想说,毕竟还要从发展和迭代的角度来思考问题,任何一个叶节点随时都可能扩展成一个分支。
而且还有不少仿函数,仿指针,trait和policy,更有甚者,匹配失败不是错误,更是开启了新的编译期玩法。
我曾经试图,改变一下目前的困境,尝试引入行为树,和算法可视化,也依然没有改观。
于是想要通过游戏模拟器来贴近工程,结果不论是wii模拟器还是ns模拟器都要求vs2022,还得有网连接github,接着呢?就发现wii模拟器的耦合很重,想要切割一个wiimote手柄操作的模块出来,结果关联了50多个文件。结果浪费了不少时间。
后来想想这些毕竟有些落后,于是想搞一下HoloLens的开发,结果兴致勃勃,发现c++版本的sdk好像被抛弃了,只有c#的版本更新的好好的。面对这样的窘境我也知难而退了。
于是我只能退回到传统的游戏领域,萎缩发育了。
整体环境就是,如果有师兄弟,学c++非常好,单打独斗的话,就像我这样的,只能耐得住寂寞了。

http://picx.zhimg.com/v2-4c8703e6e463e60a3ab9534b37d23548_r.jpg?source=1940ef5c
页: [1]
查看完整版本: 为什么大家都怕学C++?