针对计算机课程自学话题,画出一张计算机专业流程图,并结合几个最重要的课程,具体讲学习方法
学习路线
课程
用浪潮之巅起步
最开始两方面: 四个数学,四个编程语言都要会
数学学习的方法
专业基础课程
:最重要的四门考研课程数据结构算法、机组、操作系统、计网
(另外还有编译原理、面向对象的方法、关系数据库理论、软件工程)
原则与方法:
网络应用和这些基础课是相辅相成的,可相互促进理解
学习方法
学习动机和方式策略(《学习之道》)
不要多件事情来回切换
基于组块的场景式地学习:确定学习目的,有选择性地学习,来形成知识组块,构建知识框架
必须循序渐进,并且多次反复(一环套一环,不能跳)
看遇到看不懂的地方,要停一下,思考一下,如果是因为基础不够,那么则需要先补基础,这就是反复学习。
高度可控,及时反馈,进度条
比如说游戏:阶段明确,第一关很简单,每一关有奖励
考试:考试大纲+刷题
技术:场景式组块学习法
从感性进入(插图)到之后的理性分析和实践的统一
对知识之网从哪里切入
知识是有关联的,学习特定知识的时候要明白是一个子网。节点之间的联系
新旧知识之间是有关联的的,而不是孤立的。
所以就没有学不会,学不会的原因是第一与现有的知识之网的联结,第二是因为学的知识处在某一复杂的知识网络之中,特定的知识群没有了解
方式
不好的方式 如中心开发:例如数学没有学好就开始学机器学习,外围节点没有掌握;广度遍历,距离现有的知识太远,四处出击;
好的方法 从现有的知识出发,深度遍历是更有效的学习方式,学习不要网状的形式跳来跳去来学习,而是应该以从树根到树叶的方式完整的路径,数据结构中的深度遍历法。一个分支走完之后再走另一个分支。再把这些分支组成一个网络。
n-1底层和n+1上层:
如http协议和web开发框架,但是这是相对的,一些细节不需要了解,只需要了解和自己相关的稍微顶层和稍微底层
计算机系统是分层的,每一层都有特定的工作岗位,依据想从事的,确定工作层次,来明确需要精通的知识集合
比较远的层次,可以不去理会
以互联网为老师,自主学习,终生学习
读书
要自学就先得读书,首先是选书
阅读一本书若是超过自己能力,是没有意义的。选择具备读懂前提的书(即便再好的书,看懂才有意思)
(看前言、或者几页就看不懂了)
分类阅读 :科普书籍来入门,专业课本学基础,专业技术书籍来深入(如作者个人开发经验小结解决实际问题)
尽可能用英文书(写一个中英文术语对照表)
目的决定阅读方法:若是理解,就应该探究式;若是应付考试,考哪些,记住弄熟
多遍阅读法
多遍阅读法 如系统方法和自顶向下两本书;确定先读什么后读什么,前言,目录和序;网络设计这方面,网络开发者方面
目录:精心组织来体现写作意图,目录是构建知识之网的手段,用对比目录来确定这个领域的知识网络图。重要的知识节点。
正文:多遍扫描,像编译器一样。书的第一章包括重要概念,要反复读。其余每章就是开头部分要重点读,其余就可以略读。看结论和观点。第一遍不要关注细节。
从而切实可行的读书计划就成型了
第二遍是挑出最感兴趣的,不懂得打个记号,重点去学。留在第三遍去攻克。哪些是重点哪些不是重点,你自己去判断。
第三遍只在干货上下功夫。第四遍啃硬骨头,去翻翻论文,去学一下需要用到的数学知识,在此基础上需要通读全书,构建整个知识网络。普通书籍一两遍就够了,只是那些非常经典的书籍和考试书籍才要三四遍或者更多遍。
阅读技术书籍或者很难专业书的障碍有三点:你不具备作者假设你已经掌握的知识(计算机体系结构的设计方法),书中满页的数学公式(机器学习)看到就怕,大牛的写作水平不怎么样很晦涩,如显而易见,易得…..(北大离散数学教程)
应付难书的解决方案:先阅读简单科普书,先弄明白是哪些公式,攻下那些公式,先看前面的书扫清知识障碍。没有任何捷径可走
断点法:看不懂了,多半有知识没弄断,果断放弃,扫清障碍
对照法:多看基本教材,互相补充,建立起知识的联系
教学视频法:很独特,程序的调试过程,算法设计过程,很动态的过程是书无法表示的
计算机专业课程详解
数学
数学在项目中并非决定成败,只需要知道如何调用,算法细节不需要了解。但是中高级程序员,一些特定的技术还是,特定的问题建模和设计算法,要扎实数学基础
有哪些数学分支是计算机必须学的:离散结构(高数、线性代数、离散数学、概率论)
吴军的数学之美:数学在计算机中的具体运用,开发框架来把数据可视化,python有很多数学的库
计算机的全局观:知识地图,所学知识在整个计算机体系中处于什么地位,随便逛逛,有哪些子领域,然后这就找到你自己的学习方向,关注作者视角,他是如何介绍计算机这个科学领域的。
如csapp,从使用者角度来讲解,把零散的知识组块化,再建立组块之间的联系。从而建立整体知识框架。再去阅读一些具体的书籍。
骨干课程
数据结构和算法
数据结构表示信息本身,算法表示信息的处理过程。但实际上是无法分开的。包容大量编程练习和acm,ai和大数据玩的就是算法
两大块:数据结构和算法的理论基础,和各种具体的数据结构和算法介绍。第一部分中,弄明白其中的概念和术语,怎么设计一个算法,怎么评估他的优劣。第二部分,只需要记住最常用的几个,不必要每个深挖。每个数据结构和算法都有特定的应用场景去解决特定问题。学习方式:先不看特定问题的书上解答,自己尝试去解决,实在解决不了,再看书。用自己掌握的语言去尝试实现。java中的数据结构库可以看源码。
流程:算法图解+算法基础+数据结构和算法java实现+算法导论(很多数学证明,但是可以完全不看)(算法是用java写的,很好)
算法知道体现的思想和应用优缺点就行了,开发框架中有现成组建。不必要知道细节,只需要调用函数。
如果在算法密集的领域工作:在算法上 下功夫很必要(数学基础得好)
操作系统
操作系统:分为教材与专著(和软件开发和动手实践结合)
最重要的是理解操作系统的内部机理:推荐c语言。动手去完成实验,另外应用层的软件开发(安卓),安卓是多线程的,可以结合来理解进程线程。linux在上面下功夫绝对没错(linux内核深度解析)。但是没必要深究到操作系统源代码程度
计网
学习计算机网络路线:用c、python、java去编写网络应用,操作系统来负责实现,基本上都是多线程的,网络中还有路由算法
计算机网络最重要的是分层,三本书分别是:自顶向下,自顶向下,横切
计网最重要三个问题:如何连接、数据如何传输、网络系统如何构建
网络协议是上层应用开发的必须,不懂得计网基本原理去写项目都是沙滩上盖楼
具体计网学习建议:
重点理解分层:每个层解决的主要问题和解决方案应用原理算法
动手:编程语言来实现两台计算机的信息互通,实现web server;重点学习http+面向对象,网络抓包工具,
最后以一个图结束
七月份有个程序员live
九月份有个关于职业发展的live