C&C++学习路线

李先生 2020年07月30日 160次浏览

C&C++学习路线

相比较C语言和C++ 来说,Java、Python等这些语言确实更容易让人获得做出成品项目的成就感。很多人应该也跟我一样,在学习完c语言之后,就开始感到迷茫,感觉整体都在跟黑乎乎的cmd窗口打交道,却也做不出什么炫酷的东西,然后逐渐失去兴趣去奔赴Java、Python或者前端开发这样的领域。所以今天我规划整理了一下关于c、c++的学习路线,一来作为自己的小路灯,使自己的后续学习路线更加清晰,二来也给后来看到笔记并且正迷茫的你提一点点建议。

ps:由于此时写笔记的我本人任然还是菜鸟一枚,所以很多东西我的感悟也并不很深刻,所以本次路线我是基于b站大佬 CodeSheep 的视频进行整理的,希望对你也有帮助

一、初学者常见疑惑

1. 学完c语言或者c++之后,但是感觉自己什么都做不出来,一点成就感都没有

语言学完就可以做出东西的,那只能说你是天才了。语言就算学的再精通,它也只代表完成了最小的那一部分,和实际上手还有非常大的鸿沟。这个鸿沟就是接下来会说到的编程基础四大件和应用实践编程。

2. 为什么c语言c++写出的东西都是在黑乎乎的命令行里运行,这个东西有什么用

黑乎乎的命令行里的程序并不是没有用的,对于普通人来说,计算机就是图形化的windows。或者如果你用mac的话也会接触到一些命令行。但是,对于开发者来说,我们通常要操作的电脑都是Linux操作系统的,各种网站,大数据集群等等消耗性能的服务都是运行在这种操作系统里,因为Linux操作系统设计理念就是效率,所以一般是不用window里这种图形界面而是将更多的计算机资源留给服务。而它就是黑乎乎的命令行交互模式的。很多功能很强大的软件、工具或者服务,他看起来也都是在这种黑乎乎的命令行里运行的。所以说并不是运行在黑乎乎命令行里的程序就没有技术含量。

3. 从技术学习和实际运用角度来看,c语言c++和Java区别在哪

  • c语言c++,尤其是c++,她的语言粒度非常细,机制很多,性能也确实是很高,用我认识的一位大佬的话来说,c++ 是王者的语言,会了c++ 一切都可以做。但是,她的语言包袱也确实很重,我们也称他为造轮子的语言

  • Java是一个有很明显的生态圈的概念,他本身就是服务于互联网软件开发,主要就是用作后端开发,客户端开发,所以说她的学习领域相对就非常清楚

  • c语言c++更偏向于底层一点,对程序员的要求也要高一些,而且要比Java难。Java是纯应用的。

二、c语言c++从事的一些岗位

主要做后台开发比较多,也就是服务端开发比较多。

  • 通信公司的后台开发
  • 互联网公司的一些后台开发
  • 游戏公司的后台开发
  • 数据处理和分析的
  • 基础协议和通信的
  • 服务端底层应用优化的
  • 后台系统的一些驱动和内核
  • 等等

三、学习路线

接下来的这些学习路线不管你在什么岗位都是通用的

1. 学习语言本身

  • c语言的一些基础的语法。变量、循环、字符串、数组、函数、结构体等等。然后c语言最最重要的就是指针和内存管理。在企业开发中,也基本就是靠指针和内存管理吃饭的。检验c语言学的好不好,就是看你指针和内存管理学的怎么样。
  • c语言书籍推荐:基础一点的《C Primer Plus》、进阶一点的《C和指针》《C专家编程》
  • c++ 和c确实是不同的语言,但是c++确实是c语言的扩充、延伸。可以理解为在c语言里加入了一些面向对象的特性,因为只有面向对象特性的加持,代码才能更好的复用、扩展和工程化。
  • c++ 学习除了c语言中的一些基础之外,还要学一些面向对象的特性:封装、继承和多态。然后还有一些c++里面更高级一点的主题:泛型、模板、STL库等等

不过,语言学习之后感觉她是玩具,这也是非常正常的。除了敲一敲书上的例子或者做一做俄罗斯方块啊、贪吃蛇啊这些小游戏去练练手。但是这在语言本身学习的这个阶段其实也就够了。

