开放的社会大学

Open Source Society University (OSSU)

Open Source Society University

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

Awesome Open Source Society University - Computer Science

Summary

OSSU课程是使用在线材料进行的“计算机科学完全教育”. 它不仅用于职业培训或专业发展. 适用于那些希望在所有计算机科学的基础概念上有适当,全面的基础的人, 对于那些有纪律的人,他们将(而且最重要的是!)有良好的习惯来很大程度上靠自己获得这种教育, 但是在世界各地的学习者社区的支持下.

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

必修课程: -接受报名 -定期运行(最好以自定进度的格式运行,否则每年运行多次) -教材和教学法的质量普遍较高 -符合课程标准 CS 2013:计算机科学专业本科课程大纲

如果没有课程符合以上条件,则以书为辅. 如果课程或书籍不符合课程要求,但质量较高, 他们属于 extras/courses 要么 extras/readings.

组织. 课程设计如下: -简介CS :让学生尝试CS,看看是否适合他们 -核心CS :大致对应于计算机科学课程的前三年,所有专业都必须参加的课程 -高级CS :大致对应于计算机科学课程的最后一年,根据学生的兴趣选择选修课 -最终项目:一个供学生验证,巩固和展示其知识的项目,供世界各地的同行评估

持续时间. 如果您精心计划并每周花大约18-22个小时学习,则可以在大约2年内完成Core CS. 如果可能,Core CS的课程应采用线性课程,但由于极不可能实现完全线性的课程, 指定每个班级的前提条件,以便您可以设计逻辑但非线性的进度 根据课程表和您自己的生活计划.

成本. 所有或几乎所有课程资料都是免费提供的. 但是,某些课程可能会为要评分的作业/测试/项目收取费用. 请注意,Coursera提供 financial aid.

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

处理. 学生可以单独或按组,按顺序或按顺序学习课程. -要分组,请使用 cohorts repository 查找或创建适合您的同类群组. -我们建议您在Core CS中完成所有课程,仅在确定您以前已经学习过这些材料后才跳过课程. -为简单起见,我们建议您按从上到下的顺序学习课程(尤其是核心CS) topologically sorted 根据他们的先决条件. -高级CS课程为选修课. 选择一个您想成为专家的科目(例如高级编程),并选择该标题下的所有课程. 您也可以创建自己的自定义主题,但是我们建议您从社区中获得对所选主题的验证.

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

How to contribute

Getting help(有关我们的常见问题解答和聊天室的详细信息)

Community

-我们有一个聊天室! 这应该是您与其他OSSU学生交谈的第一站. 您为什么现在不自我介绍? Join the chat in Gitter Join the chat at https://gitter.im/open-source-society/computer-science -您也可以通过 GitHub issues . 如果课程有问题,或者需要对课程进行更改,这是开始对话的地方. 阅读更多 here. -将开源社会大学添加到您 Linkedin 轮廓! -注意:在搜索OSSU时,您可能会找到一个未维护且已弃用的Firebase应用程序. 您可以放心地忽略它. 阅读更多 FAQ.

Curriculum

课程版本8.0.0(请参见 CHANGELOG)


Prerequisites

  • Core CS 假设学生已经参加了 high school math,包括代数,几何和预演算.
  • Advanced CS 假设学生已经掌握了整个核心CS 并且现在已经足够知识来决定选修哪个选修课了.
  • 注意 Advanced systems 假设学生已修过一门基础物理课程(例如高中的AP物理).

Intro CS

Introduction to Programming

如果您从未编写过for循环,或者不知道编程中的字符串是什么,请从这里开始. 选择以下两个课程系列之一. 任一种都会给您介绍编程的入门知识,而无需任何先验知识. 您可以免费审核_,为此,请单击以浏览专业化课程中的各个课程.

试图在他们之间做出决定?

_Python for Everyone_会为您介绍一种流行的语言,并将使用Web API和数据库迅速转移到实际的编程任务. 这将使您了解许多专业开发人员的工作.

_《计算机基础知识》也将从向您介绍Python开始. 然后继续进行介绍计算机科学方面的主题,例如排序和递归. 这将使您了解以下课程的内容. (完成“计算机基础知识”的学生可以跳过计算机科学入门,并开始学习CS工具.)

涵盖的主题: 简单的程序 简单的数据结构

课程 努力 先决条件 :-- | :--: | :--: Python for Everyone (alt )| 58小时| 没有 Fundamentals of Computing | 138小时| 高中数学

Introduction to Computer Science

本课程将向您介绍计算机科学领域. 从以上课程或其他地方学习过编程的学生,都应选修本课程,以获取丰富的材料. 如果您想要完成更多的课程,计算机科学很可能适合您!

涵盖的主题computation 命令式编程 基本数据结构和算法 还有更多

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Introduction to Computer Science and Programming using Python (alt )| 9周 每周15小时| high school algebra

Introduction to CS Tools

理解理论很重要,但是您也应该创建程序. 有许多工具被广泛使用以简化该过程. 立即学习它们,以简化您将来编写程序的工作.

