通往计算机科学免费自学教育的道路!
OSSU课程是使用在线材料的完整计算机科学教育。这不仅仅是为了职业培训或职业发展。它适用于那些想要在所有计算学科的基本概念上有一个适当、全面的基础的人,以及那些拥有学科、意愿和(最重要的是!)良好习惯的人,他们在很大程度上靠自己获得这种教育,但得到了全球学习者社区的支持。
它是根据本科计算机科学专业的学位要求设计的,减去通识教育(非CS)要求,因为假设大多数遵循该课程的人已经在CS领域之外接受过教育。这些课程本身是世界上最好的课程之一,通常来自哈佛、普林斯顿、 MIT 等,但专门选择满足以下标准。
课程必须:
当没有课程符合上述标准时,课程作业将补充一本书。当有些课程或书籍不适合课程但质量很高时,它们属于附加/课程或附加/阅读。
组织。课程设计如下:
持续时间。如果你仔细计划并每周投入大约 20 小时用于学习,则有可能在大约 2 年内完成。学习者可以使用此电子表格来估计其结束日期。复制并在表格中输入你的开始日期和每周的预期小时数。在完成课程时,你可以在工作表中输入实际课程完成日期并获得更新的完成估算。
Timeline
Curriculum Data
成本。所有或几乎所有课程材料都是免费提供的。但是,某些课程可能会对要评分的作业/测试/项目收取费用。请注意,Coursera和edX都提供经济援助。
根据自己的时间和预算决定花费多少;请记住,你不能购买成功!
过程。学生可以单独或分组、按顺序或不按顺序完成课程。
内容政策。如果你打算公开展示你的某些课程作业,则必须仅共享允许你共享的文件。不要不尊重你在每门课程开始时签署的行为准则!
获取帮助(有关我们的常见问题解答和聊天室的详细信息)
课程版本:(见更新日志
8.0.0)
如果你从未编写过 for 循环,或者不知道编程中的字符串是什么,请从这里开始。本课程是自定进度的,允许你调整每周花费的小时数以满足你的需求。
涵盖的主题:
simple programs
simple data structures
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
Python for Everyone | 10 周 | 10小时/周 | 没有 | 聊天 |
本课程将向你介绍计算机科学的世界。从上述课程或通过其他地方学习被介绍到编程的学生应该参加本课程以获得即将到来的材料。如果你完成课程想要更多,计算机科学可能适合你!
涵盖的主题:
computation
imperative programming
basic data structures and algorithms
and more
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
使用Python的计算机科学和编程简介(alt) | 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
课程 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
如何编码 - 简单数据(教科书) | 7 周 | 每周8-10小时 | 没有 | 聊天 |
如何编码 - 复杂数据 | 6 周 | 每周8-10小时 | 如何编码:简单数据 | 聊天 |
编程语言,A 部分 | 5 周 | 每周4-8小时 | 如何编码(听讲师) | 聊天 |
编程语言,B 部分 | 3 周 | 每周4-8小时 | 编程语言,A 部分 | 聊天 |
编程语言,C 部分 | 3 周 | 每周4-8小时 | 编程语言,B 部分 | 聊天 |
面向对象设计 | 4 周 | 4小时/周 | 基本爪哇 | |
设计模式 | 4 周 | 4小时/周 | 面向对象设计 | |
软件架构 | 4 周 | 每周2-5小时 | 设计模式 |
离散数学(CS数学)是先决条件,与算法和数据结构的研究密切相关。微积分既为学生准备离散数学,又帮助学生发展数学成熟度。
涵盖的主题:
discrete mathematics
mathematical proofs
basic statistics
O-notation
discrete probability
and more
课程 | 期间 | 努力 | 笔记 | 先决条件 | 讨论 |
---|---|---|---|---|---|
微积分1A:微分(alt) | 13 周 | 每周6-10小时 | 备选方案涵盖本课程和以下 2 门课程 | 高中数学 | 聊天 |
微积分1B:积分 | 13 周 | 每周5-10小时 | - | 微积分 1A | 聊天 |
微积分1C:坐标系和无穷级数 | 6 周 | 每周5-10小时 | - | 微积分 1B | 聊天 |
计算机科学数学(alt) | 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 到俄罗斯方块 (alt) | 6 周 | 每周7-13小时 | - | 类 C 编程语言 | 聊天 |
从第一原理构建现代计算机:NAND 到俄罗斯方块第二部分 | 6 周 | 每周12-18小时 | - | 这些编程语言之一,从Nand到俄罗斯方块第一部分 | 聊天 |
操作系统:三个简单部分 | 10-12 周 | 每周6-10小时 | - | 南德到俄罗斯方块第二部分 | 聊天 |
计算机网络:自上而下的方法 | 8 周 | 每周 4–12 小时 | Wireshark Labs | 代数、概率、基本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,线性代数 | 聊天 |
软件工程:简介 | 6 周 | 每周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小时 | 斯卡拉编程 |
编译 器 | 9 周 | 每周6-8小时 | 没有 |
哈斯克尔简介 | 14 周 | - | - |
立即学习Prolog!(备选案文)* | 12 周 | - | - |
软件调试 | 8 周 | 6小时/周 | Python,面向对象编程 |
软件测试 | 4 周 | 6小时/周 | 蟒蛇,编程经验 |
(*) 布莱克本、博斯、斯特里格尼茨的书(从源代码编译,在 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:数字电路 alt1 alt2 | 10 周 | 6小时/周 | 南德2俄罗斯方块二 | 备用链接包含所有 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小时/周 | 数学思维、概率、微积分 |
课程 | 期间 | 努力 | 先决条件 |
---|---|---|---|
网络安全基础知识 | 5 周 | 每周4-6小时 | 了解基本的网络技术 |
安全治理与合规性 | 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小时/周 | 编程、交互设计 |
完成最终项目后:
通过拉取请求将项目信息提交到项目。
[](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
该董事会的目的是为我们的学生提供一种跟踪他们进度的方法,以及通过朋友、家人、雇主等的公共页面展示他们的进步的能力。你可以将讨论区的状态更改为公开或私有。