ps:建议语言学习这一部分不要拖得太久,一定要规划好时间,然后高强度的尽快给他压下来,否则一天看上几页书,很容易给自己看泄气了。一定要一鼓作气去看,这样效果好

2. 基础四大件

如果你想校招基本也是看这基础四大件的,只学习语言本身是远远不够的。这基础四大件也是比语言本身是重要的。

  • 数据结构和算法
  • 计算机网络
  • 操作系统
  • 设计模式

这些东西跟你学习什么编程语言或者以后想从事什么编程方向、从事什么岗位是没有关系的。这四个理论基础死活都得掌握,所以称他为编程基础四大件。

1) 数据结构和算法:

直接决定你面试的成败,直接决定你能不能拿到offer。

几大基础的数据结构还是应该烂熟于心的:字符串、链表、二叉树、堆、栈、队列、哈希等等

几大基本的算法:查找、排序、动态规划等这些解题的思路

这些整完之后,一定要高强度的去刷LeetCode的题目。刷题特别重要!!!!

书籍推荐:《大话数据结构》《算法 第四版》 找工作必看:《剑指offer》然后剩下的精力去刷题

2) 计算机网络:

狭义点的理解就是:TCP/IP协议栈。TCP/IP协议栈可以说是互联网通信的基石,所有的互联网通信都是基于TCP/IP的,无论如何一定要对TCP/IP协议栈了如指掌。主要是原理的理解,要记得原理。包括里面的一些具体的协议:ARP协议、IP协议、ICMP协议、TCP、UDP协议、DNS、还有http、https

书籍推荐:《TCP/IP详解》

3) 操作系统

面试频率比较高的问题也比较重要的:

  • 进程和线程。还有由此引发的关于并发和多线程的一些东西:原子性、并发、锁等等
  • 内存。内存分布、内存调度算法

书籍推荐《深入理解操作系统》

4) 设计模式

倒不是说23种设计模式全部都要熟悉,常见的几个:单例、工厂、代理、策略模式、模板方法

书籍推荐:《大话设计模式》

3. 应用与编程实践

这部分会涉及到一些工具、编程环境还有一些具体的编程实践。偏代码一些。这一部分学完之后自己就可以做出一些东西来了。

  • Linux操作系统的学习

初学者学习c语言c++基本都是在windows操作系统上进行的编程和学习。但是实际企业级开发,尤其是后端开发或者服务端开发几乎不可能在windows上。所以Linux操作系统必须会使用。常用命令要掌握、基本的shell编程要熟悉。shell编程是一个生产力工具,有一些批处理啊自动化脚本啊还是用shell写的
书籍:《鸟哥的Linux私房菜》或者《Linux就该这么学》

  • 编译/调试工具
    编译工具:一班学习都是用类似于visual studio里进行编译,这个用到的是微软的编译器MS编译器,所有的操作都是可视化的。但是企业开发几乎很少会基于windows操作系统。尤其是服务端开发一定是在Linux平台开发。所以Linux平台上的一些编译器就必须掌握。如:GCC一定要熟悉
    实际项目的编译动作也并不想ide哪有,实际的动作叫做make。编译的动作过程都是写在一个叫makefile的文件中。makefile要自己会写。里面的规则要懂,讲白了就是整个编译过程是自己去设计的。
    调试工具:平时是用vs调试。打断点、运行、下一步等等全是按钮操作。通信公司等后台开发主要用的是GDB这个调试工具。材料的话英文好的去看GDB官网的文档,差的话看《debugging with gdb 中文版》陈皓的《跟我一起写makefile》
  • Linux环境的编程
    企业类c语言c++一般基于Linux平台。所以要学习Linux平台上的一些编程。
    a. Linux系统编程。windows编程有各种各样的Win API ,同理Linux上也有,而且更加重要。要掌握这些API
    b. 多线程编程。服务端、后台开发一般任务量比较大。所以多线程编程相关的东西得掌握。这里就是多线程编程实践的东西了。不再是理论,包括:线程、资源、信号、同步、互斥、锁等一些具体问题的编程实践。
    c. 网络编程。这里是具体的Linux操作系统上的一些网络编程的API、还包括一些IO函数的一些具体代码的编程。

书籍推荐:《Unix环境高级编程》是必看的 ,《Linux高性能服务器编程》也很好 ,多线程相关的《POSIX多线程程序设计》