C++科班学习路线

Huan Lee Lv5

参考github

找资料

推荐几个网站

顺序,从上到下依次学习,尽量不要跳跃

计算机导论

  • 计算机科学导论

    • 书籍

      • 《计算机科学概论》

        • 导论,就是一个目录的作用。我建议学计算机之前先看看,看不懂不要紧,有个大致的印象就差不多了,本来也是起一个计算机系目录的作用,不用对目录的每个名词都刨根问底,以后有的是机会。一共只有三百多页,已经算很少了。
  • 软件工程导论

    • 书籍

      • 《软件工程:实践者的研究方法》

        • 不建议初学者读,不建议大部分人读,六百多页,很花时间,内容和知识太多太繁杂,确实也算是软件工程SE的目录,但更适合等你其他必修课学完之后,再确定好以后做软件工程的方向,并且开始工作之后,再读这本书,书里的知识绝大部分更偏向于工业实践,在学校里面,读了意义也不大,大概率无法理解。可以直接跳过,但是确实软件工程导论已经没有其他书可以推荐了,软件工程本来就是从计算机科学与技术里面细分出来的分支,不要对这门课要求太高。

基础类(必看)

  • C语言

    • 书籍

      • 《C程序设计语言》

        • C语言这种书,要学深入了,可以推荐很多书,但是这里我是把它当作本科第一门编程语言来学习的,所以没必要学什么特别厚的书,这本就够了,学学语法,熟悉一下学一门语言大概有哪些的东西,写一点迷你程序就够了,最重要的是:

1、学习指针,了解到了内存管理最基本的东西,给你以后学操作系统课程有一个印象。
2、学习从代码到可执行程序,了解整个代码到生成产物的过程,给你以后学编译原理埋下伏笔。

所以要我说初学者学C语言的目的是什么,我觉得是学语法感受编程、学指针感受内存管理、学编译感受从代码到执行。

  • 简单面向对象语言(C++为例)

  • 数据结构

    • 书籍

      • 《数据结构(C++语言版)》

        • 学习数据结构,语言不是什么问题,用什么语言都可以学习数据结构,用C、C++、Python、Java都可以实现各种各样的数据结构,为什么这里用的教材语言是C++的,纯粹是因为我暂时没有找到其他语言更好的国内教材。
  • C++系统性学习

    • 书籍

      • 《C++ Primer》

        • 听我先说啊,这本书800多页,非常厚,而且是工具书、字典那样的,其实根本不适合新手入门去学习面向对象技术与方法。

为什么这里就推荐这个书,最大的原因是数据结构教材,用到的语言是C++,当然也有用C语言的,但是我没找到特别好的书,所以没有办法,只能让大家先看看C++,大部分初级工程师在使用C++的时候,也只用到了面向对象的特性,很多高级特性都用不上,模板都用得很少,真的就是写ifelse而已。

这本书非常厚,不管是第一次学C++还是第N次学C++都要看,所以我推荐你们,先去什么类似菜鸟教程那样地方,先把C++大概的内容过一遍,那个应该很快就能过完,然后你过完之后就去看我接下来介绍的以C++为语言的数据结构教材,如果你看不明白,发现有不懂的C++的地方,你再去看这个C++ Primer,不要把C++ Primer当作是那种,看完了书,就再也不翻了,不会的,你会经常、一直去翻它。

  • 计算理论与算法分析

    • 书籍

      • 《算法设计与分析基础》

        • 我们计算机系上的课,是计算理论和算法分析,这里只推荐了算法分析的教材。因为计算理论那里面的什么图灵机的构造,图灵完备性证明之类的,更偏于理论,你们肯定学起来也枯燥,觉得没意思,那是属于计算机系开天辟地级别的知识,如果有兴趣,可以自己去找相关的书来看,我就不推荐了。
        • 主要是本科教材要么找不到,要么就是写得比较一般,网上又推荐什么算法导论纯粹来搞笑的,这本算法书挺好的,但内容确实也挺多的,确实是我之前视频说的课程算法。我看了目录,就勾起了我大二的回忆,希望大家不要怕这本书太厚太多,还是可以看看的,实在不能理解的内容,跳过就好了,以后再来理解。
  • 数据库原理与设计

    • 书籍

      • 《数据库系统概论》

      • 《数据库系统概念》

        • 数据库是真的不好推荐,国内的教材和国外的教材其实是两种思路,国内是把你当天才,很多东西默认你懂,或者是一句很简单的话直接带过,觉得你理解了;而国外的教材就是把你当傻子,讲得非常细,非常多,就像是把上课的时候学生提问都记录下来了。从页数也可以看得出来,一个400页,一个800页,当然这是概论课,不会花大心思给你讲MySQL怎么用,MySQL只是理论的一种实现框架罢了,大学教这个不是为了让你去打工当后端,而是看你是不是对数据库研发感兴趣,以后没准你就选了这个方向。

