02.15 如何自学计算机专业课程

一.计算机专业的自学路线图

美国计算机学会ACM发布了《计算机科学课程体系》的报告,当前最新版是2013年的。计算机科学被划分为18个知识领域。如下:

如何自学计算机专业课程

计算机的18个领域

如何自学计算机专业课程

计算机的18个领域

虽然计算机科学被划分为18个领域,但是这18个领域有着紧密的联系,构成了知识之网。这是我们的核心任务。

如何自学计算机专业课程

计算机自学路线图

带着目的去学习:

  • 掌握上层应用的开发,为了能够在IT公司找一份工作。是以就业为目的的自学。
  • 以考试为目的的自学
  • 为了解决工作中遇到的特定问题,提升专业技能,升职加薪。以个人的职业发展为目的。

对于小白而言,首先要对计算机科学和计算机产业形成整体的认识。这方面可以读导论或者科普读物。建议先读吴军博士的《浪潮之巅》。这本书讲IT产业非常精彩。

紧接着,要做两件事:(1)掌握一门编程语言;(2)学好数学。这两者是并行的。

(1)掌握一门编程语言:

  • 第一种:C是一种结构化的编程语言。如果不会C,后面的课程根本学不下去。
  • 第二种:Java是一种典型的面向对象的语言。Java有活跃的社区和数之不尽的开源项目。
  • 第三种:JavaScript 或者Python。这两个语言都是属于动态编程语言的范畴,应用极为广泛。JavaScript是全世界使用人数最多的一种语言,并且JS的各种框架层出不穷,进步飞快,业界的工作机会众多,对找工作是非常有帮助的。但实话实说,JS在计算机专业课程中用的并不多。Python却不同,它被国内外的很多大学选为新生的第一门语言。尤其是在这个大数据时代,Python真是火爆。

上面这四种语言,是学软件开发必须要掌握的,从任何一个语言开始学起都可以。

(2)对于数学,我们必须掌握四门课程:

  • 高等数学
  • 离散数学
  • 线性代数
  • 概率论与数理统计

在掌握了编程语言,用编程语言写了一些应用程序之后,又学习了一些数学之后,你就可以进入计算机专业基础课程的学习。这些课程构成了计算机的核心课程群,我们通常把它称为「专业基础课」。专业基础课有十多门,其中最重要的是四门如下(这四个课程也是考研科目):

  • 数据结构与算法
  • 计算机组成原理
  • 操作系统
  • 计算机网络

除此之外,计算机基础课还包括:

  • 编译原理
  • 面向对象的方法
  • 关系数据库的理论
  • 软件工程等等

这次我们就只针对那四个考研科目进行介绍。

这里我要强调的是:计算机专业基础课程的学习,和我们在工作中实用技术的学习,这两者不是相互矛盾的,而是相互促进的。比如计算机网络课程,对web开发框架有帮助;反过来,如果写了web框架,就能更深刻的理解计算机网络这门课程。

在完成专业基础课和实用技术的学习之后,就进入了一个新的自学阶段。这个阶段可以针对你感兴趣的特定领域深入钻研了。比如你对人工智能感兴趣,那可以学一下机器学习、spark等等。这个时候的学习目的非常明确,即:培养特定领域的专业技能,让你成为特定领域的专家。

二.选书和看书的基本原则

当某人告诉你,某书是某领域最好的书籍,不要盲目相信,要经过自己亲自试验再下结论。通常情况下,一本别人眼中的好书,可能的确质量很高,但如果阅读它超过了你的能力,那对于你而言,它就不是一本好书,因为你不具备所需要的背景知识,和相关的技术经验。

第二个原则是,选择那些你已经具备读懂前提的书。

如何自学计算机专业课程

分类阅读法

阅读科普书籍的最主要目的是:了解特定领域的背景知识、明了这个领域的基本数据和概念,建立全局观。

如何自学计算机专业课程

多遍阅读法

读者:多读几遍真的很重要,我在看js的时候,把廖雪峰的教程看了好多遍,敲了好多遍。

如何自学计算机专业课程

多遍阅读法的实例

上图是计算机网络的经典教材。我们拿着两本书来举例。

比如《计算机网络:系统方法》这本书,作者在前言中就很明确地说明,它是针对网络设计者写的。注意是网络设计者,不是网络应用开发者。这本书讲的是计算机网络的基本原理。介绍的是最初的设计者遇到了什么问题。

读第一遍时,第一章一定要认真阅读,包含了很多的术语。

读第二遍时,每章的开头很重要。

比如《计算机网络:系统方法》这本书,里面讲到的网络安全这一章,如果你当前还没有涉及到这一块儿,这一遍就可以跳过。但是有关PCP协议的内容,在实际开发中用的很多,就很重要,这些内容分布于书中的各个章节,这就需要你把它们抽取出来。

如何自学计算机专业课程

难书和厚书的典型

比如上面的这本《离散数学》,一页纸就要啃两个小时。

如何自学计算机专业课程

应对难书和厚书

与书籍相比,视频的优点是很独特的,特别适合展示动的过程,比如程序的调试过程、算法的运行步骤等。

如何自学计算机专业课程

计算机和数学的关系

