开放的社会大学

Open Source Society University (OSSU)

开源社会大学

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

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 根据他们的先决条件. - Courses in Advanced CS are electives. Choose one subject (e.g. Advanced programming) you want to become an expert in and take all the courses under that heading. You can also create your own custom subject, but we recommend getting validation from the community on the subject you choose.

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

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小时| 推荐:Java,C 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周| 每周12小时| Multivariable Calculus

Core Math

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

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

课程 持续时间| 努力 注意事项 先决条件 :-- | :--: | :--: | :--: | :--: 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 on security course selection. Contributors are encouraged to compare the various courses in the RFC and offer feedback.

课程 持续时间| 努力 先决条件 :-- | :--: | :--: | :--: 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技术 顺序逻辑 有限状态机 处理器指令集 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