通往计算机科学免费自学教育的道路!
OSSU课程是使用在线材料进行完整的计算机科学教育。这不仅仅是为了职业培训或专业发展。它适用于那些希望在所有计算学科的基本概念中打下适当、全面基础的人,以及那些有纪律、意志和(最重要的是!)良好习惯的人,他们主要靠自己获得这种教育,但要得到全球学习者社区的支持。
它是根据本科计算机科学专业的学位要求设计的,减去通识教育(non-CS)要求,因为假设大多数遵循该课程的人都已经在CS领域之外接受过教育。这些课程本身是世界上最好的课程之一,通常来自哈佛大学、普林斯顿大学、 MIT 等,但专门选择以满足以下标准。
课程必须:
当没有课程符合上述标准时,课程作业将辅以一本书。当有课程或书籍不适合课程,但在其他方面质量很高时,它们属于附加/课程或附加/阅读。
组织。课程设计如下:
持续时间。如果你仔细计划并每周投入大约 20 小时的学习,则可以在大约 2 年内完成。学习者可以使用此电子表格来估计其结束日期。复印并在表格中输入你的开始日期和每周预计小时数。在学习课程时,你可以在工作表中输入实际课程完成日期,并获得更新的完成估计。
Timeline
Curriculum Data
成本。所有或几乎所有课程材料均免费提供。但是,有些课程可能会对作业/测试/项目进行评分收取费用。请注意,Coursera 和 edX 都提供经济援助。
根据自己的时间和预算决定花多少钱;请记住,你无法购买成功!
过程。学生可以单独或分组学习课程,可以按顺序或无序学习。
内容政策。如果你打算公开展示你的一些课程作业,你必须只共享允许你共享的文件。尊重你在每门课程开始时签署的行为准则!
获取帮助(有关我们的常见问题解答和聊天室的详细信息)
课程版本:(见 CHANGELOG
8.0.0)
如果你从未编写过 for 循环,或者不知道编程中的字符串是什么,请从这里开始。本课程是自定进度的,允许你调整每周花费的小时数以满足你的需求。
涵盖的主题:
simple programs
simple data structures
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
编程简介 | 10周 | 10 小时/周 | 没有 | 聊天 |
本课程将向你介绍计算机科学的世界。无论是从上述课程还是通过其他地方的学习,都应学习本课程以了解即将到来的材料。如果你完成课程后想要更多,那么计算机科学可能适合你!
涵盖的主题:
computation
imperative programming
basic data structures and algorithms
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
计算机科学和编程导论,使用 Python (替代) | 9周 | 15小时/周 | 高中代数 | 聊天 |
除非另有说明,否则所有核心计算机科学课程都是必需的。
涵盖的主题:
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小时/周 | 设计模式 |
离散数学(Math for 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到俄罗斯方块第一部分 | 聊天 |
操作系统:Three Easy Pieces | 10-12周 | 6-10小时/周 | - | Nand 到俄罗斯方块第二部分 | 聊天 |
计算机网络:一种自上而下的方法 | 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 小时/周 | 没有 | 聊天 |
在完成核心计算机科学的每门必修课程后,学生应根据兴趣从高级计算机科学中选择一部分课程。并非子类别中的每门课程都需要参加。但是学生应该学习与他们打算进入的领域相关的每门课程。
涵盖的主题:
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,编程经验 |
(*) Blackburn, Bos, Striegnitz 的书(编译自源代码,根据 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 小时/周 | Nand2俄罗斯方块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小时/周 | 没有 |
Functional Programming in Scala (专业化) | 29周 | 4-5小时/周 | 一年编程经验 |
使用 Unity 2020 进行游戏设计和开发(专业化) | 6个月 | 5 小时/周 | 编程、交互设计 |
完成最终项目后:
通过拉取请求将项目信息提交到 PROJECTS。
[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](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是否通过其社区和课程成功地完成了其指导独立学习者获得世界级计算机科学教育的使命。
你可以单独或与其他学生一起创建此项目!我们热爱合作!使用我们的渠道与其他研究员交流,以组合和创建新项目!
我的朋友,这是自由最好的部分!你可以使用任何想要完成最终项目的语言。
重要的是将核心概念内化,并能够将它们与你想要的任何工具(编程语言)一起使用。
完成上述课程的要求后,你将完成相当于计算机科学完整学士学位的学位。祝贺!
你的下一步计划是什么?可能性是无限的和重叠的:
现在你已经有了我们官方板的副本,你只需要在学习过程中将卡片传递给列或列即可。
Doing
Done
我们还有标签,可帮助你在整个过程中更好地控制。每个标签的含义是:
Main Curriculum:带有该标签的卡片代表我们课程表中列出的课程。
Extra Resources:带有该标签的卡片表示学生添加的课程。
Doing:带有该标签的卡片代表学生当前正在学习的课程。
Done:带有该标签的卡片代表学生完成的课程。这些卡片还应该包含至少一个项目/文章的链接,这些项目/文章是用在此类课程中获得的知识构建的。
Section:带有该标签的卡片代表我们课程中的部分。那些带有标签的卡片只是为了帮助组织“完成”列。你应该将课程的卡片放在其各自部分的卡片下方。
Section
该委员会的目的是为我们的学生提供一种跟踪他们进度的方法,以及通过朋友、家人、雇主等的公共页面显示他们进度的能力。你可以将讨论区的状态更改为公开或私有。