找回密码
 立即注册

为什么 C++ 是最难学的编程语言?

5
回复
132
查看
[复制链接]

11

主题

39

回帖

90

积分

注册会员

Rank: 2

积分
90
来源: 2023-12-21 09:21:40 显示全部楼层 |阅读模式
为什么 C++ 是最难学的编程语言?
回复

使用道具 举报

8

主题

30

回帖

55

积分

注册会员

Rank: 2

积分
55
2023-12-21 09:21:49 显示全部楼层
以常用的json为例,前端和Java想读写json容易吧,你用C++试试,看几本C++书,一个json的C++开源库你都不知道怎么用。
不是C++难,而是C++生态对新手极其不友好,很多人学完C++ Primer啥的也就是会背几个面试题。
回复

使用道具 举报

64

主题

36

回帖

232

积分

中级会员

Rank: 3Rank: 3

积分
232
2023-12-21 09:22:44 显示全部楼层
C++最难学?
知乎上各种一周内学完C++、两个月精通C++的可太多了。。




在个人看来,45天C++最多入个门,
学会?
抱歉,确实不太可能。
C++难学是互联网 IT 界公认的,不信看看下面。




45天学会它,抱歉,真的不太可能。
虽然现在出了个 rust 语言也挺难学的,不过还是比不了 C++ 难学。
那么问题来了,C++既然这么难学,难学在哪里?为什么大家还要学它呢?
来看看那些C++大佬们的回答吧
来源:为什么C++是最难学的编程语言?https://blog.csdn.net/qq_43351159/article/details/88955034

  • C++设计理念本身想通过各种规则克服C语言里面由于语法规则不清晰导致在运行过程中出现的一些错误,这下让初学者倒霉了,很多初学者在学到泛型编程会觉得编译过去太费劲了,好多条条框框卡的死死的,必须要按照语法规则走才能进行下去,而且就语法细节来讲,零散的需要掌握的细节多如牛毛,有的程序员已经做了好多年对于有些C++语法规则还是觉得陌生的很。
  • C++语言的更新速度也是相当惊人,其语言本身还在进化,其实大家还在学着一门还在不停升级到编程语言,而且还会出现这种情况,等你费了九牛二虎之力掌握了一些语法细节之后,发现新的更新完的时候,已经把之前的都丢弃了。
  • C++也是可以操作指针,本身指针已经很具有复杂性,再加上泛型编程,整个更加热闹了,既追求性能的极致化,还想编程模式灵活性,背的担子异常沉重,以至于很多人在学完C++之后,再去学习C语言会感觉异常的轻松自如,突然有种解决的感觉


其实还有一种观念让大家认为c++比较难学。
其实很多C++语法学习不是让你如何去使用,更多的是告诫你不能怎么用,这是最难受的。
大多数时候你学了一堆语法发现不能立即用上,还需要在特殊的场景才能使用上,对于绝大部分对于这门编程语言还没熟悉之前,算是一种精神的折磨。
为什么大家还要学习C++?
1、C++是很多架构师的最爱,也是很多编程大咖的最爱,记得十年前在某著名编程网站的论坛里面,特别是C++论坛里面经常见很多C++大咖在里面指导江山,很多小白忙活了半天的代码,让大咖几句话搞掉,在真正掌握这门编程语言,并且深深的掌握其内在规则之后,使用起来会感觉特别舒畅,仿佛把之前所有的阴霾一扫而空。
2、现在很多有名的软件框架都能看到C++的影子,其实很简单,在进行面向对象的框架设计还能不影响效率首选只能是C++,现在大家使用的安卓手机的框架层很多代码都是C++,还有大家天天使用的浏览器内核代码几乎全是C++,在很多领域C++有着不可比拟的优势,学会了会明白为啥这门语言属于编程语言的王者,为什么有这么多人学不会还要硬着头皮继续学,可以说C++是一门啃着最有滋味的编程语言,痛苦并快乐着。
你会发现等你把C++用熟练了,再去学习别的语言,那感觉爽呆了。
它难在你因为很懂它,最后还不知道为啥莫名其妙的生气。 c++最大的缺点是让你花费大量时间学习这门语言的语法上,而不是解决问题本身上。
这个世界本来就是残酷的,所以你不能怪C++向你展示了世界的本质 大家都觉得很难等你攀登到高峰的时候发现,原来前面还有比这更高的山峰,等着你去继续攀登。


