C语⾔、C++学习路线!编程基础四⼤件⽐语⾔更重要!关于C语⾔和C++的学习路线终于梳理完了。这块的东西很多很杂,不过梳理和总结之后,回过头来看,其实学习思路、学习路线应该还是⽐较清晰的。
先聊⼏个有趣的问题
这⼏个问题都是私信⾥常被问到的,也是我当时学习过程中的⼀些疑惑。
问:为啥我学完了C语⾔或者C++,却还是啥东西也做不出来?
答:编程语⾔学完了就能做出东西那也真是天才哇!应该说语⾔学得就算再精通,它其实也只代表完成了“最⼩的”那⼀部分,和实际上⼿⼲活之间还是有⼀个⾮常⼤的鸿沟,这个鸿沟就表现为下⽂即将详述的编程基础四⼤件+应⽤实践编程。
问:为什么C/C++写出来的东西都是运⾏于⿊乎乎的命令⾏?这玩意真有⽤吗?
答:嘿嘿,谁说⿊乎乎的命令⾏⾥运⾏的程序就没有⽤!咱⼤名⿍⿍的Linux系统都以命令⾏跟⽤户交互呢,⽽且Linux⾥⾯很多强⼤的⼯具都是运⾏于⿊乎乎的命令⾏!
问:从技术学习和实际运⽤的⾓度来看,C/C++和Java到底区别在哪?
答:C/C++,它和Java确实不太⼀样。C语⾔和C++,尤其C++,语⾔粒度细、机制多,性能虽然⾼,但语⾔本⾝的包袱也确实重,我们更愿意称它“造轮⼦”的语⾔!也正是因为C语⾔和C++性能好、粒度细,所以什么都能做。⽽Java本⾝就是⼀种服务于互联⽹软件开发(后端开发+客户端开发)的语⾔,它有⼀个明显的“⽣态圈”的概念,所以应⽤领域⾮常清晰。我个⼈觉得C语⾔和C++编程⽐Java还是要难⼀些,Java毕竟是纯应⽤层的,C语⾔和C++则对程序员能⼒的要求要更⾼⼀些。
岗位分析
了解⼀下岗位,知道以后能做什么,这个也有利于⾃⼰树⽴学习⽬标。
C语⾔和C++属于“造轮⼦”语⾔,⼏乎什么都能做。不过⼀般来说,C语⾔和C++主要还是做后台(服务端)开发⽐较多,包括:
■ 通信公司后台开发
■ 互联⽹公司后台开发
■ 游戏公司后台开发
■ ……
当然这个后台开发具体职责⼜有很多细分,⽐如:
■ 有做数据处理和分析的
■ 有做基础协议和通信的
■ 有做服务端底层应⽤优化的
wschool■ 甚⾄还有做后台系统驱动和内核的
■ ……
不管怎样,下⾯即将要介绍的这些学习路线和内容适⽤于以上所有情况。
语⾔本⾝的学习
C语⾔:
■ 除了最最基础的语法:变量、条件、循环、字符串、数组、函数、结构体等之外
■ C语⾔最最最最最重要的那就是:指针、内存管理,以后企业⾥开发就靠它俩吃饭,这也是检验C语⾔掌握情况的两⼤标准推荐书籍:《C Primer Plus》、《C和指针》、《C专家编程》
C++:
■ C++和C语⾔确实是不同的语⾔,但是C++确实是对C语⾔的延伸,可以理解为在C语⾔⾥加⼊了⾯向对象的特性。因为只有⾯向对象特性的加持,代码才能更好的复⽤、扩展和⼯程化,这是⼤型项⽬的必备要素
■ 除了C语⾔所有的底⼦之外,还需要学习C++的⾯向对象(封装、继承与多态)特性、泛型、模板、STL等等
推荐书籍(有先后顺序):《C++ Primer》、《Effective C++》、《C++ 标准程序库》、《STL源码剖析》《深度探索C++对象模型》
最后⼀个⼩建议是:语⾔部分的学习建议不要拖太久,⼀定要规划好时间,⼀⿎作⽓,⾼强度给它压下来,否则容易把⾃⼰拖泄⽓。
编程基础“四⼤件”
基础四⼤件包括:数据结构和算法、计算机⽹络、操作系统、设计模式
这跟学什么编程语⾔、后续从事什么编程⽅向均⽆关,只要做编程开发,这四个计算机基础就⽆法避开。可以这么说,这基础四⼤件真的⽐编程语⾔重要
1、数据结构和算法
可以说这个直接决定了⾯试的成败!⼏种基础数据结构类型得烂熟于⼼,⽐如:字符串、链表、⼆叉树、堆、栈、队列、哈希等;基本的⼏⼤算法也要了如指掌,⽐如查、排序、动态规划、分治等等。
建议LeetCode多刷题啊啊啊啊啊!
参考资料:《⼤话数据结构》、《算法》、《剑指offer》《LeetCode刷题》
2、计算机⽹络
此处的计算机⽹络指的就是TCP/IP协议栈,可以说它是当下互联⽹通信的基⽯,⽆论如何⼀定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议。
推荐书籍:《TCP/IP详解》
3、操作系统
该部分重点包括:进程和线程的相关原理(原⼦性、并发、锁)、内存相关原理(内存分布、内存调度)
推荐书籍:《深⼊理解计算机系统》
4、设计模式
倒不需要23种设计模式全部记住,常见的⼏个如:单例模式、⼯⼚模式、代理模式、策略模式、模板⽅法模式建议熟练于⼼。
推荐书籍:《⼤话设计模式》、《设计模式之禅》
linux操作系统书籍应⽤实践编程
教程视频2019这部分会涉及到⼀些⼯具、编程环境、和具体编程实践,应该说这⼀部分学完,⾃⼰应该能做点东西出来、或者说能看懂⼀些实际项⽬的代码。
实践这部分,我也是结合我之前在通信公司的实际⼯作经历和所听所见,来聊⼀聊。
1、Linux操作系统的使⽤
很多⼈初学C语⾔、C++(包括我)都是在Windows环境上进⾏的,⽽实际企业级开发⼏乎不可能,所以Linux系统必须要会,我们别⽆选择。先谈使⽤。
包括:常见的Linux操作命令、基本的Shell编程。
推荐书籍:《鸟哥的Linux私房菜》查看一个表的表结构
2、编译/调试⼯具
怎么让eclipse⾸先是跟编译相关的:编译⼯具!
我们知道很多⼈学C语⾔、C++都在类似Visual Studio这种集成IDE⾥进⾏代码编译,这个其实也⽤了编译器,只不过是微软⾃家的MS编译器,⽽且所有操作均可视化。⽽企业⾥开发很少会基于Windows
系统,所以Linux平台上的编译器更为重要,最典型的当属 GCC,甚⾄有些公司有⾃⼰定制过的交叉编译⼯具,但没关系,只要 GCC熟悉,其他问题都不⼤。
其次,⼤家⾃学C语⾔、C++,都借助类似VS这种IDE,点按钮即可对源⽂件编译。⽽企业⾥实际项⽬的编译动作叫 make,编译的实际动作和过程都是写在 makefile⽂件⾥,所以makefile的书写规则建议学习!
最后说到调试⼯具,Linux平台上的GDB调试⼯具要熟练使⽤,会借助于它进⾏调试。
推荐资料:这部分没有书可推荐,英⽂好的同学可以直接看GNU官⽹关于 GCC和 GDB的⽂档,中⽂材料可以看:《debuging with gdb》(中⽂版)和陈皓先⽣的《跟我⼀起写makefile》
3、Linux环境编程
还是那句话,企业⾥C语⾔和C++⼏乎都是基于Linux平台的,这⼀部分我们没办法避开
(1)Linux系统编程
众所周知,Windows系统编程⾥有各种各样的Windows API,同理Linux系统API的使⽤就更加重要。
(2)多线程编程
此处指的是多线程编程实践相关的东西,⼀般包括:线程、资源、信号、同步、互斥、锁等等⼀些具体的编程⽅法。
(3)⽹络编程
此处的⽹络编程主要指的是具体Linux系统上的⽹络编程 API和 IO函数的编程实践。
推荐书籍:这三部分综合在⼀起,推荐必看书籍包括《Unix环境⾼级编程》、《Linux⾼性能服务器编程》、《POSIX多线程程序设计》
如果你想要获取更多C语⾔、C++、Windows以及QT的知识!
这⾥⼀个C/C++编程学习交流俱乐部,传送通道:【】
pytorch lightning
还有编程学习⽂件(源码,项⽬实战教学视频以及给⼩⽩的零基础教程),欢迎初学者和正在进阶中的⼩伙伴们!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。