mirror of
https://github.com/ossu/computer-science.git
synced 2024-10-01 01:26:01 -04:00
452 lines
20 KiB
Markdown
452 lines
20 KiB
Markdown
![Open Source Society University (OSSU)](http://i.imgur.com/GjEbgIJ.png)
|
||
|
||
<h3 align="center">Open Source Society University</h3>
|
||
<p align="center">
|
||
Path to a free self-taught education in Computer Science!
|
||
</p>
|
||
<p align="center">
|
||
<a href="https://github.com/sindresorhus/awesome">
|
||
<img alt="Awesome" src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg">
|
||
</a>
|
||
<a href="https://github.com/open-source-society/computer-science">
|
||
<img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg">
|
||
</a>
|
||
</p>
|
||
|
||
## Contents
|
||
|
||
- [About](#about)
|
||
- [Motivation & Preparation](#motivation--preparation)
|
||
- [Curriculum](#curriculum)
|
||
- [How to use this guide](#how-to-use-this-guide)
|
||
- [Prerequisite](#prerequisite)
|
||
- [How to collaborate](#how-to-collaborate)
|
||
- [Community](#community)
|
||
- [Team](#team)
|
||
- [References](#references)
|
||
|
||
## About
|
||
|
||
This is a **solid path** for those of you who want to complete a **Computer Science** course on your own time, **for free**, with courses from the **best universities** in the World.
|
||
|
||
In our curriculum, we give preference to MOOC (Massive Open Online Course) style courses because these courses were created with our style of learning in mind.
|
||
|
||
## Motivation & Preparation
|
||
|
||
Here are two interesting links that can make **all** the difference in your journey.
|
||
|
||
The first one is a motivational video that shows a guy that went through the "MIT Challenge", which consists of learning the entire **4-year** MIT curriculum for Computer Science in **1 year**.
|
||
|
||
- [MIT Challenge](https://www.scotthyoung.com/blog/myprojects/mit-challenge-2/)
|
||
|
||
The second link is a MOOC that will teach you learning techniques used by experts in art, music, literature, math, science, sports, and many other disciplines. These are **fundamental abilities** to succeed in our journey.
|
||
|
||
- [Learning How to Learn](https://www.coursera.org/learn/learning-how-to-learn)
|
||
|
||
**Are you ready to get started?**
|
||
|
||
## Curriculum
|
||
|
||
- [Introduction to Computer Science](#introduction-to-computer-science)
|
||
- [Math (Mathematical Thinking)](#math-mathematical-thinking)
|
||
- [Program Design](#program-design)
|
||
- [Math (Calculus & Discrete Math)](#math-calculus-and-discrete-math)
|
||
- [Algorithms](#algorithms)
|
||
- [Programming Paradigms](#programming-paradigms)
|
||
- [Software Testing](#software-testing)
|
||
- [Math (Calculus)](#math-calculus)
|
||
- [Software Architecture](#software-architecture)
|
||
- [Theory](#theory)
|
||
- [Software Engineering](#software-engineering)
|
||
- [Math (Probability)](#math-probability)
|
||
- [Computer Architecture](#computer-architecture)
|
||
- [Operating Systems](#operating-systems)
|
||
- [Computer Networks](#computer-networks)
|
||
- [Databases](#databases)
|
||
- [Cloud Computing](#cloud-computing)
|
||
- [Math (Linear Algebra)](#math-linear-algebra)
|
||
- [Cryptography](#cryptography)
|
||
- [Security](#security)
|
||
- [Compilers](#compilers)
|
||
- [Parallel Computing](#parallel-computing)
|
||
- [UX Design](#ux-design)
|
||
- [Computer Graphics](#computer-graphics)
|
||
- [Artificial Intelligence](#artificial-intelligence)
|
||
- [Machine Learning](#machine-learning)
|
||
- [Natural Language Processing](#natural-language-processing)
|
||
- [Big Data](#big-data)
|
||
- [Data Mining](#data-mining)
|
||
- [Internet of Things](#internet-of-things)
|
||
- [Specializations](#specializations)
|
||
|
||
---
|
||
|
||
### Introduction to Computer Science
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!)| 12 weeks | 10-20 hours/week
|
||
|
||
### Math (Mathematical Thinking)
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x) | 9 weeks | 5 hours/week
|
||
|
||
### Program Design
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[How to Code: Systematic Program Design - Part 1](https://www.edx.org/course/how-code-systematic-program-design-part-ubcx-spd1x)| 5 weeks | 8-12 hours/week
|
||
[How to Code: Systematic Program Design - Part 2](https://www.edx.org/course/how-code-systematic-program-design-part-ubcx-spd2x)| 5 weeks | 8-12 hours/week
|
||
[How to Code: Systematic Program Design - Part 3](https://www.edx.org/course/how-code-systematic-program-design-part-ubcx-spd3x)| 5 weeks | 8-12 hours/week
|
||
|
||
### Math (Calculus and Discrete Math)
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Calculus One](https://www.coursera.org/learn/calculus1)| 16 weeks | 8-10 hours/week
|
||
[Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)| 12 weeks | 5 hours/week
|
||
|
||
### Algorithms
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Algorithms, Part I](https://www.coursera.org/course/algs4partI)| 6 weeks | 6-12 hours/week
|
||
[Algorithms, Part II](https://www.coursera.org/course/algs4partII)| 6 weeks | 6-12 hours/week
|
||
|
||
### Programming Paradigms
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Functional Programming Principles in Scala](https://www.coursera.org/course/progfun)| 7 weeks | 5-7 hours/week
|
||
[Object Oriented Programming in Java](https://www.coursera.org/learn/object-oriented-java) | 6 weeks | 4-6 hours/week
|
||
|
||
### Software Testing
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Software Testing](https://www.udacity.com/course/software-testing--cs258)| 4 weeks | 6 hours/week
|
||
[Software Debugging](https://www.udacity.com/course/software-debugging--cs259)| 8 weeks | 6 hours/week
|
||
|
||
### Math (Calculus)
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Calculus Two: Sequences and Series](https://www.coursera.org/learn/advanced-calculus)| 7 weeks | 9-10 hours/week
|
||
|
||
### Software Architecture
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)| 8 weeks | 6 hours/week
|
||
|
||
### Theory
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Intro to Theoretical Computer Science](https://www.udacity.com/course/intro-to-theoretical-computer-science--cs313)| 9 weeks | 6 hours/week
|
||
|
||
### Software Engineering
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Software Processes and Agile Practices](https://www.coursera.org/learn/software-processes-and-agile-practices)| 4 weeks | 6-8 hours/week
|
||
|
||
### Math (Probability)
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Introduction to Probability - The Science of Uncertainty](https://www.edx.org/course/introduction-probability-science-mitx-6-041x-0)| 16 weeks | 12 hours/week
|
||
|
||
### Computer Architecture
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Computer Architecture](https://www.coursera.org/course/comparch)| - | 5-8 hours/week
|
||
|
||
### Operating Systems
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Operating Systems and System Programming](https://www.youtube.com/view_play_list?p=-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)| 10 weeks | 2-3 hours/week
|
||
|
||
### Computer Networks
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Computer Networks](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)| - | 4–12 hours/week
|
||
|
||
### Databases
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)| 12 weeks | 8-12 hours/week
|
||
|
||
### Cloud Computing
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Introduction to Cloud Computing](https://www.edx.org/course/introduction-cloud-computing-ieeex-cloudintro-x-0)| 4 weeks | 1 hour/week
|
||
|
||
### Math (Linear Algebra)
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!)| 15 weeks | 8 hours/week
|
||
|
||
### Cryptography
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Cryptography I](https://www.coursera.org/course/crypto)| 6 weeks | 5-7 hours/week
|
||
[Cryptography II](https://www.coursera.org/course/crypto2)| 6 weeks | 6-8 hours/week
|
||
|
||
### Security
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Introduction to Cyber Security](https://www.futurelearn.com/courses/introduction-to-cyber-security) | 8 weeks | 3 hours/week
|
||
|
||
### Compilers
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)| 9 weeks | 6-8 hours/week
|
||
|
||
### Parallel Computing
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Parallel Computer Architecture and Programming](http://15418.courses.cs.cmu.edu/spring2016/home)| 20 weeks | -
|
||
|
||
### UX Design
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[UX Design for Mobile Developers](https://www.udacity.com/course/ux-design-for-mobile-developers--ud849)| 6 weeks | 6 hours/week
|
||
|
||
### Computer Graphics
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)| 6 weeks | 12 hours/week
|
||
|
||
### Artificial Intelligence
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Artificial Intelligence](https://www.edx.org/course/artificial-intelligence-uc-berkeleyx-cs188-1x#!)| 12 weeks | 15 hours/week
|
||
|
||
### Machine Learning
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Machine Learning](https://www.coursera.org/learn/machine-learning)| 11 weeks | 4-6 hours/week
|
||
|
||
### Natural Language Processing
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Introduction to Natural Language Processing](https://www.coursera.org/learn/natural-language-processing)| 12 weeks | -
|
||
|
||
### Big Data
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Introduction to Big Data](https://www.coursera.org/learn/big-data-introduction)| 3 weeks | 5-6 hours/week
|
||
|
||
### Data Mining
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[Pattern Discovery in Data Mining](https://www.coursera.org/course/patterndiscovery) | 4 weeks | 4-6 hours/week
|
||
|
||
### Internet of Things
|
||
|
||
Courses | Duration | Effort
|
||
:-- | :--: | :--:
|
||
[The Internet of Things](https://www.futurelearn.com/courses/internet-of-things)| 4 weeks | 2 hours/week
|
||
|
||
### Specializations
|
||
|
||
After finishing the courses above, start your specializations on the topics that you have more interest.
|
||
|
||
The following platforms currently offer specializations:
|
||
|
||
#### edX: [xSeries](https://www.edx.org/xseries)
|
||
#### Coursera: [Specializations](https://www.coursera.org/specializations)
|
||
#### Udacity: [Nanodegree](https://www.udacity.com/nanodegree)
|
||
#### FutureLearn: [Collections](https://www.futurelearn.com/courses/collections)
|
||
|
||
![keep learning](http://i.imgur.com/REQK0VU.jpg)
|
||
|
||
## How to use this guide
|
||
|
||
### Order of the classes
|
||
|
||
This guide was developed to be consumed in a linear approach. What does this mean? That you should complete one course at a time.
|
||
|
||
The courses are **already** in the order you should complete them. Just start with the [Introduction to Computer Science](#introduction-to-computer-science) section and after finishing the first course, start the next one.
|
||
|
||
**OBS:** If the course is not open, do it with the archived resources or wait until next class is open.
|
||
|
||
### How to track and show your progress
|
||
|
||
1. Create an account in [Trello](https://trello.com/).
|
||
1. Copy [this](https://trello.com/b/9DPXYv5f) board to your personal account. See how to copy a board [here](http://blog.trello.com/you-can-copy-boards-now-finally/).
|
||
|
||
Now that you have a copy of our official board, you just need to pass the cards to the `Doing` column or `Done` column as you progress in your study.
|
||
|
||
We also have **labels** to help you have more control through the process. The meaning of each of these labels is:
|
||
|
||
- `Main Curriculum`: cards with that label represent courses that are listed in our curriculum.
|
||
- `Extra Courses`: cards with that label represent courses that was added by the student.
|
||
- `Doing`: cards with that label represent courses the student is current doing.
|
||
- `Done`: cards with that label represent courses finished by the student. Those cards should also have the link for at least one project/article built with the knowledge acquired in such course.
|
||
- `Section`: cards with that label represent the section that we have in our curriculum. Those cards with the `Section` label are only to help the organization of the Done column. You should put the *Course's cards* below its respective *Section's card*.
|
||
- `Extra Sections`: cards with that label represent sections that was added by the student.
|
||
|
||
The intention of this board is to provide our students a way to track their progress, and also the ability to show their progress through a public page for friends, family, employers, etc. You can change the status of your board to be **public** or **private**.
|
||
|
||
### Should I take all courses?
|
||
|
||
**Yes!** The intention is to conclude **all** the courses listed here!
|
||
|
||
### Duration of the project
|
||
|
||
It may take longer to complete all of the lessons compared to a regular CS course, but I can **guarantee** you that your **reward** will be proportional to **your motivation/dedication**!
|
||
|
||
You must focus on your **habit**, and **forget** about goals. Try to invest 1 ~ 2 hours **every day** studying this curriculum. If you do this, **inevitably** you'll finish this curriculum.
|
||
|
||
> See more about "Commit to a process, not a goal" [here](http://jamesclear.com/goals-systems).
|
||
|
||
### Project Based
|
||
|
||
Here in **OSS University**, you do **not** need to take exams, because we are focused on **real projects**!
|
||
|
||
In order to show everyone that you **successfully** finished a course, you should create a **real project**.
|
||
|
||
> "What does it mean?"
|
||
|
||
After you finish a course, you should think about a **real world problem** that you can solve using the acquired knowledge in the course. You don't need to create a big project, but you must create something to **validate** and **consolidate** your knowledge, and also to show to the world that you are capable to create something useful with the concepts that you learned.
|
||
|
||
The projects of all students will be listed in [this](PROJECTS.md) file. **Submit your project's information in that file after you conclude it**.
|
||
|
||
Put the OSSU-CS badge in the README of your repository! [![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/open-source-society/computer-science)
|
||
|
||
- Markdown: `[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/open-source-society/computer-science)`
|
||
- HTML: `<a href="https://github.com/open-source-society/computer-science"><img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"></a>`
|
||
|
||
**You can create this project alone or with other students!**
|
||
|
||
#### Project Suggestions
|
||
|
||
- [Projects](https://github.com/karan/Projects): A list of practical projects that anyone can solve in any programming language.
|
||
- [app-specs](https://github.com/ericdouglas/app-specs): A curated list of applications specifications and implementations to practice new technologies, improve your portfolio and sharpen your skills.
|
||
- [FreeCodeCamp](http://www.freecodecamp.com/): Course that teaches you fullstack JavaScript development through a bunch of projects.
|
||
- [JavaScript Projects](https://github.com/javascript-society/javascript-projects): List of projects related with the [JavaScript Path](https://github.com/javascript-society/javascript-path).
|
||
|
||
And you should also...
|
||
|
||
### Be creative!
|
||
|
||
This is a **crucial** part of your journey through all those courses.
|
||
|
||
You **need** to have in mind that what you are able to **create** with the concepts that you learned will be your certificate **and this is what really matters**!
|
||
|
||
In order to show that you **really** learned those things, you need to be **creative**!
|
||
|
||
Here are some tips about how you can do that:
|
||
|
||
- **Articles**: create blog posts to synthesize/summarize what you learned.
|
||
- **GitHub repository**: keep your course's files organized in a GH repository, so in that way other students can use it to study with your annotations.
|
||
|
||
### Cooperative work
|
||
|
||
**We love cooperative work**! Use our [channels](#community) to communicate with other fellows to combine and create new projects!
|
||
|
||
### Which programming languages should I use?
|
||
|
||
My friend, here is the best part of liberty! You can use **any** language that you want to complete the courses.
|
||
|
||
The **important** thing for each course is to **internalize** the **core concepts** and to be able to use them with whatever tool (programming language) that you wish.
|
||
|
||
### Content Policy
|
||
|
||
You must share **only** files that you are **allowed** to! **Do NOT disrespect the code of conduct** that you signed in the beginning of some courses.
|
||
|
||
[Be creative](#be-creative) in order to show your progress! :smile:
|
||
|
||
### Stay tuned
|
||
|
||
[Watch](https://help.github.com/articles/watching-repositories/) this repository for futures improvements and general information.
|
||
|
||
## Prerequisite
|
||
|
||
The **only things** that you need to know are how to use **Git** and **GitHub**. Here are some resources to learn about them:
|
||
|
||
**Note**: Just pick one of the courses below to learn the basics. You will learn a lot more once you get started!
|
||
|
||
- [Try Git](https://try.github.io/levels/1/challenges/1)
|
||
- [Git - the simple guide](http://rogerdudler.github.io/git-guide/)
|
||
- [GitHub Training & Guides](https://www.youtube.com/playlist?list=PLg7s6cbtAD15G8lNyoaYDuKZSKyJrgwB-)
|
||
- [GitHub Hello World](https://guides.github.com/activities/hello-world/)
|
||
- [Git Immersion](http://gitimmersion.com/index.html)
|
||
- [How to Use Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775)
|
||
|
||
## Change Log
|
||
|
||
**Curriculum Version**: `6.0`
|
||
|
||
To show **respect** to all of our students, we will keep a [CHANGELOG](CHANGELOG.md) file that contains all the alterations that our curriculum may suffer.
|
||
|
||
Now we have a **stable** version of the curriculum, which won't change anymore, only in exceptional cases (outdated courses, broken links, etc).
|
||
|
||
Our students can **trust** in this curriculum because it has been **carefully planned** and covers **all** the **core topics** that a conventional Computer Science course covers.
|
||
|
||
We also include modern topics, making this course one of the **best options** for those who want to become a Computer Scientist and/or a Software Engineer/Developer.
|
||
|
||
## How to collaborate
|
||
|
||
You can [open an issue](https://help.github.com/articles/creating-an-issue/) and give us your suggestions as to how we can improve this guide, or what we can do to improve the learning experience.
|
||
|
||
You can also [fork this project](https://help.github.com/articles/fork-a-repo/) and send a [pull request](https://help.github.com/articles/using-pull-requests/) to fix any mistakes that you have found.
|
||
|
||
If you want to suggest a new resource, send a pull request adding such resource to the [extras](https://github.com/open-source-society/computer-science/tree/master/extras) section.
|
||
|
||
The **extras** section is a place where all of us will be able to submit interesting additional articles, books, courses and specializations, keeping our curriculum *as immutable and concise as possible*.
|
||
|
||
**Let's do it together! =)**
|
||
|
||
## Community
|
||
|
||
Subscribe to [/r/opensourcesociety](https://www.reddit.com/r/opensourcesociety/)!
|
||
|
||
Join us in our [group](https://groups.google.com/forum/#!forum/open-source-society-university)!
|
||
|
||
You can also interact through [GitHub issues](https://github.com/open-source-society/computer-science/issues).
|
||
|
||
We also have a chat room! [![Join the chat at https://gitter.im/open-source-society/computer-science](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/open-source-society/computer-science?utm_campaign=pr-badge&utm_content=badge&utm_medium=badge&utm_source=badge)
|
||
|
||
Add **Open Source Society University** to your [Facebook](https://www.facebook.com/ossuniversity) profile!
|
||
|
||
> **ps**: A forum is an ideal way to interact with other students as we do not lose important discussions, which usually occur in communication via chat apps. **Please use our subreddit/group for important discussions**.
|
||
|
||
## Team
|
||
|
||
* **Curriculum Founder**: [Eric Douglas](https://github.com/ericdouglas)
|
||
* **Curriculum Maintainer**: [Eric Douglas](https://github.com/ericdouglas)
|
||
* **Contributors**: [contributors](https://github.com/open-source-society/computer-science/graphs/contributors)
|
||
|
||
## References
|
||
|
||
- [Google - Guide for Technical Development](https://www.google.com/about/careers/students/guide-to-technical-development.html)
|
||
- [Coursera](https://www.coursera.org/)
|
||
- [edX](https://www.edx.org)
|
||
- [Udacity](https://www.udacity.com/)
|
||
- [Future Learn](https://www.futurelearn.com/)
|
||
- [Stanford University](https://lagunita.stanford.edu/)
|
||
- [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science)
|
||
- [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/)
|