这两本书就是国内外大学教材的一个经典对比

所以到底你们更喜欢哪种教学方式呢,这个取决于你,当然了,我大二学的是国内的教材。

进阶类(必看)

  • 操作系统

    • 书籍

      • 《操作系统导论》

      • 《操作系统原理、实现与实践》

        • 进阶类的操作系统,可以看的书特别多,你去豆瓣上搜索操作系统四个字,有特别多经典的黑皮书,我这里全都推荐的话,入初学者肯定是看不完的,所以更多还是推荐一些导论类的课程,等你们看完了,学完了,再去看那些黑皮书,其实就挺好的。

这里的国内那本,最大的优点是章节分得很清晰,界限分明,非常像我大三学的那门课的样子,可能也是因为国内的教材设计是一脉相承的,我觉得挺适合一开始看这本的。

国外的那本,章节可能分得不是很清晰,但是循序渐进,短小精悍,讲的细致的地方也更多,典型国外教材风格。

不知道你们到底适合哪种,所以都给你看介绍一下看看。

  • 计算机组成原理

    • 书籍

      • 《计算机组成原理唐朔飞》

      • 《计算机组成与设计硬件/软件接口》

        • 计组本身就是软硬件都有的课程,一开始找这种讲整个体系的书的时候,就特别累,因为确实很难兼顾自学,同时又要书还不错,保证一定的深度,比较难搞。

大学的时候学的书,基本都是学校老师写的教材,或者是上面那种样子的书,高等教育出版社,几乎都是一模一样的,看你感觉自己喜欢哪种书吧。这个书,其实想做软件工程,尽快找个工作,转码,确实也不是必须看的,和计算机体系结构、汇编、编译原理一样,面试根本不问。但毕竟大学是通识教育,是让你找到未来方向的,所以感兴趣,看看其实也行。

  • 计算机体系结构

    • 这个课很硬件,我感觉我推荐了,大家也不会看,关注我的更多的还是想在互联网、游戏行业的,就索性算了吧。
  • 计算机网络

    • 书籍

      • 《计算机网络》(谢希仁版)

      • 《计算机网络:自顶向下方法》

        • 这两本书,我本科的时候都看了,我特别特别特别特别喜欢这门课。

上课用的谢希仁那本,结课后自己看的自顶向下。谢希仁的那本是自底向上的,当时大三从物理层开始往上学,最后学到应用层之后,开始介绍我们互联网的各种各样的应用,给我的感觉就是一切的辛苦终于换来了成果,好像打开了一座又一座的金矿一样。

但是呢看完谢希仁那本,还是有一些疑问,所以又去看了自顶向下,看完之后之前的挺多问题就解决了,谈不上哪本书更好,因为我看自顶向下的时候已经对计网有很多理解了。

  • 汇编与接口技术

    • 书籍

      • 《汇编语言》王爽

        • 还是一样的,汇编面试不问,属于基础课,但工作之后有概率会遇到汇编语言,但需要你解决的问题,大概率比书里面的问题浅非常多,学有余力去看看吧。当然如果你想做相关工作的话,那就不一样了
  • 编译原理与设计

    • 书籍

      • 《编译原理》(龙书)

      • 《编译原理》(清华大学出版社)

        • 到了编译原理、汇编、计网这种课程,推荐入门书已经没有任何意义了,基本都开始推荐经典教材了,因为看这个的时候早就不是入门阶段了,深度早就该提上来了。

龙书很经典,但编译原理这门课和计网、操作系统类似,需要你写代码,非常重要,你也可以去看网上的各种lab,都可以,你觉得适合自己的学习方式就好,觉得学到了知识就好,没任何问题,也完全不用跟我一样,喜欢看书啃书,这个完全是因人而异。

