开放的社会大学

Open Source Society University (OSSU)

开源社会大学

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

Awesome Open Source Society University - Computer Science Contribute with OSSU on Patreon

Summary

OSSU课程是一门完整的计算机科学教育*,使用在线资料. 它不仅仅用于职业培训或职业发展. 对于那些希望在所有计算学科的基础上都有适当的,全面的基础的人来说, 对于那些有纪律,意志和(最重要的!)良好习惯的人来说,很大程度上靠他们自己获得这种教育, 但得到了全球学习者社区的支持.

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

课程必须: - 开放注册 - 定期运行(理想情况下是自定进度格式,否则每月至少运行一次) - 实现 academic requirements OSSU - 在主题和难度级别方面完全适应课程的进展 - 在教材和教学原则方面具有普遍的高质量

当没有课程符合上述标准时,课程补充一本书. 如果课程或书籍不符合课程要求但质量较高, 他们属于 extras/courses 要么 extras/readings.

组织. 课程设计如下: - 简介CS :让学生试用CS并查看它是否适合他们 - 核心CS :大致相当于计算机科学课程的前三年,参加所有专业需要学习的课程 - 高级CS :大致相当于计算机科学课程的最后一年,根据学生的兴趣选修 - 最终项目:一个项目,供学生验证,巩固和展示他们的知识,由全球同行评估 - * Pro CS *:如果学生想要最大限度地获得一份好工作的机会,学生可以在完成上述课程后选择完成专业

时间. 如果您仔细计划并且每周大约18-22小时的时间用于学习,则可以在大约2年内完成Core CS. 如果可能,Core CS中的课程应该线性化,但由于完全线性的进展很少可能, 指定每个类的先决条件,以便您可以设计逻辑但非线性的进展 根据课程表和您自己的人生计划.

成本. Pro CS之前的所有或几乎所有课程资料都是免费提供的, 但是,有些课程可能会为分配/测试/项目评分收取费用. 请注意Coursera提供 financial aid. 根据您自己的时间和预算决定花多少钱或多少钱; 只记得你不能购买成功!

不要不尊重您在每门课程开始时签署的行为准则

如何贡献. 请参阅 CONTRIBUTING.

获得帮助. 请检查我们 Frequently Asked Questions,如果您找不到答案,请提出问题或与我们联系 friendly community!

Curriculum

课程版8.0.0(见 CHANGELOG)


Prerequisites

  • Core CS 假设学生已经学过高中数学和物理,包括代数,几何和预微积分. 一些高中毕业生已经学习了AP微积分,但这通常只是大学微积分课程的¾,所以仍然推荐课程中的微积分课程.
  • Advanced CS 假设学生已经完成了整个Core CS 现在知识渊博,可以决定选修哪些选修课.
  • 注意 Advanced systems 假设学生参加了基础物理课程(例如高中的AP物理).

Introduction to Computer Science

这些课程将向您介绍计算机科学的世界. 两者都是必需的,但是当CS50(第一道菜)远离C时,可以直接跳到第二道菜. (Why?)

涵盖的主题命令式编程'程序编程 C 手动内存管理 基本数据结构和算法 Python SQL 基本的HTML,CSS,JavaScript `还有更多