有很多编程工作属于工程领域,按部就班,有很多现成的套路,创造性并不强,数学在这些项目中并非成败的关键因素。项目中,确实有算法在底层做支撑,但这算法往往都有现成的底层库。你只需要知道如何调用就行,并不需要理解算法的细节,并需要具备多深的数学功底。对于初级程序员来说,主要干的是搬砖的活儿,特别是CRUD类的代码。

如何自学计算机专业课程

计算机和数学的关系

如何自学计算机专业课程

国内数学教材

同济的《高等数学》教材还是不错的,但是国内数学教材有个最大的问题就是:往往只讲法则、定理、证明、习题,不讲数学的发展历史、具体应用、也不强调解决特定问题的思路,不适合自学。

如何自学计算机专业课程

国外的数学教材

普林斯顿的《微积分读本》,最大的特点是,讲的很细,采用内心独白的方式介绍微积分,有高中基础即可。内容虽然没有同济的多和深,但学习计算机来说,也基本够用了。

读者:这里也给大家推荐本冷门数学书,名字叫考研数学三部曲,销量很少。因为这本书优点是由浅入深,缺点是又臭又长,适合文科生看。

如何自学计算机专业课程

考研数学三部曲

《计算机科学概论》起到的是建立全局观的作用。

如何自学计算机专业课程

如何自学计算机专业课程

读者:想从Python 入门的同学,也推荐Headfirst Python。整个headfirst 系列都推荐。

读者:headfirst真的很不错,同推荐,特别设计模式。

如何自学计算机专业课程

《深入理解计算机系统》这本书,对于形成计算机系统的全局观非常有用。这本书简称为CSAPP,很有名。这本是最大的特点是从使用者,而不是从设计者的角度来组织材料的,难度适中,文字流畅。但这本书不适合零基础入门,你至少应该首先学过计算机导论,并且有一定的C语言开发经验,会用Linux。

如何自学计算机专业课程

读者:CSAPP看的时候要动C语言并且要看计算机专业导论,不然看不懂的。

考研的四门课

下面介绍计算机专业的几门骨干和和核心课程。同时也是考研的四门课程:数据结构与算法、计算机网络、操作系统、计算机组成原理。

(1)数据结构:

如何自学计算机专业课程

上图中,数据结构与算法包括了两部分内容。

现在的大数据和人工智能,完全就是算法。

如何自学计算机专业课程

上图中,第一本书有两个版本:java版本和C语言版本,难度适中。后两本书,较难。

如何自学计算机专业课程

如何自学计算机专业课程

对于多数人来说,掌握算法,只需要知道算法的思想、应用场景和优缺点就可以。实际开发中,你要设计新算法的机会并不多,并且那些应用很广的算法,都已经在框架里提供了现成的组件。这些组建内部已经实现了算法,你只需要知道是怎么回事,会调用就可以了。比如说加密和解密的算法。

考研和大公司面试,也不会考到复杂的算法,准备前多刷几遍即可。

(2)计算机组成原理:

如何自学计算机专业课程

如何自学计算机专业课程

计算机组成原理主要是介绍计算机由哪些部件组成的,这些部件是如何互相协作、完成处理功能、同时用来满足各种成本和功耗指标的。

学习这门课程之前,通常需要学习数字电路基础。

学完计算机组成原理之后,再去学操作系统和编译原理。

如何自学计算机专业课程

学习计算机组成原理之前,建议大家先看《编码》这本书。

(3)操作系统:

如何自学计算机专业课程

如何自学计算机专业课程

上图中,操作系统的书分为两类:教材和专著。

如何自学计算机专业课程

操作系统的教材里,数学公式不多,但它并不是说操作系统者这门课就很容易学,学好操作系统的关键是一定要把它和软件开发、动手实践结合起来。

很多操作系统都是用C语言写的,建议大家在学习操作系统之前,先学习C语言。

学习操作系统,最重要的是明白操作系统的内部机理。推荐大家实用C语言在Linux下学习。

进程和线程也是属于操作系统的范畴。

读者:补一个金老师的网易云课堂:http://mooc.study.163.com/u/8050019871#/c

(4)计算机网络

如何自学计算机专业课程

如何自学计算机专业课程

我推荐大家实用C、java、Phthon这三种语言去编写网络应用程序。

另外必须要学会操作系统。网路协议栈通常都是由操作系统来负责实现的,网络应用基本都是多线程的。

上图中这里介绍了三本经典书籍。计算机网络中一个重要的特点是分层。我们会发现这三个经典教材是三个视角。

  • 第一本:从上层协议介绍到下层协议。
  • 第二本:从顶向上介绍。
  • 第三本:横切的方式,针对特定的问题(比如安全问题、性能问题)来展开介绍。
如何自学计算机专业课程

学习计算机网络的关键,是明白上面这三个问题。

一旦了解了计算机网络的这些基本原理,你就会发现,理解实际开发中的各种通信协议和各种网络库,就会比较容易。

掌握好相应的网路协议,是掌握上层应用软件开发技术的关键。比如,如果连http协议都没掌握,就去写web应用, 好比在沙滩上盖楼。

如何自学计算机专业课程

如何自学计算机专业课程


分享到:


相關文章: