❤️💕💕CS自学指南,大学教育无论是深度还是广度都没有办法支撑我们的职业素养,这个板块算是自己在CS学习中额外补充和记录的。个人博客:http://nsddd.top
[TOC]
计算机科学免费自学教育之路!
OSSU 课程是使用在线材料进行的**完整的计算机科学教育。**这不仅仅是为了职业培训或职业发展。它适用于那些想要在所有计算学科的基础概念方面有适当、全面的基础的人,以及那些有纪律、意志和(最重要的是!)良好习惯的人,主要是靠自己获得这种教育,但需要支持来自世界各地的学习者社区。
它是根据本科计算机科学专业的学位要求设计的,减去通识教育(非 CS)要求,因为假设大多数学习此课程的人已经在 CS 领域之外接受过教育。这些课程本身是世界上最好的,通常来自哈佛、普林斯顿、麻省理工等,但经过专门选择以满足以下标准。
课程必须:
- 开放报名
- 定期运行(最好是自定进度,否则每年运行多次)
- 教学材料和教学原则的质量普遍较高
- 符合CS 2013的课程标准:计算机科学本科学位课程的课程指南
当没有课程符合上述标准时,课程作业将辅以书籍。当有课程或书籍不适合课程但质量很高时,它们属于extras/courses或extras/readings。
组织。课程设计如下:
- 介绍 CS:让学生尝试 CS,看看它是否适合他们
- Core CS:大致相当于计算机科学课程的前三年,参加所有专业都必须参加的课程
- Advanced CS:大致相当于计算机科学课程的最后一年,根据学生的兴趣选修
- 最终项目:一个让学生验证、巩固和展示他们的知识的项目,以供他们在世界各地的同龄人评估
持续时间。如果您仔细计划并每周投入大约 20 小时的学习时间,则可以在大约 2 年内完成学业。学习者可以使用这个价差 来估计他们的结束日期。制作一份副本并在工作表中输入您的开始日期和每周预计小时数Timeline
。当您完成课程时,您可以在Curriculum Data
表格中输入您的实际课程完成日期并获得更新的完成估计。
成本。所有或几乎所有课程材料都免费提供。但是,某些课程可能会为要评分的作业/测试/项目收费。请注意,Coursera和edX都提供经济援助。
根据您自己的时间和预算决定花费多少或多少;请记住,您不能购买成功!
过程。学生可以单独或分组学习课程,有序或无序。
- 我们建议您在 Core CS 中完成所有课程,只有在您确定之前已经学习过该材料时才跳过课程。
- 为简单起见,我们建议按照从上到下的顺序学习课程(尤其是 Core CS),因为它们已经按照先决条件进行了拓扑排序。
- 高级 CS 课程是选修课。选择你想成为专家的一门学科(例如高级编程),然后学习该标题下的所有课程。您也可以创建自己的自定义主题,但我们建议您从社区获得对您选择的主题的验证。
内容政策。如果您打算公开展示您的一些课程作业,则必须仅共享您被允许共享的文件。 不要不尊重您在每门课程开始时签署的行为准则!
获得帮助(关于我们的常见问题和聊天室的详细信息)
- 我们有一个不和谐的服务器!
这应该是您与其他 OSSU 学生交谈的第一站。你为什么不现在自我介绍一下?加入 OSSU Discord
- 您还可以通过 GitHub 问题进行交互。如果课程有问题,或者需要对课程进行更改,这里就是开始对话的地方。在这里阅读更多。
- 订阅我们的时事通讯。
- 将开源社会大学添加到您的LinkedIn个人资料中!
- 注意:在搜索 OSSU 时,您可能会发现一个未维护且已弃用的 firebase 应用程序。您可以放心地忽略它。在常见问题解答中阅读更多信息。
课程版本:(8.0.0
见变更日志)
- Core CS假设学生已经学习过高中数学,包括代数、几何和微积分。
- 高级 CS假定学生已经学习了全部核心 CS,并且现在知识渊博,可以决定选修哪些选修课。
- 请注意,高级系统假定学生已经学习了基础物理课程(例如高中的 AP 物理)。
如果您从未编写过 for 循环,或者不知道编程中的字符串是什么,请从这里开始。本课程是自定进度的,允许您调整每周花费的小时数以满足您的需求。
涵盖的主题: simple programs
simple data structures
培训班 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
适合所有人的 Python | 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
How to Code 课程基于教科书How to Design Programs。第一版可在线免费获得,包括问题集和解决方案。鼓励学生完成这些作业。
培训班 | 期间 | 努力 | 先决条件 | 讨论 |
---|---|---|---|---|
如何编码 - 简单数据 | 7 周 | 8-10 小时/周 | 没有任何 | 聊天 |
如何编码 - 复杂数据 | 6 周 | 8-10 小时/周 | 如何编码:简单数据 | 聊天 |
编程语言,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:微分( alt ) | 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 到俄罗斯方块( alt ) | 6 周 | 7-13 小时/周 | - | 类 C 编程语言 | 聊天 |
从第一原理构建现代计算机:Nand 到俄罗斯方块第二部分 | 6 周 | 12-18 小时/周 | - | 其中一种编程语言,从 Nand 到俄罗斯方块第一部分 | 聊天 |
操作系统:三个简单的部分 | 10-12 周 | 6-10 小时/周 | - | 强大的 C 编程 | 聊天 |
计算机网络:自上而下的方法 | 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 周 | 4-6 小时/周 | 线性代数 | 聊天 |
计算机图形学 | 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小时/周 | 没有任何 | 聊天 |
在完成Core CS 的所有必修课程后,学生应根据兴趣从 Advanced 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 小时/周 | 斯卡拉编程 |
编译器 | 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:数字电路 alt1 alt2 | 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
培训班 | 期间 | 努力 | 先决条件 |
---|---|---|---|
计算理论(讲座) | 8 周 | 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 小时/周 | 集合论 | 聊天 |
可能性 | 24 周 | 12 小时/周 | 差异化与整合 | 聊天 |
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 。
- 将 OSSU-CS 徽章放入存储库的自述文件中!
- 降价:
[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)
- HTML:
<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 通过其社区和课程是否成功地完成了引导独立学习者获得世界级计算机科学教育的使命。
您可以单独或与其他学生一起创建此项目! 我们热爱合作工作!使用我们的渠道与其他伙伴交流以组合和创建新项目!
我的朋友,这就是自由最好的部分!您可以使用任何您想要完成最终项目的语言。
重要的是内化核心概念并能够将它们与您希望的任何工具(编程语言)一起使用。
完成上述课程的要求后,您将完成相当于完整的计算机科学学士学位。恭喜!
你的下一步是什么?可能性是无限的和重叠的:
- 寻找开发人员的工作!
- 查看您可以阅读的经典书籍的阅读材料,这些书籍将提高您的技能并扩展您的知识。
- 加入本地开发者聚会(例如通过meetup.com)。
- 关注软件开发领域的新兴技术:
现在您已经拥有了我们的官方板的副本,您只需在学习过程中将卡片传递到Doing
列或Done
列。
我们还提供标签来帮助您更好地控制整个过程。每个标签的含义是:
Main Curriculum
:带有该标签的卡片代表我们课程中列出的课程。Extra Resources
:带有该标签的卡片代表学生添加的课程。Doing
:带有该标签的卡片代表学生当前正在学习的课程。Done
:带有该标签的卡片代表学生完成的课程。这些卡片还应该包含至少一个项目/文章的链接,这些项目/文章是利用在此类课程中获得的知识构建的。Section
:带有该标签的卡片代表我们课程中的部分。那些带有Section
标签的卡片只是为了帮助完成列的组织。您应该将课程卡片放在相应部门卡片的下方。
该板的目的是为我们的学生提供一种跟踪他们的进度的方法,以及通过朋友、家人、雇主等的公共页面展示他们的进度的能力。您可以将董事会的状态更改为公开或私人的。
- Eric Douglas : OSSU 的创始人
- Josh Hanson:首席技术维护人员
- Waciuma Wanjohi:首席学术维护者
- 贡献者