说到这里,分享一下我自己以前准备校招过程中做的一些学习笔记,比如C++、计算机基础等的笔记分享给你,也正是因为这些笔记的存在才顺利拿到的字节跳动SP的offer!
普通双非学校出身的我是如何拿到抖音研发岗SP的?C++的知识点有以下这些比较重要的,比如说;

  • C和C++的区别:C++面向对象,C面向过程;输入输出流不同:C中使用printf与scanf等;C++使用类如cin、cout;C++中使用new/delete代替C中的malloc/free
  • 迭代器:随机访问迭代器、双向迭代器、前项迭代器
  • C++11特性有哪些
  • 类与对象:struct/class对比;友元类与友元函数;六个默认成员函数中又包括:构造函数(缺省构造函数、explicit、初始化列表)、拷贝构造函数、析构函数、类和对象的知识点还包括:inline内联函数、类的静态成员、类和对象的实例化
  • 模板:主要分为类型、模板特化、模板参数列表、分离编译等,其中又涉及函数模板、类模板、全特化、偏特化等关键知识点
  • 再比如多态,其中可分为多态类型、对象类型、绑定类型,其中多态类型又可分为静态多态和动态多态,其中静态包括函数重载和泛型编程,动态多态则包括虚函数、覆盖/重写和虚表的知识;
  • 对象类型包括静态类型和动态类型;绑定类型又分为静态绑定和动态绑定,前者是编译时期决定,后者是运行时期决定
  • 内存管理:new/delete/new[]/delete[]四个关键字,operator new/delete、operator new[]/delete[]这些函数,以及new/delete的调用过程
  • STL:容器、迭代器、容器适配器、仿函数、算法等知识点,
以前就写过C++学习路线


Linux C/C++ 方向自学路线,万字长文为小白新手打造 | 已拿字节后端研发offer这里我简单把以前的学习路线中比较不错的内容摘录一下。
学习完 C++ Primer 能做什么项目练手或者看什么好的开源项目源码?经典好书
好书之所以经典,是因为它在时间的长河中经过一代又一代人的打磨,留下来的才是大家最想要看的干货。

  • 《C++ Primer 第五版》
  • 《Effective C++》
  • 《STL源码剖析》
  • 《深入探索C++对象模型》
校招的话这几本书基本就够了,可以包括C++语言和C++下STL中的底层原理。
如果你还感兴趣的话可以接着去看《C++沉思录》之类的经典好书。
在我自己学习计算机的过程中,慢慢的养成了收集书籍的爱好,再加上前段时间从一个电子书网站上收集到很多的计算机经典图书PDF书籍,网址是这个:https://www.pdf246eook.com,貌似现在已经停服了。
不知不觉间我已经收集超过 1000 本,吓了一跳!!
现在已经分享在github上了,这可能是整个GitHub上最全的计算机经典PDF仓库了。
其中涉及C/C++、Java、Python、Go语言等各种编程语言,还有数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经等~