课程 持续时间 努力 先决条件
Introduction to Computer Science - CS50 (alt 12周 每周10-20小时 没有
Introduction to Computer Science and Programming using Python 9周 每周15小时 高中代数

Core CS

除非另有说明,否则所有在Core CS下的课程都需要**.

Core programming

涵盖的主题函数式编程测试设计 程序要求'常见的设计模式 单元测试 面向对象的设计Java静态打字动态打字ML-family语言(通过标准ML)Lisp家族语言(通过Racket)Ruby还有更多

课程 持续时间 努力 先决条件
How to Code - Simple Data 7周 每周8-10小时 没有
How to Code - Complex Data 6周 每周8-10小时 如何编码:简单数据
Software Construction - Data Abstraction 6周 每周8-10小时 如何编码 - 复杂数据
Software Construction - Object-Oriented Design 6周 每周8-10小时 软件构建 - 数据抽象
Programming Languages, Part A 4周 每周8-16小时 推荐:Java,C
Programming Languages, Part B 3周 每周8-16小时 编程语言,A部分
Programming Languages, Part C 3周 每周8-16小时 编程语言,B部分

Readings

Core math

涵盖的主题线性变换'matricesvectors数学证明 数论'微积分积分' 序列和系列 离散数学 基本统计'O-notation图论 矢量微积分离散概率' `还有更多

课程 持续时间 努力 先决条件
Essence of Linear Algebra - - 前演算
Linear Algebra - Foundations to Frontiers (alt 15周 每周8小时 线性代数的本质
Calculus One1 (alt 16周 每周8-10小时 前演算
Calculus Two: Sequences and Series 7周 每周9-10小时 微积分一
Mathematics for Computer Science 13周 每周5小时 单变量微积分(微积分二)

1注意:当您注册时,请看到这一点 list of errors and these recommendations 如何在课程中取得进步.

Core systems

涵盖的主题boolean algebra 门逻辑 memory 机器语言 计算机建筑 assembly 机器语言 虚拟机 高级语言 compilers 操作系统 网络协议 `还有更多

课程 持续时间 努力 先决条件
Build a Modern Computer from First Principles: From Nand to Tetris (alt 6周 每周7-13小时 没有
Build a Modern Computer from First Principles: Nand to Tetris Part II 6周 每周12-18小时 从Nand到Tetris第一部分
Introduction to Computer Networking 8周 每周4-12小时 代数,概率,基本CS
ops-class.org - Hack the Kernel 15周 每周6小时 算法

Readings

Core theory

涵盖的主题: “分而治之” 排序和搜索 随机算法 图搜索 “最短路径” 数据结构'贪心算法 最小生成树'动态编程NP-completeness还有更多

课程 持续时间 努力 先决条件
Algorithms: Design and Analysis, Part I 8周 每周4-8小时 任何编程语言,计算机科学数学
Algorithms: Design and Analysis, Part II 8周 每周4-8小时 第一部分

Core applications

涵盖的主题: “敏捷方法论” REST 软件规格 refactoring 关系数据库 交易处理 数据建模 神经网络监督学习无监督学习 OpenGL raytracing block ciphers authentication 公钥加密 `还有更多

课程 持续时间 努力 先决条件
Databases 12周 每周8-12小时 一些编程,基本的CS
Machine Learning 11周 4-6小时/周 线性代数
Computer Graphics 6周 每周12小时 C ++或Java,线性代数
Cryptography I 6周 5-7小时/周 线性代数,概率
Software Engineering: Introduction 6周 每周8-10小时 软件构建 - 面向对象设计
Software Development Capstone Project 6-7周 每周8-10小时 软件工程:简介

Advanced CS

完成 Core CS中的每个必修课程后,学生应根据兴趣选择Advanced CS的一系列课程. 不是每个子类别的课程都需要采取. 但是学生应该选择与他们打算进入的领域相关的每个课程.

然后,高级CS研究应以其中一个专业化结束 Advanced applications. 专业化的顶点如果被采用,可以作为 Final project,如果课程的荣誉准则允许的话. 如果没有,或者如果学生选择不参加Capstone,则需要单独的最终项目来完成此课程.

Advanced programming

涵盖的主题调试理论与实践' “面向目标的编程”GPU编程 CUDA 并行计算 “面向对象的分析和设计”UML大规模软件架构和设计还有更多

课程 持续时间 努力 先决条件
Compilers 9周 每周6-8小时 没有
Software Debugging 8周 每周6小时 Python,面向对象的编程
Software Testing 4周 每周6小时 编程经验
LAFF: Programming for Correctness 7周 每周6小时 线性代数
Introduction to Parallel Programming 12周 - C,算法
Software Architecture & Design 8周 每周6小时 Java中的软件工程

Advanced math

涵盖的主题参数方程式极坐标系多变量积分“多变量差异”概率论还有更多

课程 持续时间 努力 先决条件
Calculus: Parametric Equations and Polar Coordinates - - 单变量微积分(微积分二)
Multivariable Calculus 13周 每周12小时 参数方程和极坐标
Introduction to Probability - The Science of Uncertainty 18周 每周12小时 多变量微积分

Advanced systems

涵盖的主题数字信号 组合逻辑'CMOS技术顺序逻辑' 有限状态机 处理器指令集 caches pipelining virtualization 并行处理'虚拟记忆同步原语系统调用接口还有更多

课程 持续时间 努力 先决条件
Electricity and Magnetism, Part 1 1 7周 每周8-10小时 微积分,基本力学
Electricity and Magnetism, Part 2 7周 每周8-10小时 电和磁,第1部分
Computation Structures 1: Digital Circuits 10周 每周6小时 电,磁
Computation Structures 2: Computer Architecture 10周 每周6小时 计算结构1
Computation Structures 3: Computer Organization 10周 每周6小时 计算结构2

1: 这些课程假设基础物理知识. (Why?) 如果您正在努力,您可以找到物理MOOC或使用可汗学院的材料: Khan Academy - Physics

Advanced theory

涵盖的主题正式语言 图灵机computability事件驱动的并发automatadistributed shared memory共识算法' 状态机复制 计算几何理论 “命题逻辑” “关系逻辑” Herbrand逻辑 概念格子 游戏树'还有更多

课程 持续时间 努力 先决条件
Introduction to Logic 10周 每周4-8小时 集合论
Automata Theory 8周 每周10小时 离散数学,逻辑,算法
Reliable Distributed Systems, Part 1 5周 每周5小时 Scala,中级CS
Reliable Distributed Systems, Part 2 5周 每周5小时 第1部分
Computational Geometry 16周 每周8小时 算法,C ++
Introduction to Formal Concept Analysis 6周 4-6小时/周 逻辑,概率
Game Theory 8周 x小时/周 数学思维,概率,微积分

Advanced applications

这些Coursera专业化都以Capstone项目结束. 根据课程的不同,您可以将Capstone用作此计算机科学课程的最终项目. 请注意,在最后使用Capstone进行专业化总是要花钱. 因此,如果您不想花钱或使用Capstone作为决赛,可以通过手动搜索专业版免费参加专业课程,但并非所有人都允许这样做.

课程 持续时间 努力 先决条件
Robotics (Specialization) 26周 2-5小时/周 线性代数,微积分,编​​程,概率
Data Mining (Specialization) 30周 2-5小时/周 机器学习
Big Data (Specialization) 30周 每周3-5小时 没有
Internet of Things (Specialization) 30周 1-5小时/周 强大的编程
Cloud Computing (Specialization) 30周 2-6小时/周 C ++编程
Full Stack Web Development (Specialization) 27周 2-6小时/周 编程,数据库
Data Science (Specialization) 43周 1-6小时/周 没有
Functional Programming in Scala (Specialization) 29周 4-5小时/周 一年的编程经验

Final project

OSS大学以项目为中心. 我们鼓励你为每门课程完成作业和考试,但真正重要的是你是否可以*用你的知识来解决现实问题.

在您了解了所有Core CS以及与您相关的高级CS部分之后,您应该考虑使用您获得的知识可以解决的问题. 真正的项目工作不仅在简历上看起来很棒,项目将验证巩固您的知识. 你可以创建一些全新的东西,或者你可以通过网站找到需要帮助的现有项目 CodeTriage or First Timers Only.

另一个选择是使用Capstone项目从中获得一个专业化 Advanced applications; 这是否有意义取决于课程,项目,以及课程的荣誉准则是否允许您公开展示您的作品. In some cases, it may not be permitted; 不要**违反你的课程荣誉准则!

将OSSU-CS徽章放入存储库的README中! Open Source Society University - Computer Science

  • Markdown: [![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)
  • HTML:<img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"></a>

Evaluation

完成最终项目后,将项目信息提交给 PROJECTS 通过拉取请求并使用我们 community 渠道向你的同学宣布.

然后,来自OSSU的同事和导师将非正式地评估您的项目. 你不会被传统意义上的“评分” - 每个人都有他们自己衡量成功的标准. 评估的目的是作为您向全世界首次宣布您是计算机科学家, 并获得听取反馈的经验 - 无论是积极的还是消极的 - 并且大步迈进.

最终项目评估的第二个目的是:评估是否OSSU, 通过其社区和课程,成功地指导独立学习者获得世界一流的计算机科学教育.

Cooperative work

您可以单独创建此项目或与其他学生一起创建! 我们喜欢合作! 用我们 channels 与其他研究员沟通,结合并创造新项目!

Which programming languages should I use?

我的朋友,这是自由的最佳部分! 您可以使用任何**语言来完成最终项目.

重要的是内化核心概念,并能够使用您希望的任何工具(编程语言).

Pro CS

完成上述课程的要求后,您将完成相当于计算机科学的完整学士学位,或相当接近一个. 您可以在高级CS部分停止,但完成学业的下一步是培养特定领域的技能和知识. 其中许多课程都是研究生水平的.

选择以下一项或多项专业: - Mastering Software Development in R Specialization 约翰霍普金斯大学 - Artificial Intelligence Engineer Nanodegree 由IBM,亚马逊和Didi提供 - Machine Learning Engineer Nanodegree 通过kaggle - Cybersecurity MicroMasters 罗彻斯特理工学院 - Android Developer Nanodegree 由谷歌

这些不是您可以选择的唯一专业. 查看以下网站了解更多选项: - edX: xSeries - Coursera: Specializations - Udacity: Nanodegree

Where to go next?

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

keep learning

Code of conduct

OSSU's code of conduct.

Community

> PS :论坛是与其他学生互动的理想方式,因为我们不会丢失重要的讨论,这些讨论通常通过聊天应用程序进行. 请使用我们的论坛进行重要讨论.

How to show your progress

1.在中创建一个帐户 Trello. 1.复制 this 登上您的个人帐户. 了解如何复制电路板 here.

现在您已经拥有了我们官方董事会的副本,您只需要在学习进度时将卡片传递到“正在进行”栏目或“完成”栏目.

我们还有标签,以帮助您在整个过程中获得更多控制权. 每个标签的含义是:

  • “主要课程”:带有该标签的卡片代表我们课程中列出的课程.
  • “额外资源”:带有该标签的卡片代表学生添加的课程.
  • “做”:带有该标签的卡片代表学生目前正在做的课程.
  • “完成”:带有该标签的卡片代表学生完成的课程. 这些卡片还应包含至少一个项目/文章的链接,该项目/文章使用在此课程中获得的知识构建.
  • Section:带有该标签的卡片代表我们课程中的部分. 那些带有“Section”标签的卡片只是为了帮助组织Done列. 您应该将课程卡放在其各自的部分卡之下.

该委员会的目的是为我们的学生提供一种跟踪他们进步的方法,以及通过公共页面向朋友,家人,雇主等展示其进展的能力. 您可以将电路板的状态更改为 public private .

Team

References