通往计算机科学免费自学教育的道路!
OSSU课程是使用在线材料进行的完整计算机科学教育。 这不仅仅是为了职业培训或专业发展。 它适用于那些想要在所有计算学科的基础概念方面有适当、全面基础的人, 对于那些有纪律、意志和(最重要的是!)良好习惯的人来说,他们主要靠自己获得这种教育, 但在全球学习者社区的支持下。
根据本科计算机科学专业的学位要求,减去通识教育(non-CS)要求, 因为假设大多数遵循该课程的人已经在 CS 领域之外接受过教育。 这些课程本身是世界上最好的课程之一,通常来自哈佛大学、普林斯顿大学、 MIT 等。 但特别选择满足以下标准。
课程必须:
当没有课程符合上述标准时,课程作业将辅以一本书。 当有课程或书籍不适合课程但质量很高时, 它们属于附加/课程或附加/阅读。
组织。课程设计如下:
持续时间。如果你仔细计划并每周投入大约 20 小时的学习时间,则有可能在大约 2 年内完成。学习者可以使用此电子表格来估计他们的结束日期。复印一份,并在表格中输入你的开始日期和预计每周小时数。在学习课程时,你可以在工作表中输入实际的课程完成日期,并获取更新的完成估计。
Timeline
Curriculum Data
警告:虽然电子表格是估计完成此课程所需时间的有用工具,但它可能不是与课程表保持同步。使用电子表格只是为了估计你需要的时间。使用 OSSU CS 网站或存储库查看要学习的课程。
成本。所有或几乎所有课程材料均免费提供。但是,有些课程可能会对要评分的作业/测试/项目收费。 请注意,Coursera 和 edX 都提供经济援助。
根据你自己的时间和预算决定花多少钱; 请记住,你无法购买成功!
过程。学生可以单独或分组完成课程,按顺序或不按顺序完成。
内容策略。如果你打算公开展示你的某些课程作业,则只能共享你被允许共享的文件。尊重你在每门课程开始时签署的行为准则!
获取帮助(有关我们的常见问题和聊天室的详细信息)
警告:在搜索 OSSU 时,你可能会发现一些第三方/已弃用/过时的材料。建议忽略它们,仅使用 OSSU CS 网站或 OSSU CS Github Repo。一些已知的过时材料是:
- 未维护且已弃用的 firebase 应用。在常见问题解答中阅读更多内容。
- 未维护且已弃用的 Trello 看板
- 第三方概念模板
课程表版本:(见更新日志
8.0.0)
如果你从未编写过 for 循环,或者不知道编程中的字符串是什么,请从这里开始。本课程是自定进度的,允许你调整每周花费的小时数以满足你的需求。
涵盖的主题:
simple programs
simple data structures
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
编程入门 | 10周 | 10小时/周 | 没有 | 聊天 |
本课程将向你介绍计算机科学的世界。从上述课程或其他地方学习过编程的学生应该参加本课程,以了解即将到来的材料。如果你完成课程想要更多,计算机科学可能适合你!
涵盖的主题:
computation
imperative programming
basic data structures and algorithms
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
计算机科学导论和使用 Python 编程(备选) | 9周 | 15小时/周 | 高中代数 | 聊天 |
除非另有说明,否则核心 CS 下的所有课程都是必需的。
涵盖的主题:
functional programming
design for testing
program requirements
common design patterns
unit testing
object-oriented design
static typing
dynamic typing
ML-family languages (via Standard ML)
Lisp-family languages (via Racket)
Ruby
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
系统程序设计(教科书)(备选:第 1 部分、第 2 部分) | 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数学)是算法和数据结构研究的先决条件,与算法和数据结构的研究密切相关。微积分既能让学生为离散数学做好准备,又能帮助学生发展数学成熟度。
涵盖的主题:
discrete mathematics
mathematical proofs
basic statistics
O-notation
discrete probability
and more
课程 | 期间 | 努力 | 笔记 | 先决条件 | 讨论 |
---|---|---|---|---|---|
微积分 1A:微分(备选) | 13周 | 6-10小时/周 | 备选课程涵盖本课程和以下 2 门课程 | 高中数学 | 聊天 |
微积分 1B:积分 | 13周 | 每周 5-10 小时 | - | 微积分 1A | 聊天 |
微积分1C:坐标系和无穷级数 | 6周 | 每周 5-10 小时 | - | 微积分 1B | 聊天 |
计算机科学数学(替代) | 13周 | 5小时/周 | 2015/2019 解决方案 2010 解决方案 2005 解决方案。 | 微积分 1C | 聊天 |
理解理论很重要,但你也需要创建程序。有许多工具被广泛使用,可以使该过程更容易。立即学习它们,以简化你未来的工作写作计划。
涵盖的主题:
terminals and shell scripting
vim
command line environments
version control
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
CS教育缺失的学期 | 2周 | 12小时/周 | - | 聊天 |
涵盖的主题:
procedural programming
manual memory management
boolean algebra
gate logic
memory
computer architecture
assembly
machine language
virtual machines
high-level languages
compilers
operating systems
network protocols
and more
课程 | 期间 | 努力 | 附加文本/作业 | 先决条件 | 讨论 |
---|---|---|---|---|---|
从第一性原理构建现代计算机:从 Nand 到俄罗斯方块(替代方案)) | 6周 | 7-13小时/周 | - | 类 C 编程语言 | 聊天 |
从第一性原理构建现代计算机:从南德到俄罗斯方块第二部分 | 6周 | 12-18小时/周 | - | 这些编程语言之一,从 Nand 到俄罗斯方块第一部分 | 聊天 |
操作系统:三个简单的部分 | 10-12周 | 6-10小时/周 | - | 南德到俄罗斯方块第二部分 | 聊天 |
计算机网络:一种自上而下的方法 | 8周 | 每周 4–12 小时 | Wireshark 实验室 | 代数、概率、基础CS | 聊天 |
涵盖的主题:
divide and conquer
sorting and searching
randomized algorithms
graph search
shortest paths
data structures
greedy algorithms
minimum spanning trees
dynamic programming
NP-completeness
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
分而治之、排序和搜索以及随机算法 | 4周 | 4-8小时/周 | 任何编程语言, 计算机科学数学 | 聊天 |
图形搜索、最短路径和数据结构 | 4周 | 4-8小时/周 | 分而治之、排序和搜索以及随机算法 | 聊天 |
贪婪算法、最小生成树和动态规划 | 4周 | 4-8小时/周 | 图形搜索、最短路径和数据结构 | 聊天 |
重新审视的最短路径、NP 完全问题以及如何处理它们 | 4周 | 4-8小时/周 | 贪婪算法、最小生成树和动态规划 | 聊天 |
主题
Confidentiality, Integrity, Availability
Secure Design
Defensive Programming
Threats and Attacks
Network Security
Cryptography
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
网络安全基础知识 | 8周 | 10-12小时/周 | - | 聊天 |
安全编码原则 | 4周 | 4小时/周 | - | 聊天 |
识别安全漏洞 | 4周 | 4小时/周 | - | 聊天 |
选择以下选项之一:
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
识别 C/C++ 编程中的安全漏洞 | 4周 | 5小时/周 | - | 聊天 |
利用和保护 Java 应用程序中的漏洞 | 4周 | 5小时/周 | - | 聊天 |
涵盖的主题:
Agile methodology
REST
software specifications
refactoring
relational databases
transaction processing
data modeling
neural networks
supervised learning
unsupervised learning
OpenGL
ray tracing
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
数据库:建模与理论 | 2周 | 10小时/周 | 核心编程 | 聊天 |
数据库:关系数据库和 SQL | 2周 | 10小时/周 | 核心编程 | 聊天 |
数据库:半结构化数据 | 2周 | 10小时/周 | 核心编程 | 聊天 |
机器学习 | 11周 | 9小时/周 | 基本编码 | 聊天 |
计算机图形学(备选) | 6周 | 12小时/周 | C++ 或 Java,线性代数 | 聊天 |
软件工程:简介 | 4周 | 8-10小时/周 | 核心编程,以及一个相当大的项目 | 聊天 |
涵盖的主题:
Social Context
Analytical Tools
Professional Ethics
Intellectual Property
Privacy and Civil Liberties
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
伦理、技术与工程 | 9周 | 2小时/周 | 没有 | 聊天 |
知识产权概论 | 4周 | 2小时/周 | 没有 | 聊天 |
数据隐私基础知识 | 3周 | 3小时/周 | 没有 | 聊天 |
在完成核心 CS 的每门必修课程后,学生应根据兴趣从高级 CS 中选择一部分课程。 并非子类别中的每门课程都需要学习。 但是学生应该参加与他们打算进入的领域相关的每门课程。
涵盖的主题:
debugging theory and practice
goal-oriented programming
parallel computing
object-oriented analysis and design
UML
large-scale software architecture and design
and more
课程 | 期间 | 努力 | 先决条件 |
---|---|---|---|
并行编程 | 4周 | 6-8小时/周 | Scala 编程 |
编译 器 | 9周 | 6-8小时/周 | 没有 |
Haskell简介 | 14周 | - | - |
立即学习Prolog!(备选)* | 12周 | - | - |
软件调试 | 8周 | 6小时/周 | Python,面向对象编程 |
软件测试 | 4周 | 6小时/周 | Python,编程经验 |
(*) 布莱克本、博斯、斯特里格尼茨的书(编译自源代码,根据 CC 许可重新分发)
涵盖的主题:
digital signaling
combinational logic
CMOS technologies
sequential logic
finite state machines
processor instruction sets
caches
pipelining
virtualization
parallel processing
virtual memory
synchronization primitives
system call interface
and more
课程 | 期间 | 努力 | 先决条件 | 笔记 |
---|---|---|---|---|
计算结构 1:数字电路备选方案 1 备选方案 2 | 10周 | 6小时/周 | 南德2俄罗斯方块 II | 备用链接包含所有 3 门课程。 |
计算结构 2:计算机体系结构 | 10周 | 6小时/周 | 计算结构 1 | |
计算结构3:计算机组织 | 10周 | 6小时/周 | 计算结构 2 |
涵盖的主题:
formal languages
Turing machines
computability
event-driven concurrency
automata
distributed shared memory
consensus algorithms
state machine replication
computational geometry theory
propositional logic
relational logic
Herbrand logic
game trees
and more
课程 | 期间 | 努力 | 先决条件 |
---|---|---|---|
计算理论(备选) | 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 小时 | 差异化与整合 | 聊天 |
OSS大学以项目为中心。 每门课程的作业和考试都是为了让你准备好利用你的知识来解决现实世界的问题。
在你完成了所有的核心CS和与你相关的高级CS部分之后,你应该考虑一个你可以用你所获得的知识来解决的问题。 真正的项目工作不仅在简历上看起来很棒,而且项目还将验证和巩固你的知识。 你可以创建全新的东西,也可以通过 CodeTriage 或 First Timers Only 等网站找到需要帮助的现有项目。
希望在创建项目时获得更多指导的学生可以选择使用一系列面向项目的课程。以下是选项示例(还有更多选项可用,此时你应该能够识别出一个有趣且与你相关的系列):
课程 | 期间 | 努力 | 先决条件 |
---|---|---|---|
全栈开放 | 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小时/周 | 编程, 交互设计 |
完成最终项目后:
通过拉取请求将项目信息提交到 PROJECTS。
[](https://github.com/ossu/computer-science)
<a href="https://github.com/ossu/computer-science"><img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"></a>
使用我们的社区渠道向你的同学宣布。
征求 OSSU 同行的反馈。 你不会被传统意义上的“评分”——每个人都有自己的衡量标准,他们认为什么是成功的。 评估的目的是作为你向世界宣布你是一名计算机科学家的第一个公告 并获得倾听反馈的经验——无论是正面的还是负面的。
最终项目评估还有第二个目的:评估 OSSU、 通过其社区和课程,成功地完成了其指导独立学习者获得世界一流的计算机科学教育的使命。
你可以单独或与其他学生一起创建此项目!我们热爱合作! 使用我们的渠道与其他研究员交流,以组合和创建新项目!
我的朋友,这是自由最好的部分! 你可以使用任何想要完成最终项目的语言。
重要的是将核心概念内化,并能够将它们与你想要的任何工具(编程语言)一起使用。
完成上述课程的要求后,你将完成相当于计算机科学的完整学士学位。祝贺!
你的下一步计划是什么?可能性是无限的和重叠的:
将 GitHub 存储库分叉到你自己的 GitHub 帐户中,并在完成时放在✅已完成的内容旁边。这可以作为你的看板,并且比任何其他解决方案实施得更快(让你有时间花在课程上)。