computer-science - 🎓计算机科学免费自学教程!

Created at: 2014-05-04 08:18:39
Language:
License: MIT

开源社会大学 (OSSU)

开源社会大学

通往计算机科学免费自学教育的道路!

棒 开源社会大学 - 计算机科学

内容

总结

OSSU课程是使用在线材料进行的完整计算机科学教育。 这不仅仅是为了职业培训或专业发展。 它适用于那些想要在所有计算学科的基础概念方面有适当、全面基础的人, 对于那些有纪律、意志和(最重要的是!)良好习惯的人来说,他们主要靠自己获得这种教育, 但在全球学习者社区的支持下。

根据本科计算机科学专业的学位要求,减去通识教育(non-CS)要求, 因为假设大多数遵循该课程的人已经在 CS 领域之外接受过教育。 这些课程本身是世界上最好的课程之一,通常来自哈佛大学、普林斯顿大学、 MIT 等。 但特别选择满足以下标准。

课程必须

  • 开放注册
  • 定期运行(最好是自定进度的格式,否则每年运行多次)
  • 教材和教学原则普遍较高
  • 符合 CS 2013 的课程标准:计算机科学本科学位课程课程指南

当没有课程符合上述标准时,课程作业将辅以一本书。 当有课程或书籍不适合课程但质量很高时, 它们属于附加/课程或附加/阅读

组织。课程设计如下:

  • CS简介:让学生尝试CS,看看它是否适合他们
  • 核心计算机科学:大致相当于计算机科学课程的前三年,选修所有专业都必须参加的课程
  • 高级计算机科学:大致相当于计算机科学课程的最后一年,根据学生的兴趣选修课
  • 期末项目:一个让学生验证、巩固和展示他们的知识的项目,由世界各地的同龄人进行评估

持续时间。如果你仔细计划并每周投入大约 20 小时的学习时间,则有可能在大约 2 年内完成。学习者可以使用此电子表格来估计他们的结束日期。复印一份,并在表格中输入你的开始日期和预计每周小时数。在学习课程时,你可以在工作表中输入实际的课程完成日期,并获取更新的完成估计。

Timeline
Curriculum Data

警告:虽然电子表格是估计完成此课程所需时间的有用工具,但它可能不是与课程表保持同步。使用电子表格只是为了估计你需要的时间。使用 OSSU CS 网站存储库查看要学习的课程。

成本。所有或几乎所有课程材料均免费提供。但是,有些课程可能会对要评分的作业/测试/项目收费。 请注意,CourseraedX 都提供经济援助。

根据你自己的时间和预算决定花多少钱; 请记住,你无法购买成功!

过程。学生可以单独或分组完成课程,按顺序或不按顺序完成。

  • 我们建议你在 Core CS 中学习所有课程,只有在你确定之前已经学习过该材料时才跳过课程。
  • 为简单起见,我们建议按从上到下的顺序完成课程(尤其是核心 CS)。一些学生选择一次学习多门课程,以便将他们正在学习的材料改变为一天/一周。一个流行的选择是将数学课程与入门课程同时进行。列出了课程先决条件,以帮助你确定你是否为给定课程做好了准备。
  • 高级计算机科学课程是选修课。选择一个你想成为专家的科目(例如高级编程),并参加该标题下的所有课程。你还可以创建自己的自定义主题;Discord 社区可能会就你计划的主题提供反馈。

内容策略。如果你打算公开展示你的某些课程作业,则只能共享你被允许共享的文件。尊重你在每门课程开始时签署的行为准则

如何贡献

获取帮助(有关我们的常见问题和聊天室的详细信息)

社区

  • 我们有一个 discord 服务器!不和这应该是你与其他OSSU学生交谈的第一站。你为什么不现在就自我介绍一下?加入 OSSU Discord
  • 你还可以通过 GitHub 问题进行交互。如果课程有问题,或者需要对课程进行更改,这里是开始对话的地方。在此处阅读更多内容。
  • 订阅我们的时事通讯
  • 开源社会大学添加到你的 LinkedIn 个人资料!

警告:在搜索 OSSU 时,你可能会发现一些第三方/已弃用/过时的材料。建议忽略它们,仅使用 OSSU CS 网站或 OSSU CS Github Repo。一些已知的过时材料是:

  • 未维护且已弃用的 firebase 应用。在常见问题解答中阅读更多内容。
  • 未维护且已弃用的 Trello 看板
  • 第三方概念模板

课程

课程表版本:(见更新日志

8.0.0
)


先决条件

  • Core CS 假设学生已经学过高中数学,包括代数、几何和微积分预科。
  • 高级 CS 假设学生已经学习了整个 Core CS 课程 并且现在知识渊博,可以决定选修哪些选修课。
  • 请注意,高级系统假设学生已经学习了基础物理课程(例如高中的 AP 物理)。

CS 简介

编程概论

如果你从未编写过 for 循环,或者不知道编程中的字符串是什么,请从这里开始。本课程是自定进度的,允许你调整每周花费的小时数以满足你的需求。

涵盖的主题

simple programs
simple data structures

课程 期间 努力 先决条件 讨论
编程入门 10周 10小时/周 没有 聊天

计算机科学导论

本课程将向你介绍计算机科学的世界。从上述课程或其他地方学习过编程的学生应该参加本课程,以了解即将到来的材料。如果你完成课程想要更多,计算机科学可能适合你!

涵盖的主题

computation
imperative programming
basic data structures and algorithms
and more

课程 期间 努力 先决条件 讨论
计算机科学导论和使用 Python 编程备选) 9周 15小时/周 高中代数 聊天

核心 CS

除非另有说明,否则核心 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 聊天

CS 工具

理解理论很重要,但你也需要创建程序。有许多工具被广泛使用,可以使该过程更容易。立即学习它们,以简化你未来的工作写作计划。

涵盖的主题

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 的每门必修课程后,学生应根据兴趣从高级 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部分之后,你应该考虑一个你可以用你所获得的知识来解决的问题。 真正的项目工作不仅在简历上看起来很棒,而且项目还将验证和巩固你的知识。 你可以创建全新的东西,也可以通过 CodeTriageFirst 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 徽章放在存储库的 README 中!开源社会大学 - 计算机科学

    • 降价:
      [![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)。
  • 关注软件开发领域的新兴技术:
    • 通过 Elixir 探索 actor 模型Elixir 是一种基于久经考验的 Erlang 虚拟机的新型 Web 函数式编程语言!
    • 通过 Rust 探索借用和生存期Rust 是一种无需垃圾收集器即可实现内存和线程安全的系统语言!
    • 通过 Idris 探索依赖类型系统Idris 是一种受 Haskell 启发的新语言,对类型驱动开发提供了前所未有的支持。

不断学习

行为准则

OSSU的行为准则

如何显示你的进度

将 GitHub 存储库分叉到你自己的 GitHub 帐户中,并在完成时放在✅已完成的内容旁边。这可以作为你的看板,并且比任何其他解决方案实施得更快(让你有时间花在课程上)。

团队