涵盖的主题: 终端和外壳脚本 vim 命令行环境 版本控制 还有更多

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: The Missing Semester of Your CS Education | 2周 每周12小时| --

Core CS

除非另有说明,否则必修必修的所有CS课程.

Core programming

涵盖的主题: 功能编程 “测试设计” 程序要求 通用设计模式 单元测试 面向对象设计 Java 静态打字 动态打字 ML系列语言(通过标准ML) Lisp家庭语言(通过球拍) Ruby 还有更多

如何编码课程基于教科书 How to Design Programs . 第一版可在线免费获得,其中包括问题集和解决方案. 鼓励学生做这些作业.

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: How to Code - Simple Data | 7周 每周8-10小时| 没有 How to Code - Complex Data | 6周 每周8-10小时| 如何编码:简单数据 Programming Languages, Part A | 5周 每周4-8小时| 如何编码(Hear instructor) Programming Languages, Part B | 3周 每周4-8小时| 编程语言,A部分 Programming Languages, Part C | 3周 每周4-8小时| 编程语言,B部分

Math Electives

学生必须选择以下主题之一:微积分,线性代数,逻辑或概率.

Calculus

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Calculus 1A: Differentiation | 13周| 每周6-10个小时| pre-calculus Calculus 1B: Integration | 13周| 每周5-10个小时| 微积分1A Calculus 1C: Coordinate Systems & Infinite Series | 6周 每周5-10个小时| 微积分1B

Linear Algebra

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Essence of Linear Algebra | - | - | pre-calculus Linear Algebra | 14周| 每周12小时| 线性代数的本质

Logic

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Introduction to Logic | 10周 每周4-8小时| set theory

Probability

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Introduction to Probability - The Science of Uncertainty | 18 weeks | 12 hours/week | Multivariable Calculus

Core Math

除了选修数学外,学生还必须完成以下有关离散数学的课程.

涵盖的主题: 离散数学 数学证明 基本统计 O-notation 离散概率 还有更多

课程 持续时间| 努力 注意事项 先决条件 :-- | :--: | :--: | :--: | :--: Mathematics for Computer Science | 13周| 每周5小时| 带有问题集解决方案的备用版本是 here . 挣扎的学生可以考虑 Discrete Mathematics Specialization 第一. 它更具交互性,但不全面,并且花费金钱才能实现完全的交互性. | 微积分1C

Core systems

涵盖的主题: 过程编程 手动内存管理 布尔代数 门逻辑 memory 计算机架构 assembly 机器语言 虚拟机 “高级语言” compilers 操作系统 网络协议 还有更多

课程 持续时间| 努力 其他文字/作业| 先决条件 :-- | :--: | :--: | :--: | :--: Introduction to Computer Science - CS50 (alt )| 12周| 每周10到20个小时| 在有关C的各节之后,跳到下一门课程. Why? | 入门编程 Build a Modern Computer from First Principles: From Nand to Tetris (alt )| 6周 每周7-13个小时| -| 类似于C的编程语言 Build a Modern Computer from First Principles: Nand to Tetris Part II | 6周 每周12-18个小时| -| 之一 these programming languages,从南德到俄罗斯方块第一部分 Introduction to Computer Networking | 8周 每周4–12小时| Assignment 1
Assignment 2
Assignment 3
Assignment 4 | 代数,概率,基本CS Operating Systems: Three Easy Pieces | 10-12周| 每周6个小时| Homework Lectures Supplement | 算法

Core theory

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

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Divide and Conquer, Sorting and Searching, and Randomized Algorithms | 4周 每周4-8小时| 任何编程语言,计算机科学数学 Graph Search, Shortest Paths, and Data Structures | 4周 每周4-8小时| 分而治之,排序和搜索以及随机算法 Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming | 4周 每周4-8小时| 图搜索,最短路径和数据结构 Shortest Paths Revisited, NP-Complete Problems and What To Do About Them | 4周 每周4-8小时| 贪婪算法,最小生成树和动态规划

Core Security

涵盖的主题 机密性,完整性,可用性 安全设计 防御性编程 威胁和攻击 网络安全 Cryptography 还有更多

注意: 这些课程是临时推荐的 . 有一个开放 Request For Comment 关于安全课程的选择. 鼓励贡献者比较RFC中的各种课程并提供反馈.

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Information Security: Context and Introduction | 5周 每周3个小时| -- Principles of Secure Coding | 4周 每周4小时| -- Identifying Security Vulnerabilities | 4周 每周4小时| --

选择以下一项: 课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Identifying Security Vulnerabilities in C/C++Programming | 4周 每周5小时| -- Exploiting and Securing Vulnerabilities in Java Applications | 4周 每周5小时| --

Core applications

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

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Relational Database Systems | 6周 每周3个小时| -- Machine Learning | 11周| 每周4-6个小时| 线性代数 Computer Graphics | 6周 每周12小时| C ++或Java,线性代数 Software Engineering: Introduction | 6周 每周8-10小时| 核心编程,以及 sizable project Software Development Capstone Project | 6-7周| 每周8-10小时| 软件工程:简介

Advanced CS