这里为什么还把清华大学出版社的编译原理拿出来,就是告诉大家,我本科学的就是这个书,我的编译原理老师很厉害,很不错,但是我不太喜欢这本教材,当时上这个课我看这本书非常难受,总有一种哪里好像没讲的感觉,但我翻来翻去,就是找不到知识点,但就是感觉脑海里的知识缺了一块,不知道是为什么。强烈不推荐大家看这个紫皮书。

选修类(后端开发方向选看)

  • Java语言程序设计

  • Linux程序设计

    • 书籍

      • 《鸟哥的Linux私房菜基础学习篇》

        • 大部头,仅入门,不要去记忆,而是理解、应用一次书中提到的各种概念即可,一定要配套一个Linux操作系统来进行学习,边学边写
      • 《Linux高性能服务器编程》

        • 仅仅是一本Linux服务器编程的入门书,在学过C语言、计算机网络、操作系统之后学习
  • 分布式系统设计

    • 《大规模分布式存储系统:原理解析与架构实战》
    • 《Paxos到Zookeeper:分布式一致性原理与实践》
    • 《分布式系统:概念与设计》

实力提升

进入这一步,一定是要基础部分提到的内容已经掌握很熟练之后,再来进阶学习,否则学习效率会很低,因为你看不懂。并且该部分需要自己选择内容去学习,并非全部都要完全掌握

C / C++

  • 《C++ Primer》
  • 《Effective C++》
  • 《STL源码剖析》

操作系统

  • 《现代操作系统》

计算机系统

  • 《深入理解计算机系统》

计算机网络

  • 《计算机网络:自顶向下方法》
  • 《TCP/IP 详解》
  • 《图解HTTP》

数据库

  • 《MySQL必知必会》
  • 《高性能MySQL》

缓存

  • 《Redis设计与实现》

离谱之路

项目

这部分是根据网络整理出来,适合C++后端开发写入简历的项目,有的没有文档,因此需要你直接看它的源码实现,只要你理解了它的代码,并且自己手动实现一次,就能保证面试的时候对答如流,那么写进简历是没问题的。

  • 前言

    • 项目,就是你看完、学完、自己默默实现完之后,可以写进你简历的项目。强烈建议,不要做重复相似的项目、不要做不适合校招生做的项目、尽量做能体现计算机系水平的项目、你的项目不要只局限于一门语言,并非做C++路线,就一定要做C++项目,你做Go、Java项目一样很不错嘛,前提是项目要好

    • 这里给出的项目,只是例子,更多好项目,别人没做过的项目,你要自己创造、或者自己去查找,如果这里列出来,可能就有很多人一样做了,所以先学会模仿项目,再学会创造项目、做更深入的项目

    • 重点多说一句:并非就一定要做C++项目,你做Go、Java项目一样很不错嘛,前提是项目要好,之前流行过一阵Go的RPC框架,也很好!

      • 下面列出的,只是一部分例子,更多项目,请关注我的视频~
    • 重复相似的项目

      • 商城系统、博客系统、图书管理系统、各种XX应用层系统
      • WebServer、简单的课程设计
  • 实现STL

  • 实现WebServer

  • 实现网络框架

  • 协程

  • 数据库

C / C++ 丝绸之路(完全可以跳过,有时间再看,面试的时候大概率不会对校招生问到这么细的)

  • 《C和指针》
  • 《C专家编程》
  • 《C陷阱与缺陷》
  • 《C++ 沉思录》

系统设计

  • 《数据密集型应用系统设计》

  • 《大话设计模式》

  • 《代码整洁之道》

  • 《重构》

  • 《深入理解Nginx》

Unix高级(难度比较大)

  • 《Unix网络编程》
  • 《Unix环境高级编程》
  • 《Linux多线程服务端编程 使用muduo C++网络库》

国外优秀网课(有一定难度)

  • Title: C++科班学习路线
  • Author: Huan Lee
  • Created at : 2023-08-22 10:35:00
  • Updated at : 2024-02-26 04:53:15
  • Link: https://www.mirthfullee.com/2023/08/22/C++科班学习路线/
  • License: This work is licensed under CC BY-NC-SA 4.0.