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

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

开源社会大学 (OSSU)

开源社会大学

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

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

内容

总结

OSSU课程是使用在线材料的完整计算机科学教育。这不仅仅是为了职业培训或职业发展。它适用于那些想要在所有计算学科的基本概念上有一个适当、全面的基础的人,以及那些拥有学科、意愿和(最重要的是!)良好习惯的人,他们在很大程度上靠自己获得这种教育,但得到了全球学习者社区的支持。

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

课程必须

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

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

组织。课程设计如下:

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

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

Timeline
Curriculum Data

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

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

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

  • 我们建议学习核心CS的所有课程,只有在你确定自己以前已经学习过该材料时才跳过一门课程。
  • 为简单起见,我们建议按从上到下的顺序完成课程(尤其是核心 CS),因为它们已经按其先决条件进行了拓扑排序
  • 高级CS课程是选修课。选择一个你想成为专家的科目(例如高级编程),并参加该标题下的所有课程。你还可以创建自己的自定义主题,但我们建议你从社区获得所选主题的验证。

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

如何贡献

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

社区

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

课程

课程版本:(见更新日志

8.0.0
)


先决条件

  • 核心CS假设学生已经学习了高中数学,包括代数,几何和微积分预科。
  • 高级CS假设学生已经参加了整个核心CS课程,并且现在有足够的知识来决定选修哪些选修课。
  • 请注意,高级系统假设学生已经参加了基础物理课程(例如高中的AP物理)。

简介 CS

编程导论

如果你从未编写过 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小时/周 没有 聊天

高级 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小时 没有
哈斯克尔简介 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部分之后,你应该考虑一个你可以使用你获得的知识解决的问题。真正的项目工作不仅在简历上看起来很棒,而且项目还将验证和巩固你的知识。你可以创建一些全新的东西,也可以通过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小时/周 编程、交互设计

评估

完成最终项目后:

  • 通过拉取请求将项目信息提交到项目

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

不断学习

行为准则

OSSU的行为准则

如何显示你的进度

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

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

Doing
Done

我们也有标签,帮助你在整个过程中获得更多控制权。这些标签中每个的含义是:

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

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

团队