在完成了核心CS的“每门必修课程”之后,学生应根据兴趣从Advanced CS中选择一门课程. 并非每个子类别的课程都需要学习. 但是学生应该选择与他们打算进入的领域相关的“每门”课程.

然后,高级CS研究应以以下专业领域之一结束 Advanced applications. 专业化的顶峰(如果采取的话)可以充当 Final project(如果该课程的荣誉守则允许). 如果没有,或者如果学生选择不参加Capstone,则需要完成一个单独的Final项目来完成本课程.

Advanced programming

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

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

Advanced systems

涵盖的主题: 数字信号 组合逻辑 CMOS技术 顺序逻辑 有限状态机 processor instruction sets caches pipelining virtualization 并行处理 虚拟记忆 同步原语 系统调用界面 还有更多

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Electricity and Magnetism, Part 1 1 | 7周 每周8-10小时| calculus, basic mechanics 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 事件驱动的并发 automata 分布式共享内存 共识算法 状态机复制 计算几何理论 命题逻辑 关系逻辑 “品牌逻辑” 概念格 游戏树 还有更多

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Theory of Computation (Lectures )| 8周 每周10个小时| 离散数学,逻辑,算法 Computational Geometry | 16周| 每周8小时| 算法,C ++ Introduction to Formal Concept Analysis | 6周 每周4-6个小时| 逻辑,概率 Game Theory | 8周 每周3个小时| 数学思考概率概率

Advanced applications

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

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: Modern Robotics (Specialization) | 26周| 每周2-5个小时| 大学一年级物理,线性代数,微积分, linear ordinary differential equations 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个小时| 一年编程经验 Game Design and Development (Specialization) | 6个月 每周5小时| 编程,交互设计

Final project

OSS大学是“以项目为中心”. 我们鼓励您为每门课程进行作业和考试,但真正重要的是您是否可以利用您的知识来解决实际问题.

在掌握了所有核心CS和与您相关的高级CS的各个部分之后,您应该考虑一个可以使用所学知识解决的问题. 真实的项目工作不仅在履历表上看起来很棒,而且该项目还将“验证”并“巩固”您的知识. 您可以创建全新的内容,也可以通过以下网站找到需要帮助的现有项目 CodeTriage or First Timers Only.

另一种选择是使用Capstone项目,方法是从 Advanced applications; 是否有意义取决于课程,项目以及课程的“荣誉守则”是否允许您公开展示您的作品. 在某些情况下,可能不允许这样做; 请勿违反课程的《荣誉守则》!

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

-降价:[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science) -HTML:Open Source Society University - Computer Science`

Evaluation

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

然后,来自OSSU的同行和导师将对您的项目进行非正式评估. 您不会在传统意义上被“打分”-每个人都有自己认为成功的标准. 评估的目的是作为您第一次向世界宣布您是计算机科学家 并获得聆听反馈(正面和负面)并大步前进的经验.

最终项目评估还有第二个目的:评估OSSU是否, 通过其社区和课程,成功地完成了引导独立学习者获得世界级计算机科学教育的使命.

Cooperative work

您可以单独或与其他学生一起创建此项目! 我们热爱合作工作! 使用我们 channels 与其他人交流以合并和创建新项目!

Which programming languages should I use?

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

重要的是“内部化”核心概念,并能够将其与所需的任何工具(编程语言)一起使用.

Congratulations

完成上述课程的要求后,您将完成与计算机科学相同的学士学位的等同工作. 恭喜你!

接下来是什么? 可能性是无限的和重叠的:

-寻找一份开发人员的工作! -看看 readings 对于经典书籍,您可以阅读这些书籍,从而提高自己的技能并扩展知识. -加入本地开发者聚会(例如,通过 meetup.com). -注意软件开发领域中的新兴技术: +通过以下方式探索“演员模型” Elixir,这是一种经过久经考验的Erlang虚拟机,是一种新的网络功能编程语言! +探索借阅和终生 Rust,一种无需垃圾收集器即可实现内存和线程安全的系统语言! +通过探索依赖类型系统 Idris,一种受Haskell启发的新语言,为类型驱动的开发提供了前所未有的支持.

keep learning

Code of conduct

OSSU's code of conduct.

How to show your progress

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

现在您已经有了我们的官方董事会的副本,您只需在学习过程中将卡片传递到“正在做”或“完成”栏中即可.

我们还有标签,可帮助您在整个过程中进行更多控制. 每个标签的含义是:

-“主课程”:带有该标签的卡片代表了我们课程中列出的课程. -“额外资源”:带有该标签的卡片代表该学生添加的课程. -正在执行:带有该标签的卡片代表该学生当前正在从事的课程. -“完成”:带有该标签的卡片代表该学生完成的课程. 这些卡片还应具有至少一个项目/文章的链接,该项目/文章应使用在该课程中获得的知识来构建. -Section:带有标签的卡片代表了我们课程中的部分. 带有“ Section”标签的卡片仅用于组织“完成”列. 您应将课程卡放在其各自的部门卡下方.

该委员会的目的是为我们的学生提供一种跟踪其进度的方法,并且还可以通过公开页面向朋友,家人,雇主等展示其进度. 您可以将董事会的状态更改为公开私有.

Team