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

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

开源社会大学 (OSSU)

开源社会大学

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

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

内容

总结

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

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

课程必须

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

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

组织。课程设计如下:

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

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

Timeline
Curriculum Data

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

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

过程。学生可以单独或分组学习课程,可以按顺序或无序学习。

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

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

如何贡献

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

社区

  • 我们有一个 discord 服务器!不和这应该是你与其他OSSU学生交谈的第一站。你为什么不现在就介绍自己呢?加入 OSSU Discord
  • 你还可以通过 GitHub 问题进行交互。如果课程有问题,或者需要对课程进行更改,这里是开始对话的地方。在此处阅读更多内容。
  • 订阅我们的时事通讯
  • 开源社会大学添加到你的 LinkedIn 个人资料中!
  • 注意:在搜索 OSSU 时,你可能会发现一个未维护且已弃用的 firebase 应用。你可以放心地忽略它。在常见问题解答中阅读更多内容。

课程

课程版本:(见 CHANGELOG

8.0.0
)


先决条件

  • 核心 CS 假设学生已经学过高中数学,包括代数、几何和微积分预科。
  • 高级 CS 假设学生已经学习了全部核心 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

除非另有说明,否则所有核心计算机科学课程都是必需的。

核心编程

涵盖的主题

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 聊天

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到俄罗斯方块第一部分 聊天
操作系统: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 小时/周 没有 聊天

高级 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,编程经验

(*) 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 部分之后,你应该考虑一个你可以用你所获得的知识来解决的问题。不仅真实的项目工作在简历上看起来很棒,而且该项目还将验证和巩固你的知识。你可以创建全新的东西,也可以通过 CodeTriageFirst 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

  • 将 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的行为准则

如何显示你的进度

  1. Trello 中创建帐户。
  2. 将此看板复制到你的个人帐户。在此处查看如何复制看板。

现在你已经有了我们官方板的副本,你只需要在学习过程中将卡片传递给列或列即可。

Doing
Done

我们还有标签,可帮助你在整个过程中更好地控制。每个标签的含义是:

  • Main Curriculum
    :带有该标签的卡片代表我们课程表中列出的课程。
  • Extra Resources
    :带有该标签的卡片表示学生添加的课程。
  • Doing
    :带有该标签的卡片代表学生当前正在学习的课程。
  • Done
    :带有该标签的卡片代表学生完成的课程。这些卡片还应该包含至少一个项目/文章的链接,这些项目/文章是用在此类课程中获得的知识构建的。
  • Section
    :带有该标签的卡片代表我们课程中的部分。那些带有标签的卡片只是为了帮助组织“完成”列。你应该将课程的卡片放在其各自部分的卡片下方。
    Section

该委员会的目的是为我们的学生提供一种跟踪他们进度的方法,以及通过朋友、家人、雇主等的公共页面显示他们进度的能力。你可以将讨论区的状态更改为公开私有

团队