史上最全!免费分享!这可能是github上最全的计算机电子书仓库了视频推荐
当然了,不是所有的同学都能够静下心来啃书的,通过视频来学习C/C++也是一个不错的选择。
侯捷老师的经典视频有很多,侯捷老师真的是C++方面的大师级别的人物。
重点推荐侯捷老师的几门视频,比如侯捷C++系列视频 (C++面向对象开发、STL标准库与泛型编程等)
[侯捷]C++ STL 体系结构与内核分析--从平地到万丈高楼_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![图标](https://pic4.zhimg.com/v2-2f9505b50394483c7808e618e1bda2d3_180x120.jpg)侯捷C++手把手教学(上),适合新手_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![图标](https://pic4.zhimg.com/v2-e6a95ac1a894fc06edc829584d4b1ebb_180x120.jpg)侯捷手把手教学C++(下)已补充完毕_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![图标](https://pic1.zhimg.com/v2-e4fb1a4e56fe0e27d45d4f8fd331ed48_180x120.jpg)[侯捷]C++内存管理--从平地到万丈高楼_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![图标](https://pic1.zhimg.com/v2-6d3df8d98b46e949e959366b30f9c050_180x120.jpg)[侯捷]C++程序的生前死后--解密 CRT Startup code_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![图标](https://pic3.zhimg.com/v2-8a3949214b9d7b5c17d5548b95627dca_180x120.jpg)

这些视频以前我就保存过来着,后来听说B站将这些视频全都下架了,我又把这些视频全部上传到A站和CSDN上去,没想到后来也被下架了,还好最后找到一种方式分享这些视频,如下:
【知乎】侯捷C++系列视频全集  |  陈硕网络编程系列视频全集这几门视频,是想要学好C/C++的必看视频!侯捷,YYDS!
<hr/>写了这么多手都酸了,如果我的上述回答对你有所帮助的话,帮@阿秀学长点个赞吗,感谢!
卑微求个赞ing。。。算了,再给你分享一个宝贝吧,这回应该总不会白嫖我了吧,一个赞就足够!


最近发现三位谷歌大神写算法刷题资料,支持Java、C++、Go三种语言,其中对于面试中考察较多的链表、树、动态规划、数组等知识点讲解的都很全!如果你算法能力比较弱,比如互联网大厂面试中手撕算法比较差的话,那要好好看看了。
免费下载!超越100%!谷歌出品的三份LeetCode刷题笔记!!支持Java、C++、Go三种语言!推荐阅读

最后再送上一些干货,下面是一个高赞回答合集,建议你点赞&收藏,千万要Mark住啊,丢了可能就找不到了,因为你大学学习计算机期间绝对用得上,其中有好几个都是收藏过万的回答。
记得收藏的时候帮学长 @阿秀 点个赞呀!!不要只收藏不点赞啊, (๑•̀ㅂ•́) ✧ 拒绝白嫖,人人有责!
如果有计算机学习、校招求职、考研、读研感兴趣的小伙伴也可以点击下方卡片关注下阿秀鸭
拓跋阿秀​www.zhihu.com/people/tuo-ba-a-xiu一直致力于分享计算机学习、校招相关、硬核技术等,让你们不再让我走过的弯路!
1、如果你也是准备校招的同学,可以看下这里,这是一些前人总结的历届校招上岸分享文章汇总。
这是由字节跳动、阿里、腾讯三位计算机学长共同维护的计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)&计算机校招历届上岸分享合集,已经开源到github上了。
最新版!计算机校招历届上岸互联网中大厂分享集锦最新版!计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)2、学习编程其实没你想的那么难,完整复盘我系统准备校招&自学的那一年,好好阅读下去,对你肯定有所帮助。
你的编程能力从什么时候开始突飞猛进?3、对于一些想要转行或者读研的朋友,下面两个回答肯定能帮到你!
计算机学校期间如何发力,才能毕业后冲击30-40w年薪的offer ?学校生涯还剩两年,学C++(达到可以找工作的标准)时间够用吗?4、如果你决定不了到底学习C++还是Java,不妨来看看这个回答!还有就是建议多看经典书,而不是什么《七天教你学会Java》、《21天C++从入门到精通》系列,这类型的书完全是浪费时间,让你走歪路!
如果一定要在C++和JAVA中选择,是C++还是Java?有哪些你看了以后大呼过瘾的编程书?5、Linux C/C++ 方向自学的完整路线,很多人不知道学习完 C++ Primer 能做什么项目练手,这个回答不可错过!
拓跋阿秀:Linux C/C++ 方向自学路线,万字长文为小白新手打造 | 已拿字节后端研发offer387 赞同 · 16 评论文章学习完 C++ Primer 能做什么项目练手或者看什么好的开源项目源码?6、如果你准备时间不多,就抓住重点,在最短的时间内搞定必要的数据结构和算法而去面试
如何在最短的时间内搞定数据结构和算法,应付面试?7、我自己在学习计算机过程中看过的优质网课,这些精品课程你的大学四年绝对够用了。
数据结构,计算机网络,数据库,计算机组成原理,操作系统有哪些好的网课值得推荐?1130 赞同 · 25 评论回答

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

