计算机专业导论

针对计算机课程自学话题,画出一张计算机专业流程图,并结合几个最重要的课程,具体讲学习方法

学习路线

课程

用浪潮之巅起步

最开始两方面: 四个数学,四个编程语言都要会

数学学习的方法

专业基础课程

:最重要的四门考研课程数据结构算法、机组、操作系统、计网
(另外还有编译原理、面向对象的方法、关系数据库理论、软件工程)

原则与方法:

网络应用和这些基础课是相辅相成的,可相互促进理解

学习方法

学习动机和方式策略(《学习之道》)
不要多件事情来回切换


基于组块的场景式地学习:确定学习目的,有选择性地学习,来形成知识组块,构建知识框架

必须循序渐进,并且多次反复(一环套一环,不能跳)

看遇到看不懂的地方,要停一下,思考一下,如果是因为基础不够,那么则需要先补基础,这就是反复学习。

高度可控,及时反馈,进度条

比如说游戏:阶段明确,第一关很简单,每一关有奖励

考试:考试大纲+刷题

技术:场景式组块学习法

从感性进入(插图)到之后的理性分析和实践的统一

对知识之网从哪里切入

知识是有关联的,学习特定知识的时候要明白是一个子网。节点之间的联系

新旧知识之间是有关联的的,而不是孤立的。

所以就没有学不会,学不会的原因是第一与现有的知识之网的联结,第二是因为学的知识处在某一复杂的知识网络之中,特定的知识群没有了解

方式

不好的方式 如中心开发:例如数学没有学好就开始学机器学习,外围节点没有掌握;广度遍历,距离现有的知识太远,四处出击;

好的方法 从现有的知识出发,深度遍历是更有效的学习方式,学习不要网状的形式跳来跳去来学习,而是应该以从树根到树叶的方式完整的路径,数据结构中的深度遍历法。一个分支走完之后再走另一个分支。再把这些分支组成一个网络。

n-1底层和n+1上层:

如http协议和web开发框架,但是这是相对的,一些细节不需要了解,只需要了解和自己相关的稍微顶层和稍微底层

计算机系统是分层的,每一层都有特定的工作岗位,依据想从事的,确定工作层次,来明确需要精通的知识集合

比较远的层次,可以不去理会

以互联网为老师,自主学习,终生学习

读书

要自学就先得读书,首先是选书

阅读一本书若是超过自己能力,是没有意义的。选择具备读懂前提的书(即便再好的书,看懂才有意思)
(看前言、或者几页就看不懂了)

分类阅读 :科普书籍来入门,专业课本学基础,专业技术书籍来深入(如作者个人开发经验小结解决实际问题)

尽可能用英文书(写一个中英文术语对照表)

目的决定阅读方法:若是理解,就应该探究式;若是应付考试,考哪些,记住弄熟

多遍阅读法

多遍阅读法 如系统方法和自顶向下两本书;确定先读什么后读什么,前言,目录和序;网络设计这方面,网络开发者方面

目录:精心组织来体现写作意图,目录是构建知识之网的手段,用对比目录来确定这个领域的知识网络图。重要的知识节点。

正文:多遍扫描,像编译器一样。书的第一章包括重要概念,要反复读。其余每章就是开头部分要重点读,其余就可以略读。看结论和观点。第一遍不要关注细节。

从而切实可行的读书计划就成型了

第二遍是挑出最感兴趣的,不懂得打个记号,重点去学。留在第三遍去攻克。哪些是重点哪些不是重点,你自己去判断。

第三遍只在干货上下功夫。第四遍啃硬骨头,去翻翻论文,去学一下需要用到的数学知识,在此基础上需要通读全书,构建整个知识网络。普通书籍一两遍就够了,只是那些非常经典的书籍和考试书籍才要三四遍或者更多遍。

阅读技术书籍或者很难专业书的障碍有三点:你不具备作者假设你已经掌握的知识(计算机体系结构的设计方法),书中满页的数学公式(机器学习)看到就怕,大牛的写作水平不怎么样很晦涩,如显而易见,易得…..(北大离散数学教程)

应付难书的解决方案:先阅读简单科普书,先弄明白是哪些公式,攻下那些公式,先看前面的书扫清知识障碍。没有任何捷径可走

断点法:看不懂了,多半有知识没弄断,果断放弃,扫清障碍

对照法:多看基本教材,互相补充,建立起知识的联系

教学视频法:很独特,程序的调试过程,算法设计过程,很动态的过程是书无法表示的

计算机专业课程详解

数学

数学在项目中并非决定成败,只需要知道如何调用,算法细节不需要了解。但是中高级程序员,一些特定的技术还是,特定的问题建模和设计算法,要扎实数学基础

有哪些数学分支是计算机必须学的:离散结构(高数、线性代数、离散数学、概率论)

吴军的数学之美:数学在计算机中的具体运用,开发框架来把数据可视化,python有很多数学的库

计算机的全局观:知识地图,所学知识在整个计算机体系中处于什么地位,随便逛逛,有哪些子领域,然后这就找到你自己的学习方向,关注作者视角,他是如何介绍计算机这个科学领域的。

如csapp,从使用者角度来讲解,把零散的知识组块化,再建立组块之间的联系。从而建立整体知识框架。再去阅读一些具体的书籍。

骨干课程

数据结构和算法

数据结构表示信息本身,算法表示信息的处理过程。但实际上是无法分开的。包容大量编程练习和acm,ai和大数据玩的就是算法

两大块:数据结构和算法的理论基础,和各种具体的数据结构和算法介绍。第一部分中,弄明白其中的概念和术语,怎么设计一个算法,怎么评估他的优劣。第二部分,只需要记住最常用的几个,不必要每个深挖。每个数据结构和算法都有特定的应用场景去解决特定问题。学习方式:先不看特定问题的书上解答,自己尝试去解决,实在解决不了,再看书。用自己掌握的语言去尝试实现。java中的数据结构库可以看源码。

流程:算法图解+算法基础+数据结构和算法java实现+算法导论(很多数学证明,但是可以完全不看)(算法是用java写的,很好)

算法知道体现的思想和应用优缺点就行了,开发框架中有现成组建。不必要知道细节,只需要调用函数。

如果在算法密集的领域工作:在算法上 下功夫很必要(数学基础得好)

操作系统

操作系统:分为教材与专著(和软件开发和动手实践结合)

最重要的是理解操作系统的内部机理:推荐c语言。动手去完成实验,另外应用层的软件开发(安卓),安卓是多线程的,可以结合来理解进程线程。linux在上面下功夫绝对没错(linux内核深度解析)。但是没必要深究到操作系统源代码程度

计网

学习计算机网络路线:用c、python、java去编写网络应用,操作系统来负责实现,基本上都是多线程的,网络中还有路由算法

计算机网络最重要的是分层,三本书分别是:自顶向下,自顶向下,横切

计网最重要三个问题:如何连接、数据如何传输、网络系统如何构建

网络协议是上层应用开发的必须,不懂得计网基本原理去写项目都是沙滩上盖楼

具体计网学习建议:

重点理解分层:每个层解决的主要问题和解决方案应用原理算法

动手:编程语言来实现两台计算机的信息互通,实现web server;重点学习http+面向对象,网络抓包工具,

最后以一个图结束

七月份有个程序员live
九月份有个关于职业发展的live