学C++该用哪些网站?我把自己踩过的坑也说清楚
有一回我跟一个想转行的朋友聊天,他说在网上搜C++教程,搜出来几百个,不知道从哪个开始,最后干脆一个都没打开。
我完全理解这种感觉。C++本身已经够难了,选个学习资源还要再焦虑一圈,确实劝退。
所以我写了这篇。不是什么"十大权威推荐",就是用过的就说,没用过的不说。这里面有些我现在还在用,有些帮我渡过了某个阶段之后就换掉了。仅此而已。
但在说网站之前,有一件事得先聊。
学C++最怕的不是难,是顺序乱
我见过太多人一上来就找"C++进阶教程",结果看两天模板元编程就放弃了。顺序不对,越学越懵,这跟天赋没什么关系。
一个比较靠谱的路子是这样的:
先语法基础,再面向对象,然后STL,然后数据结构和算法,最后是系统编程和更深的语言特性。
就这么简单。不用背,但大致的顺序别反。基础没打好就往后走,等于地基没干就往上浇混凝土——后面学得越多,塌得越狠。
至于要学多久……我不想给你一个"10个月精通"的虚假承诺,这种承诺说出去大家都清楚是假的。每个人背景不一样,每天能投入的时间也不同。我只给一个大概的参考:如果你每天能拿出两三个小时,从零到能去找工作,大半年到一年。在校生整天都在学的话可能会快一些。持续推进比什么都重要。
这几个网站是我真实用过的
没有排名,按适合的场景分类。
如果你是纯小白,从菜鸟教程开始
菜鸟教程特别适合零基础——不是因为它最好,是因为它最不会劝退你。界面简单,内容直接,不用装任何环境就有在线编辑器可以直接跑代码。
我自己刚开始学的时候就是在菜鸟教程上把基础语法过了一遍,不求全懂,先混个脸熟。这个"混个脸熟"的过程其实挺重要的,有了基本的语感再去啃厚书就不那么痛苦了。
缺点也很明显:深度确实有限,指针讲得比较浅,面向对象部分点到为止。所以用它起步可以,但别指望靠它走到终点。
想系统吃透一门语言,绕不开C++ Primer
严格来说这不是网站,是一本书——蓝色封皮的《C++ Primer》第5版。中文译本几十块钱。
我第一次读的时候有种被"打回原形"的感觉,原来之前自以为懂的东西其实理解错了。它好就好在每个概念都掰开了讲得非常准确。网上很多教程为了"通俗易懂"做了大量简化,有些简化其实已经跑偏了。看完这本,你对C++这门语言会有整体而准确的理解。
别从头当小说看。每看一章就大量做习题,用习题检验自己到底有没有真的吸收。
看不懂文字的时候,去B站看尚硅谷
有些东西光看文字就是抽象,面向对象那块我当初看教程看了好几遍还是糊的,后来去B站找了尚硅谷的C++视频,听着人讲一遍突然就通了。
这套教程免费,内容从变量定义到项目实战都有覆盖,质量在我看过的免费视频里算很高的。
但看视频有一个陷阱——"看懂了就等于学会了"。我跟你说,看懂和会写之间的距离,就是你该敲多少行代码的距离。看完就动手,别偷懒。
日常开发查资料,直接收藏cppreference
这个严格来说不是教程,是C++标准库的官方参考文档。但它是所有C++开发者的标配书签。
学C++你会遇到无数"这个函数到底怎么用""这个容器复杂度到底是多少"的问题。去搜博客?查Stack Overflow?都不如直接查这个。它是最权威的,更新也最及时。
初学者可能觉得它太干了,没人味。但养成"不确定就查文档"的习惯,从第一天开始就不晚。
要找工作?LeetCode刷起来
国内大厂面试几乎必考算法题,很多人用C++刷。如果你的目标是找工作,这块逃不掉。
关于刷题我有自己的看法。很多人追数量,说要刷三百题、五百题。但我觉得质量比数量重要。一道中等题你自己独立做出来了,比看答案"看懂"十道题有效得多。力扣题解区质量普遍不错,做完看看别人的思路也很好。
没有捷径,就是一道一道来。某道题卡了两三天很正常的,突破过去之后你会有明显的提升。
GitHub不只是存代码的地方
有了一定基础之后,看优秀C++源码对提升编码水平的效果比看任何教程都大。
几个我觉得值得看的项目,都是我筛选过的:
C++那些事——一个中文的C++学习指南仓库,整理了学习路线和面试要点,适合入门之后梳理知识体系。
TinyWebServer——用C++写的高性能Web Server,代码量不大,后端开发的核心概念基本都覆盖到了,很适合学习。
muduo——陈硕写的网络库,配合他的《Linux多线程服务端编程》一起看会很顺。
看源码有门槛,不适合新手一上来就啃大项目。先看小的、结构清晰的,有了感觉再去碰大型项目。
写代码遇到问题,去Stack Overflow找答案
这个应该不用多介绍。写C++程序遇到问题,大概率Stack Overflow上已经有人踩过同样的坑了。
但它不只是个"搜答案"的工具。上面有很多高质量的讨论,不少回答是C++领域大牛写的,他们的解释有时候比教科书还清晰。我有时候没事会去翻一些C++话题的高票回答,经常能学到意想不到的东西。
有一点小提示:提问的方式很重要。描述清楚、附带最小可复现代码的问题,被回答的概率比随便贴一段报错要高得多。
进阶阶段可以考虑极客时间
如果你已经有了一段时间的C++实际开发经验,想往深了走,极客时间上有几个专栏可以的。
吴咏炜的《C++实战高手课》讲得比较深,会从语言设计的角度解释一些你可能一直困惑的东西。王争的《设计模式之美》不是C++专属,但设计模式这块是做C++开发躲不过去的。
这里我要说一句不太好听的话:付费专栏这种东西,买之前想清楚。免费资源看完之后确实还需要深入再去买,别一开始就冲动消费。很多人买了之后也没看完,浪费钱还给自己制造焦虑。
找工作阶段集中用牛客网
如果目标是找C++开发的工作,牛客网是国内绕不开的平台。大量真实的公司笔试题和面经,针对性很强。
但在准备面试的阶段集中用就好,别平时一直在上面刷专项练习。刷题练的是应试能力,真正决定面试过不过的还是你对C++语言和计算机基础的理解深度。日常积累比临时抱佛脚重要得多。
英文还行的话,LearnCpp.com是个好选择
如果你英文过得去,这个网站系统性和质量都非常高,从最基础的概念讲起覆盖到现代C++特性。一直在更新维护,C++17/20的新性也有涉及。
它的写作风格是手把手教的类型,每章后面还有练习题和答案。我看过的英文教程里,这个对初学者最友好。
说几个真正有用的学习方法
上面推荐的这些网站各有侧重,但学C++的核心方法其实就那么几条:
写代码,大量写代码。 看十遍教程不如自己写一遍。就算是最简单的Hello World,也只有你自己敲出来的时候才算是真的运行过。
遇到Bug先自己调试。 写C++程序不出Bug是不可能的。先自己花时间分析,用调试器和打印日志来定位。这个过程痛苦但成长最快。实在搞不定再去找人问。
尽早开始做项目。 纯学语法很无聊而且容易忘。有了一定基础就去找个项目做——可以是小工具、小游戏,或者把TinyWebServer重写一遍。做项目时你会发现很多自以为懂了其实没懂的东西,这才是真正进步的时候。
别同时看太多资料。 这是我踩过的最大的坑。资料看多了会产生"我学了很多"的错觉,但每一本都没学透。选一个主线资源认真跟下去,有余力再参考其他的。
C++值不值得学?
经常有人问我这个问题。我的回答一直是:取决于你想做什么方向。
操作系统、游戏引擎、高性能服务、嵌入式系统、自动驾驶——这些领域对性能要求极高,短期内没有别的东西能替代C++。想进这些方向,C++很值得投入。
但如果只是为了找份工作,对系统级开发没什么特别的兴趣,那Python、Go、Java这些入门门槛低很多,就业面也更广。不是说它们更好或更差,只是不同场景有不同的合适选择。
还有一件事我觉得值得说:学C++的过程本身会让你对计算机底层建立比较深的理解。指针、内存管理、编译链接这些概念,学过C++之后再去看其他语言会有不一样的感受。将来你主要不用C++写代码,这段经历也不会浪费。
最后聊两句
学C++是一段不短的路,中间肯定会有想放弃的时候。我当年差点放弃了两次——一次是学指针和内存管理的时候,一次是看STL源码的时候。每次都是硬着头皮啃过去之后,发现其实也没当初想的那么难。
没有什么秘诀,大概就是:别跟别人比速度,别追求每个细节都完美理解,别害怕写出烂代码。代码是改出来的,能力是一步步积累出来的。
开始就很好,不如开始就好。
如果你正在学C++或者打算开始学,希望能帮你少走一些弯路。