9

主题

22

回帖

52

积分

注册会员

Rank: 2

积分
52
2023-12-21 09:23:08 显示全部楼层
C语言和同时代的很多语言一样,都是为了解决所有的问题而设计的,而大概是从java之类的语言开始,一种语言变成了为解决特定场景的问题而设计。
C++(比java还早)想兼容C,也就是能够解决所有的问题,同时又尽可能包容其他语言的特性,这种既要又要的想法把C++弄成了一个臃肿的缝合怪。我日常用C++哪用得到那么多语法特性?可是稍微要用一下的时候编译器报错不留情啊,我还能咋办?
于是,能用别的语言解决问题的场景都不会用C++,只有不得不用C++的场景才用,而这些场景往往本身又很难。那些光栅化、着色器、驱动、内核对象、编译优化、bootloader、代码注射,哪个不是难得令人发指?C++那点语法在他们面前就是个弟弟,起码网上有许许多多C++资料可以查。
<hr/>更新一下,C++的难学在于语法的历史包袱太重,可能很小的一点就牵扯到很多历史,搞清楚吧太费事了,不管他吧没头没脑的来这么一条规则,记不住,下次还犯错。但是抱怨C++难的人很多,正好说明学C++的人和用C++的人多,你看做光栅化、优化内核的、做编译器的,就没什么人抱怨技术难,因为学的人少,做那个领域的人少。
回复

使用道具 举报

6

主题

28

回帖

47

积分

新手上路

Rank: 1

积分
47
2023-12-21 09:23:47 显示全部楼层
因为到目前为止,几乎所有的教材(尤其是中文的),都在以炫技的形式,来告诉你  “你看,我作者掌握了这个技巧“。

但其实,你也可以使用C++最简单的部分。在工程上,大家吐槽最多的“C with Class”,恰恰是一个非常实用的编码风格。

大部分人写的代码,都到不到“库”的高度,滥用特性就是给自己添堵。
回复

使用道具 举报

30

主题

29

回帖

115

积分

注册会员

Rank: 2

积分
115
2023-12-21 09:24:45 显示全部楼层
个人觉得cpp最大的问题就是缝,简直就是一个超级缝合怪。但它最成功的,也是它缝……

  • cpp的表达能力太强,至于如果合理抽取的话,估计不到1/10的语法就能组成一个完备的语言。反过来说,同样的功能你可能会见到10中不同的写法。
  • 语言版本过多,c++从11到现在的20,基本没几年就是一个新版本,不少语法糖和特性都有微调。但这不是最大问题,因为cpp的本质是一套规范或者是是协议,官方不会像python或者java那样有一个“官方解释器”(或者“官方编译器”)的,这也就造成编译器的实现方从Microsoft的msvc,GNU的gcc,llvm的clang,甚至是Nvidia的nvcc都在实现上有些许差别。你不能拿一个编译器编出来的结果来说,这么写是对的或者错的。
  • 性能ptsd,组委会日常和性能杠上。像是c++20中的协程,为了性能最终选择了堆实现,因此要写协程程序只能从底层造轮子(估计c++23出了支持库以后会好很多)。

而最糟糕的是,这几点也是cpp功成名就的核心。
强大的表达能力是的库的作者可以做出很多特殊的操作来优化代码,比如Eigen中的惰性远算和编译时展开,或者通过重载operator—和operator>创造出新的—>运算符。
允许不同厂商对规范进行微调,使得即使是cuda这种跑在gpu上的代码也是给予cpp的框架写出来的。
对于所有地方性能上的执着也使得cpp有着很高的优化潜力,很多cpp的程序进行过良好优化的话可以比python等高处10几倍的性能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
商业洽谈 文章投递 寻求报道
客服热线: 400-113-0968
关注微信