基本介绍
本⼈211科班出⾝,⽬前⼤学临近毕业,想给迷茫的同⾏者或者后来⼈⼀些建议和推荐,少⾛弯路。想想⾃⼰被学校的⼀些垃圾课程和教材(部分不是全部)摧残的⼀度丧失学习兴趣,加上都快毕业了,给⼤家推荐这四年来的⼼得吧,分享我认为⽐较好的计算机科学与技术学习路线,算是我⽬前的全部经验。
适合读者:
C++初学者
已经掌握⼀门编程语⾔&想提升编程能⼒的初学者
想学习编程基础四⼤件(数据结构与算法、计算机⽹络、操作系统与计算机组成原理、设计模式)以及linux的科班⽣
C++语法学完之后,就应该学编程基础四⼤件和应⽤实践编程
务必记住:编程基础4⼤件⽐编程语⾔本⾝要重要的多
但是C++语法和编程基础四⼤件是知识性的东西,想转化为能⼒必须要经过应⽤实践编程(基于linux)
⾄于为什么要学linux,因为企业级应⽤都是基于linux的啊,没有熟练掌握linux的还是初级程序员(个⼈浅见,因为我还没有⼯作,但是这些经验都是有⼯作经验的过来⼈说的)。还不明⽩linux/Unix重要性的可以⾃⾏Google百度
0.C++语法学习
⽹课视频推荐
推荐B站⼩甲鱼的C++快速⼊门的教学视频,讲的通俗易懂⼜有深度(也适合接触过C++的同学补习⼀遍)
书籍推荐,看书顺序由浅到深六一儿童节朋友圈文案简短
⼊门级:
第⼀本 《Essential C++》 (由c过度到c++,本科学过C++或者看过C++快速⼊门的视频可以不看)
第⼆本 《C++ Primer第五版》 (内容很全,但是不深,适合⼊门,对于⾯向对象编程和泛型编程以及STL有初步认识)
登堂级:
第三本 《Effective C++》(55个最佳实践,优化建议)
第四本 《More Effective C++》 (35个最佳实践,智能指针,引⽤技术,类的设计)
第五本 《C++ 标准程序库》 (STL深⼊学习)
⼊⼟级:
第六本 《深⼊探索C++对象模型》(⾮常难,在有⼏年项⽬经验前恐怕很难读懂吧。⼯作前可以翻阅⼀下,⾯试官可能会问。内容很有深度,关于底层原理,如虚函数有虚函数表,虚函数表内部如何实现)
如果说想偷个懒,快速⼊门C++,就学
第⼆本 《C++ Primer第五版》 (⾄少学完STL中容器与算法)
最后多⼀嘴,程序员的能⼒提升,真的是从⾃主发挥主观能动性去⾃学开始的
因为C++设计感很强,STL是其泛型编程的杰出代表作,你学会了C++的基本语法和STL中的容器与算法,不论是以后本科的学习,还是刷oj题,还是进⼀步的学习,这样的基础就够了。
1.基础四⼤件
基础四⼤件包括数据结构和算法、计算机⽹络,计算机操作系统&计算机组成原理,设计模式
推荐⼀个学习顺序吧:数据结构,算法,计组,OS,计⽹,设计模式。
1.1数据结构和算法
基本的概念学习之后要⾼强度的去刷leetcode的题⽬
怎么查档案在哪1.1.1数据结构
数据结构我本科学过两遍,加上中间还上了⼀门叫做算法的专业选修课,体会到了什么叫做“数据结构是服务于算法的”,关于数据结构的重要性,我就不赘述了,直接上推荐
数据结构推荐书籍:
《⼤话数据结构》C/C++ (⼊门级,通俗易懂)
《数据结构与算法图解》 (2019年出的,数据结构是服务于算法的,这本书算是两者结合的⼊门书)
1.1.2算法
说实话,⼤⼆学完数据结构,我很快就忘的差不多了,除了觉得数据结构⾥⾯有些东西很艰深晦涩,没有发现这玩意没有什么⽤——直到我⼤三学了算法(真⾹),突然发现数据结构⾮常有魅⼒,很多神奇的操作,⼀些⾮常有名且巧妙的算法都是基于我们学过的数据结构,不多说了,上推荐吧
算法推荐书籍
《算法图解》 (算法⼊门书,简单易懂,但是缺乏代码实现)
《算法》第四版 (我本科⽤的就是这本,适合有数据结构基础的同学阅读,特点就是包含代码实现,⽤的是Java,并且这本书的内容和代码都在作者的⽹站上⾮常推荐)
《算法设计与分析基础》(推荐这本算法书的原因是上⼀本《算法》只是挑了⼏个经典的算法作了详细的介绍以及代码实现,⽽这本书包括了⼏乎常见的算法,内容⽐较全,适合进⼀步⼊门,其中算法实现采⽤的是伪代码)
《算法导论(原书第3版)》(神书,算法的百科全书,很有难度,适合ACM⼤佬以及相关研究⽅向的硕博)
⼯作推荐书籍
《剑指offer》 (⼯作必刷)
剩下的精⼒去刷题,只有刷题,写具体代码⽽不是伪代码,才能带来真正的能⼒提⾼。这⾥推荐三个刷题的oj⽹站——leetcode(题解丰富,讨论中有很多⼤佬的题解),⽜客⽹(很适合⼯作),PAT(浙⼤研究⽣复试采⽤PAT甲级成绩,不⽤我过多介绍了吧)
1.2操作系统与计算机组成原理
操作系统和计组我合在⼀起讲,因为这两者有交叉的内容
1.2.1计算机操作系统
估计有很多⼈像我⼀样本科或者⾃学的时候学不懂操作系统吧,或者觉得OS学起来⾮常空中楼阁。那么如何把操作系统学明⽩呢?下⾯这段话是我见过的最好解答
为了理解操作系统,需要学习汇编,推荐书籍
《汇编语⾔》 (第三版)王爽
《x86汇编语⾔:从实模式到保护模式》李忠
OS推荐书籍
《深⼊理解计算机系统》(原书第3版)(很多⼈推荐的⼀本书,更像是程序员需要了解的计算机知识,包含OS、计组、编译、汇编等,可以多读⼏遍,读⾃⼰想读的部分)
《操作系统设计与实现》(上册) (很多⼈熟知的和这本书是同⼀作者)
《操作系统概念》
1.2.2 计算机组成原理
计组和汇编就⽐较近了,除了涉及OS中内存管理,硬盘管理,还会涉及计算机架构,CPU原理等等
《计算机组成与设计》 (只是想粗浅学⼀下计组扫盲这⼀本⾜矣)
《计算机体系结构 》(计算机体系结构是CS研究⽣的⼀个⽅向,相当于计组进阶,不过这本书内容也是⾮常舒服的,适合学完计组后进阶学习)
《计算机程序的构造和解释》 (很多⼈推荐,听说学习时间100h+,下⾯是我摘的⾖瓣书评)
如果想偷懒,操作系统和计算机组成合起来推荐⼀本
纸衣服《深⼊理解计算机系统》(原书第3版)(包含OS、计组、编译、汇编等,可以多读⼏遍,适合想学习OS和计组的同学)
1.3计算机⽹络与通信原理
TCP/IP协议栈——狭义理解
掌握原理,ARP协议,IP协议,ICMP协议,TCP/UDP协议
DNS协议,HTTP协议和HTTPS协议
推荐书籍
《TCP/IP详解卷⼀:协议》英⽂版
《计算机⽹络》第七版 谢希仁 中⽂版书籍中最好的
《计算机⽹络⾃顶向下⽅法》第六版 强烈推荐
这⾥主要学习计算机⽹络的原理,想学习⽹络编程的可以看其他书籍。因为在⽹络⽅⾯,学通⽹络基本原理,再学socket编程之类的,能达到事半功倍的效果。⽹络编程我只会⽪⽑,这⾥我就不推荐了。
⼤家可以⾃⾏知乎百度。(或者我以后学了再来填坑?)
1.4设计模式
有没有⼈和我⼀样没有听说过设计模式TAT,我⼤四才听说并且开始重视设计模式
设计模式就是编程范式,就算以后不搞开发,设计模式的学习对于⼤型项⽬还是⾮常有裨益的。
23种设计模式,熟练常见的:单例,⼯⼚,代理,策略模式,模板⽅法即可
推荐的书籍
《⼤话设计模式》 (简单⼊门级)
《Head First 设计模式》(中⽂版) (虽然也是⼊门级,但是⽐较全⾯)
2.应⽤与编程实践
2.1linux操作系统学习
企业级开发,后端开发(服务端开发)都是在linux上开发的
常见linux操作系统指令
基本的shell编程(shell编程是⽣产⼒⼯具,批处理,⾃动化脚本)
推荐书籍
《linux鸟哥私房菜》 (⾮常经典的linux⼊门书)
《linux就该这么学》 (⽐鸟哥的书新⼀点,但是内容可能差⼀点)
2.2编译和调试⼯具
2.2.1编译相关的编译⼯具
做梦梦到僵尸win下是vs,⽤的微软⾃⼰MS编译器
linux下是GCC,GCC掌握了其他问题不⼤
实际项⽬的编译动作叫make,编译动作过程都是写在makefile⽂件中
makefile要⾃⼰会写,即编译过程是⾃⼰去设计,⾃⼰去写的
2.2.2调试
鱼尾麻花辫的编法企业级开发中的调试和vs中的调试不⼀样,尤其是C++的后台开发在linux上⽤的主要是GDB调试⼯具
推荐资料:
注意下⾯不是书籍,是⽂档,⽹上都有,⾃⾏Google百度,我就不附上链接了六级算分
英语好的去GNU官⽅关于GCC和GDB的⽂档
中⽂参考⽂档有《debugging with gdb》中⽂版
陈皓的《跟我⼀起写makefile》
2.2.3linux环境编程
linux系统编程
学linux的API的使⽤
多线程编程实践:线程,资源,信号,同步互斥,锁
⽹络编程:具体linux系统上⽹络编程的API,以及⼀些IO函数的代码编程
推荐书籍
《Unix环境⾼级编程》
《linux⾼性能服务器编程》
《POSIX多线程程序设计》
后记
本⽂共推荐了32本专业书籍和4份学习⽂档,都是我本科四年来遇到主流的、⽐较好的资源,有很多书我其实也没有读过,也算是⾃⼰的mark页吧,加油!
制作不易,如果觉得本⽂对你有帮助,欢迎点赞、收藏、分享,⼀键三连~(哈哈,我在想p吃)也欢迎⼤家积极留⾔评论互相讨论,我看到评论会第⼀时间回复的。
发布评论