请问《计算机网络》《操作系统》《 组成原理》《 数据库》 学习的先后顺序是怎么样的，怎样学好？
同学们，先听老兵来说重点：计算机这个专业方向，最重要的就是『抽象』。 在不同领域中，『抽象』的意义是不一样的，在艺术界，『抽象』是搞出常人难以理解的东西，比如这样的抽象画，一般人乍一眼不知道画的什么东西—— 在计算机领域，恰恰相反，『抽象』是尽量让人一眼看得清楚明白。 比如，你现在正在用的键盘，当你按下一个键的时候，首先是键帽的机械运动，然后带动了电容膜或者机械键轴，触发了电路中的电平变化，通过有线或者蓝牙把编码之后的按键信息发送到电脑中——然而，你并不需要知道这写细节，你只知道，按下H这个键，就代表输入H这个字母。 虽然一个运算或者通讯过程有很多细节，但是我们建立一个系统，让它对外暴露出的只是一个很简单的接口，这就是抽象！ 计算机领域，很多问题都是分层的，当你研究每一层的时候，都可以把其它层看做某种抽象，无需关心其细节，只关注于其提供的功能和接口——这也是在这行做得好的秘诀。 可能你会奇怪，这个问题不是讨论《计算机网络》《操作系统》《 组成原理》《 数据库》 学习的先后顺序是怎么样的吗？为什么要扯到『抽象』上？有什么关系吗？ 太有关系了。 《计算机网络》《操作系统》《 组成原理》《 数据库》这几个课程，都是相对独立的课程，但是学习过程中肯定会有一些关联，比如，学习《计算机网络》就可能要设计到单个计算机的硬件组成，和《组成原理》就产生关联了，学习《数据库》也可能要了解《操作系统》中的进程线程概念才知道Race Condition是怎么回事，这又是新的关联。 我的建议是：不管你怎么学，当你发现要从一门课程A跳到另一个课程B的时候，不要掉到B里面太深，只看B提供什么功能，把这些功能看做B提供的抽象。 比如，当年你在学《数据库》时发现必须要了解进程概念，知道操作系统提供进程的功能就好，知道这是操作系统提供并行运算的机制就好，知道每一个进程随时都可能被另一个进程抢占CPU就好，不需要一头扎进《操作系统》里面去搞清楚进城如何实现的，你把操作系统提供的功能当做一个『抽象』就足够。 为什么要这么做呢？ 因为计算机科学很复杂啊，犹如一个大荒野，你要是见到一条小路就要追下去，很快就会迷路的，最后白白浪费很多时间，不如就沿着既定目标前进，沿着大路前进。 不要掉到兔子洞里面去！ 这就是我想说的，学习顺序不重要，至少《计算机网络》《操作系统》《 组成原理》《 数据库》这四门课学习顺序不要重要，因为他们互相之间没有一个是另一个的绝对前提，你在学一个的时候把其他课程知识提供的内容当『抽象』就好了。 但是，我可以告诉你怎样学好。 方法也很简单，学习任何一门课，都不要只是啃书本，要动手实践。 学《计算机网络》就要动手用Socket API写程序来体验一下，学《操作系统》就拿Linux源代码来感受一下，学《组成原理》就拆电脑来看一看里面，学《数据库》当然也要建几个表塞很多数据进去看看性能。 抽象+实践，就是计算机这个领域永远不变的真理。