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

Created at: 2014-05-04 08:18:39
开发语言:
授权协议: MIT

开源社会大学(OSSU)

开源社会大学

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

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

内容

总结

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

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

课程必须

  • 开放注册
  • 定期运行(理想情况下以自定进度的格式运行,否则每年运行多次)
  • 在教材和教学原则方面普遍保持高质量
  • 符合 CS 2013 的课程标准:计算机科学本科学位课程的课程指南

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

组织。课程设计如下:

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

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

Timeline
Curriculum Data

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

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

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

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

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

如何贡献

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

社区

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

课程

课程版本:(见更新日志

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

除非另有说明,否则核心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小时/周 基本 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 聊天
计算机科学数学alt) 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到俄罗斯方块alt) 6 周 7-13小时/周 - 类似C的编程语言 聊天
从第一原理构建现代计算机:从南德到俄罗斯方块第二部分 6 周 12-18小时/周 - 这些编程语言之一,从Nand到俄罗斯方块第一部分 聊天
操作系统:三个简单的部分 10-12 周 6-10小时/周 - 强C编程 聊天
计算机网络:自上而下的方法 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 周 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小时/周 没有 聊天

高级 CS

完成Core 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小时/周 没有
哈斯克尔简介 14 周 - -
立即学习序言!备选案文)* 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小时/周 南德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

课程 期间 努力 先决条件
计算理论讲座)) 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小时/周 差异化和整合 聊天

最终项目

开放源码软件大学以项目为重点。每门课程的作业和考试都是为了准备你用你的知识来解决现实世界的问题。

在你读完了所有核心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 徽章放在存储库的自述文件中!开源社会大学 - 计算机科学

    • 降价:
      [![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](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通过其社区和课程,成功履行其指导独立学习者获得世界一流计算机科学教育的使命。

合作工作

你可以单独创建此项目,也可以与其他学生一起创建此项目!我们热爱合作工作!使用我们的渠道与其他研究员沟通,以结合和创建新项目!

我应该使用哪种编程语言?

我的朋友,这是自由最好的部分!你可以使用任何想要的语言来完成最终项目。

重要的是要内化核心概念,并能够将它们与你想要的任何工具(编程语言)一起使用。

祝贺

完成上述课程的要求后,你将完成相当于计算机科学的完整学士学位。祝贺!

你的下一步是什么?可能性是无限和重叠的:

  • 找一份开发人员的工作!
  • 查看你可以阅读的经典书籍的阅读材料,这些书籍将提高你的技能并扩展你的知识。
  • 加入本地开发者聚会(例如,通过 meetup.com)。
  • 关注软件开发领域的新兴技术:
    • 通过Elixir探索演员模型Elixir是一种基于经过实战考验的Erlang虚拟机的新型Web函数式编程语言!
    • 通过 Rust 探索借用和生命周期Rust 是一种无需垃圾回收器即可实现内存和线程安全的系统语言!
    • 通过Idris探索依赖类型系统Idris是一种受Haskell启发的新语言,对类型驱动开发提供了前所未有的支持。

不断学习

行为准则

奥苏组织的行为守则

如何显示你的进度

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

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

Doing
Done

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

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

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

团队