一、知识模块
我在学习时关注的计算机知识模块如下:
基础知识模块
扩展知识模块
二、各模块学习路线
1、C++
- C++ Primer
- 深入探索 c++ 对象模型
- STL 源码剖析
- Effective C++、More Effective C++
2、算法
- 大话数据结构
- 算法第4版
- 剑指offer + 算法导论
3、操作系统
- 现代操作系统
4、计算机网络
- 《计算机网络》第七版 和 《计算机网络:自顶向下方法》一起学,比较一下。
- 网络是怎样连接的
- 图解HTTP
- 《TCP/IP详解卷1:协议》
5、数据库
- 看 W3Schools 的 SQL 教程,掌握基础语法,会编写 SQL 语句
- 看书《MySQL必知必会》, 边学边用,动手实操。
- 看书《数据库系统概念》
- 《高性能MySQL(第3版)》、《深入理解MySQL》、Mysql官网等。丰富的经验
6、系统编程
- 深入理解计算机系统
- 程序员的自我修养
7、网络编程
- TCP/IP网络编程
- Linux高性能服务器编程
- Linux多线程服务器编程
- Unix网络编程
- Unix环境高级编程
三、学习感悟
因为学习后如果不及时整理和复习很快就会忘记,隔一段时间后就好像没看一样,会感觉自己白看了,做了无用功。所以在开始学习这一系列计算机知识后,我努力让自己静下心来做笔记。
一般我会在看完某一章后尽快做一下这章的笔记,有时可能会连续看了许多章后再做,但尽量避免整理笔记的时间和学习的时间相隔太久。
我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔记即可找到相关知识点,并且要能在笔记中快速找到并迅速理解。因此在整理笔记时力求全面与简洁。
在此基础上,我所做的笔记中,已整理的内容是对书中内容的提炼,包括了我在学习时所认为的书中所有有用的知识点,因此每章的笔记内容都比较多。
对于这些经典的计算机书籍来说,书中有用的知识点太多了,因此做笔记的过程是很慢的。在我学习整理的过程中,平均来看,学习一章内容和整理一章内容的时间比大概在 1:1.5 左右,也就是整理笔记的时间实际上要比学习一遍还要更久。
但是对我来说,整理笔记是十分有用并且必须要做的事情。一方面,整理笔记相当于对学习的内容的一次复习,并且因为整理笔记时需要筛选有用内容并对其尽量提炼、简化,所以相比于第一遍看书学习,整理笔记也可以看作是更为细致的第二遍的学习。另一方面,在日后需要查找书中某个知识点时,笔记可以代替原书成为查找知识点的参考。而因为笔记是自己整理的,所以相比原书,对笔记中的知识点进行查找和理解的速度都更快。
但是并非所有的书都要全部整理成笔记,不同的书需要整理的详细程度也不同。如我对《鸟哥的Linux私房菜》的整理内容较为简略,因为这本书中对 Linux 的讲解十分详细,但并非所有知识都常用,并且其整理成本非常高,而整理的收效又不大。因此我只选择其中比较重要、常用的知识进行了整理。
四、书籍笔记索引
下面是到目前已发出的各模块书籍学习笔记的索引。
C/C++
算法
计算机网络
数据库
系统编程
网络编程
Python
Linux
补充
还有一些已整理但比较零碎的笔记没有发到博客上,经过梳理后后续都会补充上来。