目录
概要
OSSU课程是使用在线资料进行的完整的计算机科学教育。 它不仅仅是为了职业培训或专业发展。 它适合那些希望获得所有计算学科基本概念的适当、全面基础的人, 以及那些有纪律、有意愿和(最重要的是!)良好习惯,能够在很大程度上自主获得这种教育的人, 但同时也能得到来自全球学习者社区的支持。
它是根据本科计算机科学专业的学位要求设计的,减去了通识教育(非CS)要求, 因为我们假设大多数遵循这个课程的人在CS领域之外已经受过教育。 课程本身是世界上最好的课程,通常来自哈佛、普林斯顿、麻省理工等, 但专门选择以满足以下标准。
课程必须:
- 开放报名
- 定期运行(理想情况下是自定进度的形式,否则每年多次运行)
- 在教学材料和教学原则方面具有普遍高质量
- 符合CS 2013:计算机科学本科学位课程指南的课程标准
当没有课程满足上述标准时,课程工作会辅以一本书。 当有不适合课程但质量高的课程或书籍时, 它们属于extras/courses或extras/readings。
组织。课程设计如下:
- CS入门:供学生尝试CS并看看是否适合他们
- CS核心:大致对应计算机科学课程的前三年,学习所有主修学生都必须学习的课程
- CS高级:大致对应计算机科学课程的最后一年,根据学生的兴趣选修课程
- 最终项目:一个让学生验证、巩固和展示他们的知识的项目,由全球同行评估
持续时间。如果你仔细规划并每周投入大约20小时的学习时间,在大约2年内完成是可能的。学习者可以使用这个电子表格
来估计他们的结束日期。复制一份并在Timeline
表中输入你的开始日期和预期每周学习时间。当你完成课程时,可以在Curriculum Data
表中输入实际的课程完成日期,并获得更新的完成估计。
**警告:**虽然电子表格是估算完成本课程所需时间的有用工具,但它可能不是最新的课程。仅使用电子表格来估算所需时间。使用OSSU CS网站或仓库来查看需要学习的课程。
费用。所有或几乎所有课程材料都是免费的。然而,一些课程可能会对作业/测试/项目的评分收费。 请注意,Coursera和edX都提供经济援助。
根据自己的时间和预算决定花费多少; 只要记住你不能购买成功!
过程。学生可以独自或分组完成课程,按顺序或不按顺序进行。
- 我们建议完成CS核心的所有课程,只有当你确定之前已经学习过该材料时才跳过课程。
- 为简单起见,我们建议按照从上到下的顺序学习课程(特别是CS核心)。一些学生选择同时学习多门课程,以便在一天/一周内学习不同的材料。一个受欢迎的选择是同时学习数学课程和入门课程。列出了课程先决条件,以帮助你确定是否为某门课程做好了准备。
- CS高级中的课程是选修课。选择一个你想成为专家的主题(例如高级编程)并学习该标题下的所有课程。你也可以创建自己的自定义主题;Discord社区可能会对你计划的主题提供反馈。
内容政策。如果你计划公开展示一些课程作业,你必须只分享你被允许分享的文件。 尊重你在每门课程开始时签署的行为准则!
获取帮助 (关于我们的常见问题和聊天室的详细信息)
社区
- 我们有一个Discord服务器! 这应该是你与其他OSSU学生交谈的第一站。为什么不现在就介绍一下自己呢?加入OSSU Discord
- 你也可以通过GitHub issues进行互动。如果课程有问题,或者需要对课程进行更改,这里是开始对话的地方。在这里阅读更多信息。
- 将开源社区大学添加到你的Linkedin个人资料中!
**警告:**在搜索OSSU时,你可能会发现一些第三方/废弃/过时的材料。我们建议你忽略它们,只使用OSSU CS网站或OSSU CS Github仓库。一些已知的过时材料包括:
- 一个未维护和废弃的firebase应用。在FAQ中阅读更多信息。
- 一个未维护和废弃的trello板
- 第三方notion模板
课程
课程版本:8.0.0
(查看CHANGELOG)
先决条件
- CS核心假设学生已经学习过高中数学,包括代数、几何和预算。
- CS高级假设学生已经学习了整个CS核心 并且现在有足够的知识来决定选修哪些课程。
- 请注意,高级系统假设学生已经学习过基础物理课程(例如高中的AP物理)。
CS入门
编程入门
如果你从未写过for循环,或者不知道编程中的字符串是什么,请从这里开始。这门课程是自定进度的,允许你根据自己的需求调整每周投入的时间。
涵盖的主题:
简单程序
简单数据结构
计算机科学入门
这门课程将向你介绍计算机科学的世界。已经接触过编程的学生,无论是通过上述课程还是其他学习途径,都应该学习这门课程,以了解将要学习的内容。如果你完成课程后想要更多,那么计算机科学很可能适合你!
涵盖的主题:
计算
命令式编程
基本数据结构和算法
等等
课程 | 持续时间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
使用Python进行计算机科学和编程入门 | 9周 | 每周15小时 | 高中代数 | 聊天 |
CS核心
除非另有说明,CS核心下的所有课程都是必修的。
核心编程
涵盖的主题:
函数式编程
测试设计
程序要求
常见设计模式
单元测试
面向对象设计
静态类型
动态类型
ML系列语言(通过Standard ML)
Lisp系列语言(通过Racket)
Ruby
等等
课程 | 持续时间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
系统程序设计 | 13周 | 每周8-10小时 | 无 | 聊天:第1部分 / 第2部分 |
编程语言,A部分 | 5周 | 每周4-8小时 | 系统程序设计(听讲师说明) | 聊天 |
编程语言,B部分 | 3周 | 每周4-8小时 | 编程语言,A部分 | 聊天 |
编程语言,C部分 | 3周 | 每周4-8小时 | 编程语言,B部分 | 聊天 |
面向对象设计 | 4周 | 每周4小时 | 基础Java | 聊天 |
设计模式 | 4周 | 每周4小时 | 面向对象设计 | 聊天 |
软件架构 | 4周 | 每周2-5小时 | 设计模式 | 聊天 |
核心数学
离散数学(CS数学)是先决条件,与算法和数据结构的研究密切相关。微积分既为学生准备离散数学,又帮助学生发展数学成熟度。
课程 | 持续时间 | 工作量 | 注释 | 先决条件 | 讨论 |
---|---|---|---|---|---|
微积分1A:微分 (替代课程) | 13周 | 每周6-10小时 | 替代课程涵盖本课程和后续2门课程 | 高中数学 | 聊天 |
微积分1B:积分 | 13周 | 每周5-10小时 | - | 微积分1A | 聊天 |
微积分1C:坐标系和无穷级数 | 6周 | 每周5-10小时 | - | 微积分1B | 聊天 |
计算机科学的数学基础 (替代课程) | 13周 | 每周5小时 | 2015/2019解答 2010解答 2005解答. | 微积分1C | 聊天 |
计算机科学工具
理解理论很重要,但你也需要创建程序。有许多广泛使用的工具可以让这个过程更容易。现在学习它们,以便将来更轻松地编写程序。
涵盖的主题:
终端和shell脚本
vim
命令行环境
版本控制
等等
课程 | 持续时间 | 工作量 | 先决条件 | 讨论 |
---|---|---|---|---|
你的计算机科学教育中缺失的一学期 | 2周 | 每周12小时 | - | 聊天 |
核心系统
涵盖的主题:
过程式编程
手动内存管理
布尔代数
门逻辑
内存
计算机体系结构
汇编
机器语言
虚拟机
高级语言
编译器
操作系统
网络协议
等等
课程 | 持续时间 | 工作量 | 附加文本/作业 | 先决条件 | 讨论 |
---|---|---|---|---|---|
从头开始构建现代计算机:从与非门到俄罗斯方块 (替代课程) | 6周 | 每周7-13小时 | - | 类C编程语言 | 聊天 |
从头开始构建现代计算机:从与非门到俄罗斯方块 第二部分 | 6周 | 每周12-18小时 | - | 这些编程语言之一, 从与非门到俄罗斯方块 第一部分 | 聊天 |
操作系统:三个简单的部分 | 10-12周 | 每周6-10小时 | - | 从与非门到俄罗斯方块 第二部分 | 聊天 |
计算机网络:自顶向下方法 | 8周 | 每周4–12小时 | Wireshark实验 | 代数, 概率, 基础计算机科学 | 聊天 |
核心理论
涵盖的主题:
分治法
排序和搜索
随机算法
图搜索
最短路径
数据结构
贪心算法
最小生成树
动态规划
NP完全性
等等
课程 | 持续时间 | 工作量 | 先决条件 | 讨论 |
---|---|---|---|---|
分治法、排序与搜索、随机算法 | 4周 | 每周4-8小时 | 任何编程语言, 计算机科学的数学基础 | 聊天 |
图搜索、最短路径和数据结构 | 4周 | 每周4-8小时 | 分治法、排序与搜索、随机算法 | 聊天 |
贪心算法、最小生成树和动态规划 | 4周 | 每周4-8小时 | 图搜索、最短路径和数据结构 | 聊天 |
最短路径重访、NP完全问题及其对策 | 4周 | 每周4-8小时 | 贪心算法、最小生成树和动态规划 | 聊天 |
核心安全
涵盖的主题
机密性、完整性、可用性
安全设计
防御性编程
威胁和攻击
网络安全
密码学
等等
选择以下之一:
课程 | 持续时间 | 工作量 | 先决条件 | 讨论 |
---|---|---|---|---|
识别C/C++编程中的安全漏洞 | 4周 | 每周5小时 | - | 聊天 |
利用和保护Java应用程序中的漏洞 | 4周 | 每周5小时 | - | 聊天 |
核心应用
涵盖的主题:
敏捷方法
REST
软件规格说明
重构
关系数据库
事务处理
数据建模
神经网络
监督学习
无监督学习
OpenGL
光线追踪
等等
课程 | 持续时间 | 工作量 | 先决条件 | 讨论 |
---|---|---|---|---|
数据库:建模和理论 | 2周 | 每周10小时 | 核心编程 | 聊天 |
数据库:关系数据库和SQL | 2周 | 每周10小时 | 核心编程 | 聊天 |
数据库:半结构化数据 | 2周 | 每周10小时 | 核心编程 | 聊天 |
机器学习 | 11周 | 每周9小时 | 基本编码 | 聊天 |
计算机图形学 (替代课程) | 6周 | 每周12小时 | C++或Java, 线性代数 | 聊天 |
软件工程:入门 | 4周 | 每周8-10小时 | 核心编程, 以及一个较大的项目 | 聊天 |
核心伦理
涵盖的主题:
社会背景
分析工具
专业伦理
知识产权
隐私和公民自由
等等
高级计算机科学
在完成核心计算机科学的每门必修课程后,学生应根据兴趣从高级计算机科学中选择一部分课程。 不需要学习每个子类别的所有课程。 但学生应该学习与他们打算从事的领域相关的每门课程。
高级编程
涵盖的主题:
调试理论与实践
目标导向编程
并行计算
面向对象分析与设计
UML
大规模软件架构与设计
等等
课程 | 持续时间 | 工作量 | 先决条件 |
---|---|---|---|
并行编程 | 4周 | 每周6-8小时 | Scala编程 |
编译器 | 9周 | 每周6-8小时 | 无 |
Haskell入门 | 14周 | - | - |
现在学习Prolog! (替代链接)* | 12周 | - | - |
软件调试 | 8周 | 每周6小时 | Python, 面向对象编程 |
软件测试 | 4周 | 每周6小 | |
课程 | 时长 | 投入 | 先修要求 |
:-- | :--: | :--: | :--: |
计算理论 (替代) | 13周 | 每周10小时 | 计算机科学数学、逻辑、算法 |
计算几何 | 16周 | 每周8小时 | 算法、C++ |
博弈论 | 8周 | 每周3小时 | 数学思维、概率、微积分 |
高级信息安全
课程 | 时长 | 投入 | 先修要求 |
---|---|---|---|
Web安全基础 | 5周 | 每周4-6小时 | 了解基本的Web技术 |
安全治理与合规 | 3周 | 每周3小时 | - |
数字取证概念 | 3周 | 每周2-3小时 | 核心安全 |
安全软件开发:需求、设计和重用 | 7周 | 每周1-2小时 | 核心编程和核心安全 |
安全软件开发:实现 | 7周 | 每周1-2小时 | 安全软件开发:需求、设计和重用 |
安全软件开发:验证和更专业的主题 | 7周 | 每周1-2小时 | 安全软件开发:实现 |
高级数学
课程 | 时长 | 投入 | 先修要求 | 讨论 |
---|---|---|---|---|
线性代数的本质 | - | - | 高中数学 | 聊天 |
线性代数 | 14周 | 每周12小时 | 同修:线性代数的本质 | 聊天 |
数值方法导论 | 14周 | 每周12小时 | 线性代数 | 聊天 |
形式逻辑导论 | 10周 | 每周4-8小时 | 集合论 | 聊天 |
概率论 | 15周 | 每周5-10小时 | 微分与积分 | 聊天 |
最终项目
学习的一部分是实践。 每门课程的作业和考试都是为了让你准备好运用所学知识解决现实世界的问题。
在完成核心计算机科学课程和与你相关的高级计算机科学部分后, 你应该确定一个可以用你所获得的知识解决的问题。 你可以创造一些全新的东西,或者改进你使用的并希望能变得更好的某些工具/程序。
希望获得更多指导来创建项目的学生可以选择使用一系列面向项目的课程。 以下是一些选项示例 (还有更多可用选项,此时你应该能够确定一个有趣且与你相关的系列):
课程 | 时长 | 投入 | 先修要求 |
---|---|---|---|
全栈开放 | 12周 | 每周15小时 | 编程 |
现代机器人学(专业) | 26周 | 每周2-5小时 | 大一物理、线性代数、微积分、线性常微分方程 |
数据挖掘(专业) | 30周 | 每周2-5小时 | 机器学习 |
大数据(专业) | 30周 | 每周3-5小时 | 无 |
物联网(专业) | 30周 | 每周1-5小时 | 强大的编程能力 |
云计算(专业) | 30周 | 每周2-6小时 | C++编程 |
数据科学(专业) | 43周 | 每周1-6小时 | 无 |
Scala函数式编程(专业) | 29周 | 每周4-5小时 | 一年编程经验 |
Unity 2020游戏设计与开发(专业) | 6个月 | 每周5小时 | 编程、交互设计 |
恭喜
完成上述课程要求后, 你将完成相当于计算机科学学士学位的全部内容。 恭喜你!
接下来你可以做什么?可能性是无限的,而且相互交叉:
- 寻找开发人员工作!
- 查看阅读列表,阅读能提高你技能并扩展知识的经典书籍。
- 加入当地的开发者聚会(例如通过meetup.com)。
- 关注软件开发世界中的新兴技术:
行为准则
如何展示你的进度
将GitHub仓库分叉到你自己的GitHub账户,并在完成内容时在已完成的内容旁边放置✅。这可以作为你的看板,实施起来比任何其他解决方案都快(让你有时间专注于课程)。
团队
- Eric Douglas:OSSU创始人
- Josh Hanson:首席技术维护者
- Waciuma Wanjohi:首席学术维护者
- 贡献者