教材推荐
课程按两种方式分类:按依赖分类和按内容分类
课程按依赖分为:入门课程、衔接课程、专业课程。
依赖有强依赖和弱依赖两种
- 强依赖课程是前置课程,如果未学习强依赖课程则难以继续待学习课程
- 弱依赖课程与待学习课程内容相关,学习弱依赖课程有助于理解待学习课程,但即使未学习弱依赖课程也可以继续待学习课程
按依赖分类的原则是
- 入门课程没有前置要求,衔接课程用于连接基础知识与专业方向,专业课程则聚焦特定领域
- 强依赖只指向更低阶的课程;弱依赖可以指向同阶或更低阶的课程,但不指向更高阶的课程
- 按依赖分类时还会综合考虑内容难度和学习顺序,而不是根据依赖的情况机械推导
课程按内容分为:数学课程、编程课程、原理课程。
关于为什么要这样分类,这里引用一段话:
我一直不喜欢“计算机科学”这个词。主要原因是根本不存在这种东西。计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。这个学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为了得到国防部研究局的项目资助。中间部分是计算机博物学家,研究各种专门性的题目,比如网络数据的路由算法。另一端则是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。所以,在“计算机科学”的名下,数学家、物理学家、建筑师都不得不待在同一个系里。
——Paul Graham《黑客与画家》
我不完全赞同这段话:计算机科学并非由三个完全不相关的学科杂糅而成,事实上这三者的联系非常紧密
- 学习数学,不仅有助于理解计算机原理,也有助于编写程序
- 学习编程,不仅能够对数学上的难题进行数值计算,也能自己编写计算机的组成部件
- 学习原理,不仅能够具象化数学中的抽象模型从而加深理解,也能在写的程序出问题进行深度的调试
但学习计算机科学的过程中确实能明显感觉到,有些课程非常相似,有些课程则大相径庭。因此我根据这种感觉把所学课程分为了数学、编程和原理三大类。
选取的课程没有固定的标准,但大致遵循以下主观且灵活的审美原则。
- 课程要适合自学。不需要有人指导或评判。
- 开放的课程优于封闭的课程。所有课程资源都应该公开,没有时间限制或名额限制,也不需要邀请或报名。
- 课程的教材要便于拷贝和检索。因此网页形式最好,书籍次之,视频则垫底。
另外课程命名也是一件非常主观的、需要审美的事情。我偏好采用较宽泛的课程名称,避免因过度细分造成课程数量膨胀,引起初学者的迷茫。因此,课程里的教材不一定能覆盖课程名称所代表的整个知识域,但通常都可以覆盖最重要的部分,且剩余内容尽量能让其它课程交叉覆盖。