c++ 确实比较难,难在它的语法四不像,还有很多陌生的概念,比如友元函数、智能指针、const 关键词(使用点确实很多,用在不同的地方作用也不一样),但是这并不妨碍我做东西;
从业者跟学生面对学习 c++这个问题的切入点也不一样,传统学习方法是先语法、后模仿,但是工作的时候并不会留很多时间让我们深究语法,这个时候就需要摈弃将所有语法全部吃透的思想,而是缩小学习成本、带着目标去学习;
所以我的学习方法可能并不适合所有人,至少我是这样认为的;
0 、调整畏难心态
大家都看过《倚天屠龙记》吧,赵敏武当山上围攻明教,张三丰教张无忌太极的时候说过一句台词:"无忌,你忘记了吗",这句话其实是在打消我们的抵触心态(因为我都掌握其他技能了,为什么还要学这个),为学习新技能放下心理包袱,摈弃抵触心理;
1 、降低学习成本
我接触 c++的契机是因为项目需要做高性能推理,这个项目是基于 Nvidia tritonserver 的二次开发项目,所以我是直接 git clone 项目源码,然后通过我自己提出来的最小范围学习法用最快的时间吃透语法,实时上我学习语法只看了两个文件,metrics.h 和 metrics.cc ,并切通过 ChatGPT 帮助我理解不懂的语法,理解后的语法我会一行一行注释到源文件当中,因为人脑接触并消化知识的速度并不快,而且艾宾浩斯遗忘曲线告诉我们大脑并不可靠;
为什么我可以快速降低学习成本:
1 、Nvidia 是一个非常牛的科技公司,这个开源项目配备的团队、人员都是顶尖高手,所以他们开源的项目编码规范肯定是统一的;
2 、看的开源项目多了,你就明白 github 上大公司的垃圾项目很少;
2 、加一行 log 打印试试
这个步骤其实是寻求正向反馈的时机,不要小看这一行 log 哦,这是进行二次开发的第一步,等项目开始运行起来,并且你新增的代码生效的时候,你已经迈向成功一大步了;
3 、善用 GDB
通过开源项目学习一门新语言是最快的,而开源项目最让我们头疼的是代码量极大、逻辑及其复杂、老外写代码的组织方式完全看不懂;
这个时候如果单纯通过静态代码走读的方式去学习,很容易就疲惫了,再加上如果结构体繁多、逻辑计算复杂,很容易就迷失在代码泥潭当中;
最好的方式是让程序运行起来,了解程序当中的对象状态变化、数据流变化、程序逻辑,这可比打日志、重复编译来的快多了,因为打日志你也得先走读代码后再改对不?
GDB 是快速熟悉 C 、C++项目的利器,完全无脑运行,仅仅通过 start 、next 、step 等命令就可以清晰的了解到程序的执行逻辑;
这里我推荐大家可以去看下我先前录制的 GDB + Tritonserver 二次开发的 B 站视频,里面都是干货,并且一个视频大概在 10min 左右,非常方便大家在闲暇时间观看;
学会 GDB ,其实就是庖丁解牛开源项目的钥匙,哪怕你不懂 C++、C 的语法、你也能吃透一些难度不是很高的项目,比如 redis 、mysql 、etc ,再者说现在有了 chatgpt ,新语言语法已经不是阻碍工作效率的因素了;
https://www.bilibili.com/video/BV1Sa4y1u75B/?spm_id_from=333.999.0.0&vd_source=656744c41a3722465ea40d259c4ac89a
https://www.bilibili.com/video/BV1Tu411a78V/?spm_id_from=333.788&vd_source=656744c41a3722465ea40d259c4ac89a
https://www.bilibili.com/video/BV19s4y1k7EN/?spm_id_from=333.788&vd_source=656744c41a3722465ea40d259c4ac89a
当然还有 Golang 相关的专题大家也可以看看:
https://www.bilibili.com/video/BV1sU4y1i7uB/?vd_source=656744c41a3722465ea40d259c4ac89a
https://www.bilibili.com/video/BV1HB4y187jB/?spm_id_from=333.788&vd_source=656744c41a3722465ea40d259c4ac89a
https://www.bilibili.com/video/BV1gT411n7kb/?spm_id_from=333.788&vd_source=656744c41a3722465ea40d259c4ac89a
B 站个人主页:
https://space.bilibili.com/1897036286?spm_id_from=333.999.0.0
欢迎大家一键三连~
如果你也喜欢编程,并且想成为一名全栈工程师,可以加我 vx coder-bofengwa,我拉你进群,我建立了一个 B 站粉丝交流群,欢迎大家畅所欲言;