开放的社会大学

Open Source Society University (OSSU)

开源社会大学

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

Awesome Open Source Society University - Computer Science

Summary

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

它是根据本科计算机科学专业的学位要求减去通识教育(non-CS)要求而设计的, as it is assumed most of the people following this curriculum are already educated outside the field of CS. 这些课程本身是世界上最好的课程,通常来自哈佛,普林斯顿,麻省理工学院等, 但专门选择满足以下条件.

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

如果没有课程符合以上条件,则以一本书作为课程的补充. 如果课程或书籍不符合课程要求,但质量较高, 他们属于 extras/courses 或者 extras/readings.

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

期间. 如果您精心计划并每周花大约20个小时学习,则大约2年内即可完成学习. 学习者可以使用 this spreadsheet 估计他们的结束日期. 进行复印,然后在“时间轴”表中输入您的开始日期和每周的预期小时数. 在学习课程时,您可以在“课程数据”表中输入实际的课程完成日期,并获取更新的课程完成估算.

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

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

过程. 学生可以按顺序或不按顺序单独或分组学习课程. -我们建议您在Core CS中进行所有课程,仅当您确定以前已经学习过这些材料时才跳过课程. -为简单起见,我们建议您按照从上到下的顺序学习课程(尤其是Core CS) topologically sorted 根据他们的先决条件. -高级CS课程为选修课. 选择一个您想成为专家的学科(例如高级编程),并选择该标题下的所有课程. 您也可以创建自己的自定义主题,但是我们建议您从社区中获得关于所选主题的验证.

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

How to contribute

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

Community

-我们有一个不和谐的服务器! [Discord ](https://discord.gg/wuytwK5s9h)这应该是您与其他OSSU学生交谈的第一站. 您为什么现在不自我介绍? Join the OSSU Discord -您还可以通过GitHub问题进行互动. 如果课程有问题,或者需要更改课程表,那么这里就是开始对话的地方. 阅读更多 here. -订阅我们 newsletter. -将开源社会大学添加到您 Linkedin 轮廓! -注意:在搜索OSSU时,可能会找到一个未维护且已弃用的Firebase应用程序. 您可以放心地忽略它. 阅读更多 FAQ.

Curriculum

课程版本8.0.0(请参见 CHANGELOG)


Prerequisites

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

Intro CS

Introduction to Programming

如果您从未编写过for循环,或者不知道编程中的字符串是什么,请从这里开始. 该课程是自定进度的,可让您调整每周花费的小时数以满足您的需求.

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

课程持续时间| 努力先决条件| 讨论 :-- | :--: | :--: | :--: | :--: Python for Everybody | 10周| 每周10个小时| 无| chat

Introduction to Computer Science

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

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

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

Core CS

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

Core programming

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

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

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

Math Electives

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

Calculus

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

Linear Algebra

课程持续时间| 努力先决条件| 讨论 :-- | :--: | :--: | :--: | :--: Essence of Linear Algebra | - | - | high school math | chat Linear Algebra | 14周| 每周12小时| 线性代数的本质| chat

Logic

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

Probability

课程持续时间| 努力先决条件| 讨论 :-- | :--: | :--: | :--: | :--: Probability | 24周| 每周12小时| Differentiation and Integration | chat

Core Math

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

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

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

CS Tools

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

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

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

Core systems

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

课程持续时间| 努力其他文字/作业| 先决条件| 讨论 :-- | :--: | :--: | :--: | :--: | :--: Build a Modern Computer from First Principles: From Nand to Tetris (alt )| 6周| 每周7到13个小时| -| 类似于C的编程语言| chat Build a Modern Computer from First Principles: Nand to Tetris Part II | 6周| 每周12-18个小时| -| 之一 these programming languages,从南德到俄罗斯方块第一部分| chat Operating Systems: Three Easy Pieces | 10-12周| 每周6-10个小时| -| 算法, familiarity with C 有用| chat Introduction to Computer Networking | 8周| 每周4–12小时| Assignment 1
Assignment 2
Assignment 3
Assignment 4
Interactive Problems | 代数,概率,基本CS | chat

Core theory

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

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

Core Security

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

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

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

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

Core applications

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

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

Advanced CS

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

然后,高级CS研究应以以下专业领域之一结束 Advanced applications. 如果采取了专业化的最高标准,则可以充当 Final project, if permitted by the Honor Code of the course. 如果没有,或者如果学生选择不参加Capstone,则需要完成一个单独的Final项目来完成本课程.

Advanced programming

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

课程持续时间| 努力先决条件 :-- | :--: | :--: | :--: Parallel Programming | 4周每周6-8个小时| Scala编程 Compilers | 9周每周6-8个小时| 没有任何 Introduction to Haskell | 14周| -| -- Learn Prolog Now! (alt )* | 12周| -| -- Software Debugging | 8周| 每周6个小时| Python,面向对象的编程 Software Testing | 4周每周6个小时| Python,编程经验 Software Architecture & Design | 8周| 每周6个小时| Java软件工程

)布莱克本,博斯,斯特里格尼茨(编译自 source,在 CC license)

Advanced systems

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

课程持续时间| 努力先决条件 :-- | :--: | :--: | :--: Computation Structures 1: Digital Circuits | 10周| 每周6个小时| Nand2Tetris II Computation Structures 2: Computer Architecture | 10周| 每周6个小时| 计算结构1 Computation Structures 3: Computer Organization | 10周| 每周6个小时| 计算结构2

Advanced theory

涵盖的主题: 正式语言 车床 computability 事件驱动的并发 automata 分布式共享内存 共识算法 状态机复制 计算几何理论 命题逻辑 关系逻辑 “ Herbrand逻辑” 游戏树 还有更多

课程持续时间| 努力先决条件 :-- | :--: | :--: | :--: Theory of Computation (Lectures )| 8周| 每周10个小时| 离散数学,逻辑,算法 Computational Geometry | 16周| 每周8小时| 算法,C ++ 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 ++程式设计 Fullstack Open | 12周| 每周6个小时| 程式设计 Data Science (Specialization) | 43周| 每周1-6个小时| 没有任何 Functional Programming in Scala (Specialization) | 29周| 每周4-5个小时| 一年编程经验 Game Design and Development with Unity 2020 (Specialization) | 6个月| 每周5小时| 程序设计,交互设计

Final project

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

阅读完所有核心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