├── .gitignore
├── LICENSE
├── PROJECTS.md
├── CONTRIBUTING.md
├── REQUIREMENTS.md
├── extras
├── courses.md
└── readings.md
├── FAQ.md
├── CHANGELOG.md
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.swp
3 | *.swo
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Open Source Society University
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/PROJECTS.md:
--------------------------------------------------------------------------------
1 | # Projects
2 | > Here, we are providing a list curated by the community of exercises and projects to practice and reinforce the skills we try to master.
3 |
4 | Projects created by OSSU's students for each course of our [**Computer Science**](https://github.com/ossu/computer-science) curriculum.
5 |
6 | For more project ideas, check the [Mega Project List](https://github.com/karan/Projects).
7 |
8 | - [Introduction to Computer Science](#introduction-to-computer-science)
9 | - [Programming](#programming)
10 | - [Math](#math)
11 | - [Systems](#systems)
12 | - [Theory](#theory)
13 | - [Applications](#applications)
14 |
15 | ## Introduction to Computer Science
16 | Project Title | Description | Author(s) | Repository
17 | :-- | :-- | :--: | :--
18 | Binary Machine | Convert decimal numbers to binary | [Eric Douglas](https://github.com/ericdouglas) | [binary-machine](https://github.com/ericdouglas/binary-machine)
19 | StalkHub | Stalk Github beautifully | [Aman Roy](https://github.com/aman-roy) | [StalkHub](https://github.com/aman-roy/StalkHub)
20 |
21 |
22 | ## Programming
23 | Project Title | Description | Author(s) | Repository
24 | :-- | :-- | :--: | :--
25 |
26 | ## Math
27 | Project Title | Description | Author(s) | Repository
28 | :-- | :-- | :--: | :--
29 |
30 | ## Systems
31 | Project Title | Description | Author(s) | Repository
32 | :-- | :-- | :--: | :--
33 |
34 | ## Theory
35 | Project Title | Description | Author(s) | Repository
36 | :-- | :-- | :--: | :--
37 |
38 | ## Application
39 | Project Title | Description | Author(s) | Repository
40 | :-- | :-- | :--: | :--
41 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributor guidelines
2 |
3 | This project primarily uses GitHub for collaboration, however not all discussions are appropriate for GitHub.
4 | Please follow these guidelines:
5 | 1. If you need help with the *academic* content of a course or are having general technical difficulties, please do not use GitHub for this.
6 | The best place to ask these types of questions is on the [subreddit](https://www.reddit.com/r/opensourcesociety/).
7 | 2. If you have general problems with the program not specific to any course, such as preferring textbook-style learning over MOOCs,
8 | the subreddit is recommended as there people may be able to give you suggested alternatives.
9 | 3. If you have *specific* and *substantive* criticisms of the curriculum, i.e. problems related to the progression/content of courses it would be appropriate to [open an issue](https://help.github.com/articles/creating-an-issue/) and give us your suggestions.
10 | 4. If you have *non-substantive* updates to make to the curriculum, such as a course's URL having been moved, spelling/syntax errors, etc., please send a [pull request](https://help.github.com/articles/using-pull-requests/) to fix any mistakes that you have found.
11 | 5. If you want to customize the curriculum for yourself, do of course [fork this project](https://help.github.com/articles/fork-a-repo/).
12 | 6. 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.
13 |
14 | # Learning Git
15 |
16 | To be able to create high-quality pull requests, it is recommended that you learn how to use the Git version control system.
17 | One of the best primers on the subject is a free ebook called [Ry's Git Tutorial](https://www.amazon.com/dp/B00QFIA5OC/).
18 | If you prefer a course-style introduction, try [Introduction to Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775).
19 |
--------------------------------------------------------------------------------
/REQUIREMENTS.md:
--------------------------------------------------------------------------------
1 | # OSSU-CS Academic Requirements
2 |
3 | This document contains the subjects (e.g. programming), topics (e.g. imperative programming), and projects the student must master to pass through this curriculum.
4 | The subject requirements are based on topics, rather than specific courses, because sometimes a certain course isn't available at the right time or doesn't fit the student's learning style.
5 |
6 | ## Subjects
7 |
8 | ### Programming
9 |
10 | #### Paradigms
11 | - Imperative programming
12 | - Procedural programming
13 | - Object-oriented programming
14 | - Functional programming
15 | - Logic programming
16 |
17 | #### Languages
18 | - C and/or C-derived languages
19 | - SQL
20 | - XML/HTML
21 | - JavaScript and/or related language
22 | - An ML-family language
23 | - A Lisp-family langauge
24 | - Python and/or Ruby
25 |
26 | ### Math
27 |
28 | - Logic and proofs
29 | - Discrete structures
30 | - Graph theory
31 | - Discrete probability
32 | - Linear algebra
33 |
34 | ### Systems
35 |
36 | - Memory
37 | - Caching
38 | - Virtualization
39 | - Concurrency
40 | - Compilers
41 | - Assembly
42 | - Networking
43 |
44 | ### Theory
45 |
46 | - Data structures
47 | - Sorting
48 | - Searching
49 | - Divide and conquer
50 | - Algorithms on graphs
51 | - Greedy algorithms
52 | - Trees
53 | - P and NP
54 |
55 | ### Applications
56 |
57 | - Software product management
58 | - REST
59 | - Databases
60 | - Computer graphics
61 | - Cybersecurity
62 | - Machine learning
63 |
64 | ## Projects
65 |
66 | Students are required to complete a project at the end of [Core CS](README.md#core-cs) and at the end of [Advanced CS](README.md#advanced-cs).
67 |
68 | For Core CS, students have two options:
69 | - They can use the Capstone course at the end of [Core applications](#core-applications) as their Core CS Project, in which case they are not required to share their project code.
70 | - They can skip that Capstone project and make their own project, in which case they *are* required to share the project code.
71 |
72 | For the Advanced CS Project (also known as the Final Project), students again have two options:
73 | - They can take one of the Specializations under [Advanced applications](#advanced-applications), all of which include Capstone Projects. Students *must* share their project code unless the course's honor code forbids it.
74 | - They can create their own Final Project, and must share the project code to be evaluated by the community.
75 |
--------------------------------------------------------------------------------
/extras/courses.md:
--------------------------------------------------------------------------------
1 | # Computer Science - Great Courses
2 |
3 | This is a list of high-quality courses that, for one reason or another, didn't make it into the curriculum.
4 | The most common reasons are that the course isn't available often enough,
5 | or that there was an alternative that fit better into the curriculum.
6 |
7 | ## Programming
8 |
9 | Courses | Duration | Effort
10 | :-- | :--: | :--:
11 | [Introduction to Computational Thinking and Data Science](https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-2#!)| 10 weeks | 15 hours/week
12 | [Introduction to Computer Science (Udacity)](https://www.udacity.com/course/intro-to-computer-science--cs101)| 7 weeks | 10-20 hours/week
13 | [An Introduction to Interactive Programming in Python (Part 1)](https://www.coursera.org/learn/interactive-python-1)| 5 weeks | -
14 | [An Introduction to Interactive Programming in Python (Part 2)](https://www.coursera.org/learn/interactive-python-2)| - | -
15 | [Programming Basics](https://www.edx.org/course/programming-basics-iitbombayx-cs101-1x)| 9 weeks | 8 hours/week
16 | [Object-Oriented Programming](https://www.edx.org/course/object-oriented-programming-iitbombayx-cs101-2x)| 4 weeks | 8 hours/week
17 | [Object-Oriented Programming with Java (Part 1)](http://mooc.fi/courses/2013/programming-part-1/)| 6 weeks | -
18 | [Object-Oriented Programming with Java (Part 2)](http://mooc.fi/courses/2013/programming-part-2/)| 6 weeks | -
19 | [Introduction to Programming with MATLAB](https://www.coursera.org/learn/matlab)| - | -
20 | [Introduction to Functional Programming](https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0)| 7 weeks | 4-6 hours/week
21 | [The Structure and Interpretation of Computer Programs](http://cs61a.org/) | - | -
22 | [Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/) | 14 weeks | 4 hours/week
23 |
24 | ## Math
25 |
26 | Courses | Duration | Effort
27 | :-- | :--: | :--:
28 | [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x-0) | 4 weeks | 2 hours/week
29 | [Introduction to Mathematical Thinking](https://www.coursera.org/learn/mathematical-thinking) | 10 weeks | 10 hours/week
30 | [Introduction to Probability and Data](https://www.coursera.org/learn/probability-intro)| - | -
31 | [Linear Algebra (Strang)](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/index.htm) | - | -
32 |
33 | ## Systems
34 |
35 | Courses | Duration | Effort
36 | :-- | :--: | :--:
37 | [Computer Architecture](https://www.coursera.org/learn/comparch) | - | 5-8 hours/week
38 | [Operating System Engineering](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-828-operating-system-engineering-fall-2012/) | - | -
39 | [Introduction to Operating Systems](https://www.udacity.com/course/introduction-to-operating-systems--ud923)| 8 weeks | 5-8 hours/week
40 | [Advanced Operating Systems](https://www.udacity.com/course/advanced-operating-systems--ud189)| 5 weeks | 5-8 hours/week
41 | [Computer Networking](https://www.udacity.com/course/computer-networking--ud436) | 12 weeks | 5-8 hours/week
42 |
43 | ## Theory
44 |
45 | Courses | Duration | Effort
46 | :-- | :--: | :--:
47 | [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) | 6 weeks | 6-12 hours/week
48 | [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) | 6 weeks | 6-12 hours/week
49 | [Analysis of Algorithms (Sedgewick)](https://www.coursera.org/learn/analysis-of-algorithms) | 6 weeks | 6-8 hours/week
50 | [Analysis of Algorithms (Skiena)](http://www3.cs.stonybrook.edu/~skiena/373/) | 15 weeks | 6-8 hours/week
51 | [Programming Challenges (Skiena)](http://www3.cs.stonybrook.edu/~skiena/392/) | 14 weeks | 6-8 hours/week
52 | [Data Structures and Algorithms (Specialization)](https://www.coursera.org/specializations/data-structures-algorithms) | 25 weeks | 3-10 hours/week
53 | [Algorithmic Thinking (Part 1)](https://www.coursera.org/learn/algorithmic-thinking-1/) | - | -
54 | [Algorithmic Thinking (Part 2)](https://www.coursera.org/learn/algorithmic-thinking-2/) | - | -
55 | [Statistical Mechanics: Algorithms and Computations](https://www.coursera.org/learn/statistical-mechanics/) | - | -
56 | [Approximation Algorithms Part I](https://www.coursera.org/learn/approximation-algorithms-part-1/) | - | -
57 | [Approximation Algorithms Part II](https://www.coursera.org/learn/approximation-algorithms-part-2/) | - | -
58 |
59 | ## Applications
60 |
61 | Courses | Duration | Effort
62 | :-- | :--: | :--:
63 | [Using Databases with Python](https://www.coursera.org/learn/python-databases) | 5 weeks | 2-3 hours/week
64 | [Database Systems](https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22ed2ee867-9610-4bad-94af-5d12c2ea47cd%22) | - | 27 hours
65 | [Database Management Essentials](https://www.coursera.org/learn/database-management) | 7 weeks | 4-6 hours/week
66 | [Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271)| 16 weeks | 6-10 hours/week
67 | [Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120)| 10 weeks | 6-10 hours/week
68 | [Machine Learning for Data Science and Analytics](https://www.edx.org/course/machine-learning-data-science-analytics-columbiax-ds102x-0)| 5 weeks | 7-10 hours/week
69 | [Processing Big Data with Azure HDInsight](https://www.edx.org/course/processing-big-data-azure-hdinsight-microsoft-dat202-1x-0)| 5 weeks | 3-4 hours/week
70 | [Big Data Science with the BD2K-LINCS Data Coordination and Integration Center](https://www.coursera.org/course/bd2klincs)| 7 weeks | 4-5 hours/week
71 |
72 | # Online Learning - Great Courses
73 |
74 | Courses | Duration | Effort
75 | :-- | :--: | :--:
76 | [Learning How to Learn](https://www.coursera.org/learn/learning-how-to-learn) | 4 weeks | 2 hours/week
77 | [Mindshift](https://www.coursera.org/learn/mindshift) | 4 weeks | 2 hours/week
78 |
--------------------------------------------------------------------------------
/extras/readings.md:
--------------------------------------------------------------------------------
1 | # Computer Science - Great Readings
2 |
3 | This document consists of great books or articles on computer science.
4 | Some are here because there is a course covering the same material;
5 | some are just great books that you should read at some point in your career.
6 |
7 | Once you have made it through most of the curriculum, knowing whether a book is worth your time will become easier.
8 | Or, if you are struggling in one of the courses, perhaps reading a book on the subject will help.
9 |
10 | ## Programming
11 |
12 | Name | Author(s)
13 | :-- | :--:
14 | [Introduction to Computation and Programming Using Python](https://www.amazon.com/Introduction-Computation-Programming-Using-Python/dp/0262525003/) | John V. Guttag
15 | [Think Python 2e](http://greenteapress.com/wp/think-python-2e/) | Allen B. Downey
16 | [How to Design Programs](http://www.ccs.neu.edu/home/matthias/HtDP2e/) | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
17 | [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html) | Hal Abelson, Jerry Sussman, Julie Sussman
18 | [Concepts, Techniques, and Models of Computer Programming](https://www.amazon.com/gp/product/0262220695) | Peter Van Roy, Seif Haridi
19 | [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) | Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
20 | [Refactoring](https://www.refactoring.com/) | Martin Fowler
21 | [Clean Code](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) | Robert Martin
22 | [Code Complete 2e](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670) | Steve McConnell
23 | [The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X) | Andrew Hunt, David Thomas
24 | [Programming Languages: Application and Interpretation](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/) | Shriram Krishnamurthi
25 | [Programming and Programming Languages](http://papl.cs.brown.edu/2016/) | Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz
26 |
27 | ## Math
28 |
29 | Name | Author(s)
30 | :-- | :--:
31 | [Calculus Made Easy](http://www.gutenberg.org/ebooks/33283) | Silvanus P. Thompson
32 | [Discrete Mathematics with Applications (4th Edition)](http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/) | Susanna S. Epp
33 | [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads2/) | Alan Doerr, Ken Levasseur
34 | [Grinstead and Snell’s Introduction to Probability](https://math.dartmouth.edu/~prob/prob/prob.pdf) |Charles M. Grinstead, J. Laurie Snell
35 | [Introduction to Linear Algebra](https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0980232775/) | Gilbert Strang
36 |
37 | ## Systems
38 |
39 | Name | Author(s)
40 | :-- | :--:
41 | [Modern Operating Systems (4th Edition)](http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/) | Andrew S. Tanenbaum, Herbert Bos
42 | [Computer Organization and Design: The Hardware/Software Interface](https://www.amazon.com/gp/product/0124077269) | David Patternson, John Hennessy
43 | [Computer Networks (5th Edition)](http://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958/) | Andrew S. Tanenbaum, David J. Wetherall
44 | [Computer Networking: A Top-Down Approach (6th Edition)](https://www.amazon.com/Computer-Networking-A-Top-Down-Approach/dp/1292153598/) | James F Kurose, Keith W Ross
45 | [Distributed Systems: Principles and Paradigms](https://www.amazon.com/Distributed-Systems-Principles-Andrew-Tanenbaum/dp/153028175X) | Andrew Tanenbaum
46 | [Distributed Systems Reading Group](http://dsrg.pdos.csail.mit.edu/papers/) | Various
47 | [System Design: Design large-scale systems](https://github.com/donnemartin/system-design-primer) | Various
48 |
49 | ## Theory
50 |
51 | Name | Author(s)
52 | :-- | :--:
53 | [Introduction to Computing: Explorations in Language, Logic, and Machines](http://www.computingbook.org/) | David Evans
54 | [Introduction to Algorithms (3rd Edition)](http://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/) | Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
55 | [The Algorithm Design Manual](https://www.amazon.com/gp/product/1848000693) | Steven Skiena
56 | [Category Theory: A Gentle Introduction](http://www.logicmatters.net/resources/pdfs/GentleIntro.pdf) | Peter Smith
57 | [Category Theory for Programmers: The Preface](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) | Bartosz Milewski
58 | [An Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf) | Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze
59 |
60 | ## Applications
61 |
62 | Name | Author(s)
63 | :-- | :--:
64 | [Architecture of a Database System](http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf) | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton
65 | [Readings in Database Systems](http://www.redbook.io/) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors
66 | [Database Management Systems](https://www.amazon.com/gp/product/0072465638) | Raghu Ramakrishnan, Johannes Gehrke
67 | [Transaction Processing: Concepts and Techniques](https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902) | Jim Gray, Andreas Reuter
68 | [Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World](https://www.amazon.com/Data-Reality-Perspective-Perceiving-Information/dp/1935504215) | William Kent
69 | [The Architecture of Open Source Applications](http://aosabook.org/en/) | Michael DiBernardo (editor)
70 | [Deep Learning](http://www.deeplearningbook.org/) | Ian Goodfellow, Yoshua Bengio and Aaron Courville
71 | [Bayesian Reasoning and Machine Learning](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage) | David Barber
72 | [Language Implementation Patterns](https://www.amazon.com/gp/product/193435645X) | Terence Parr
73 | [Compilers: Principles, Techniques, and Tools (2nd Edition)](http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/) | Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
74 | [Compiler Construction](http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf) | Niklaus Wirth
75 | [The Mythical Man-Month](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/) | Fred Brooks, Jr.
76 |
--------------------------------------------------------------------------------
/FAQ.md:
--------------------------------------------------------------------------------
1 | # Frequently Asked Questions
2 |
3 | This page answers some questions that we frequently receive about the curriculum.
4 | If you have questions that aren't answered here, try asking through one of our [community channels](README.md#community).
5 | If it seems important enough or we get asked that question a lot, we will probably add it here.
6 |
7 | Alternatively, you could [contribute](#CONTRIBUTING.md) an answer yourself.
8 |
9 | ## Contents
10 |
11 | - [Are Coursera courses free to access?](#are-coursera-courses-free-to-access)
12 | - [Does every resource in the main curriculum have to be free?](#does-every-resource-in-the-main-curriculum-have-to-be-free)
13 | - [In what order should I take the courses?](#in-what-order-should-i-take-the-courses)
14 | - [Is it necessary to purchase the Verified Upgrade for edX courses?](#is-it-necessary-to-purchase-the-verified-upgrade-for-edx-courses)
15 | - [Why do you recommend skipping the second half of CS50?](#why-do-you-recommend-skipping-the-second-half-of-cs50)
16 | - [Why doesn't the curriculum cover/ignore topic X?](#why-doesnt-the-curriculum-coverignore-topic-x)
17 | - [Why is the curriculum missing some pre-requisites?](#why-is-the-curriculum-missing-some-pre-requisites)
18 |
19 | ## Questions
20 |
21 | ### Are Coursera courses free to access?
22 |
23 | Some courses that require payment to access probably do exist on Coursera, but we don't put those on our curriculum.
24 | All Coursera courses that we put on the curriculum must, at minimum, be **free to audit**.
25 | For some courses, all course features are available for free;
26 | for others (especially those that are part of a specialization), you may only be able to access the lecture videos.
27 | (If you find the policies have changed for any courses on our curriculum, please tell us!)
28 |
29 | Unfortunately, for some courses, Coursera's interface is [very aggressive](https://darkpatterns.org/) about convincing you that you have to pay.
30 |
31 | You may see something like this on the course page:
32 |
33 |
34 |
35 | When attempting to enroll in such a course:
36 | - Click the blue "Enroll" or "Enroll Now" button.
37 | - A pop-up will appear.
38 | - **Do not click** "Start Free Trial", unless you do want to pay.
39 | - Find the text that says "Audit this course" at the bottom.
40 | - Click **Audit**.
41 |
42 | 
43 |
44 | ### Does every resource in the main curriculum have to be free?
45 |
46 | Yes, because we have to draw a line.
47 | As soon as we require paid resources in the main curriculum, we might as well tell people to pay half a million dollars to attend a university.
48 | We are an Internet-based community of learners, not a business, so free is the most sensible price and ensures that the only price you need pay is the price of Internet access.
49 |
50 | At the same time, we recognize that education is scarce resource and therefore requires payment to instructors to make it sustainable in the long term.
51 | Therefore, we respect the business model of websites like edX, which make their materials free but with some paid add-ons, like official certificates or extra interaction with course instructors.
52 |
53 | So we only require that the *learning materials* of a resource be free to access, not that every possible add-on be free.
54 | It would be ideal if graded assignments were always free but if we had this requirement, we would have to exclude any resource that doesn't have graded assignments at all.
55 | Plus, there are other ways to get feedback on your work, and OSSU is a do-it-yourself education.
56 |
57 | ### In what order should I take the courses?
58 |
59 | You have a few different options:
60 | - You can progress linearly from top to bottom of the page.
61 | - You can progress linearly through each individual section, but studying different sections in parallel.
62 | - You can design your own custom progression using the pre-requisites to guide you.
63 |
64 | We have designed the curriculum to work for any of the above three styles.
65 |
66 | ### Is it necessary to purchase the Verified Upgrade for edX courses?
67 |
68 | If you just want to watch the videos, it is never necessary for any edX course on our curriculum.
69 |
70 | CS50 doesn't use edX's grading system; it grades all assignments for free.
71 |
72 | The [Software Development](https://www.edx.org/micromasters/software-development) courses have mostly free quizzes and assignments, but their Final Projects will only be graded by a human if you pay.
73 |
74 | ### Why do you recommend skipping the second half of CS50?
75 |
76 | The strongest and most useful part of CS50 is the part where they teach C.
77 | We wish to retain this in the curriculum for now because it is one of the few chances the student has to play with manual memory management in a (relatively) low-level language.
78 | Everything after that gets a bit too easy and shallow, to the point that we believe the student's time will be better spent in MIT's Introduction to Computer Science course.
79 |
80 | That being said, feel free to finish CS50 if you like it and want to.
81 | But don't skip the MIT Intro course.
82 |
83 | ### Why doesn't the curriculum cover/ignore topic X?
84 |
85 | We have several goals that we have to balance:
86 | - Ensure students learn the timeless principles of computer science in the best possible way, pedagogically speaking.
87 | - Ensure students are given sufficient knowledge of today's systems to be employable in the near future.
88 | - Ensure students are exposed to enough cutting-edge knowledge that they won't be left behind when technology changes, which it always does.
89 | - Keep the curriculum brief enough that it can be completed in a reasonable amount of time.
90 |
91 | Therefore, not everything can be included, but we strive to be eclectic so that students are both employable and well-armed for change.
92 |
93 | ### Why is the curriculum missing some pre-requisites?
94 |
95 | The curriculum assumes two things:
96 | - You are reasonably fluent in English.
97 | - You have gotten through a standard high school curriculum that included physics and pre-calculus.
98 |
99 | Without these assumptions, the curriculum would be out of control with trying to fill in your knowledge gaps.
100 | But those who for whatever reason didn't get all the way through high school math and physics are in luck: you can find the content you need on [Khan Academy](https://www.khanacademy.org/).
101 |
102 | Of course, if you find that the curriculum is missing a pre-requisite for a course that isn't part of a normal high school curriculum, please let us know!
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | This project adheres *in spirit* to [Semantic Versioning](http://semver.org/):
5 | - "MAJOR" updates correspond to changing the topics studied within a subject
6 | - "MINOR" updates correspond to changing courses without changing the topics
7 | - "PATCH" updates correspond to aesthetic and non-essential additions/removals or changing order of classes for better progression
8 |
9 | ## [8.0.0] 2017-11-01
10 | ### Added
11 | - extras/readings: "The System Design Primer"
12 | - extras/readings: "Category Theory for Programmers: The Preface"
13 | - extras/readings: "Programming Languages: Application and Interpretation"
14 | - extras/readings: "Programming and Programming Languages"
15 | - CONTRIBUTING: "Learning Git" section to the contributor guidelines page
16 | - Core Math: Added "Essence of Linear Algebra" as pre-requisite to "Linear Algebra: Foundations to Frontiers"
17 |
18 | ### Updated
19 | - Moved "Introduction to Mathematical Thinking" to extras/courses
20 | - Moved "Hack the Kernel" (ops-class) from Advanced Systems to Core Systems
21 | - Core Systems: "Operating Systems: Three Easy Pieces" is no longer required, but is recommended as companion text to "Hack the Kernel"
22 | - Core Theory: Replaced Coursera with Lagunita as the host for Stanford Algorithms, since Coursera uses dark patterns to trick users into paying
23 |
24 | ## [7.2.2] 2017-07-02
25 | ### Added
26 | - "Haskell Programming from First Principles" book as a paid alternative to learn Haskell
27 | - "Think Python" to extras/readings
28 | - FAQ entries and links under relevant courses
29 | - "Category Theory: A Gentle Introduction" to extras/readings
30 |
31 | ## [7.2.1] 2017-05-14
32 | ### Updated
33 | - Networking course should take 8 weeks to complete
34 | - Fixed spelling error
35 |
36 | ### Added
37 | - Introduction to Haskell course to [extras/courses](extras/courses.md)
38 |
39 | ## [7.2.0] 2017-04-28
40 | ### Added
41 | - Software Testing course
42 | - Link to Stanford Lagunita's Algorithms: Design and Analysis
43 | - Added link to the section on parametric equations and polar coordinates from MIT's Single Variable Calculus course in order to properly prepare students for Multivariable Calculus
44 |
45 | ## [7.1.2] 2017-04-22
46 | ### Updated
47 | - Add link to Mega Project List in the introduction of the Projects section
48 |
49 | ## [7.1.1] 2017-04-11
50 | ### Updated
51 | - Final touch to release
52 |
53 | ## [7.1.0] 2017-04-10
54 | ### Updated
55 | - Reverted reformat of programming languages course
56 |
57 | ### Added
58 | - Reliable Distributed Algorithms courses
59 | - New Introduction to CS course
60 |
61 | ## [7.0.2] 2017-03-30
62 | ### Updated
63 | - Moved optional online learning courses to extras/courses in a new section
64 | - Moved alternate computer architecture course to extras/courses
65 |
66 | ### Added
67 | - Scala specialization under Advanced applications
68 |
69 | ### Removed
70 | - Removed all but one choice for required readings to make the curriculum simpler
71 |
72 | ## [7.0.1] 2017-03-11
73 | ### Updated
74 | - Fixed link to Bradfield's DIY computer science page
75 |
76 | ### Added
77 | - Note under Calculus One with links to errata and course progression recommendations
78 | - Optional courses under extras:
79 | - Strang's course on linear algebra
80 | - Berkeley's Structure and Interpretation of Computer Programs
81 | - Optional readings under extras:
82 | - Van Roy's advanced programming book
83 | - P&H's computer architecture book
84 | - Skiena's algorithms book
85 | - Strang's linear algebra book
86 | - Database Management Systems book
87 | - Tarr's book on creating your own Domain-specific language
88 | - Readings from various authors on distributed systems
89 |
90 | ## [7.0] 2017-03-09
91 | Complete overhaul of program structure
92 |
93 | ### Updated
94 | - Clarified contributor guidelines and moved them to separated file
95 | - Switched from many subjects to just four subjects with many topics
96 | - Consolidated free-books.md and paid-books.md into readings.md
97 | - Consolidated free-courses.md and paid-courses.md into courses.md
98 | - Replace old "How to Code" with new "How to Code" (Software Development MicroMasters)
99 | - Replace Princeton Algorithms (moved to [alternative courses](#extras/courses.md)) with Stanford Algorithms
100 |
101 | ### Added
102 | - Indicate prerequisites for all courses
103 | - Requirements: subject/topic requirements and project requirements
104 | - Required readings on Haskell, Prolog, Operating Systems
105 | - Courses: Dan Grossman's Programming Languages
106 | - Courses: From Nand to Tetris
107 | - Elective course: Intro to Parallel Programming
108 | - Elective course: LAFF: Programming for Correctness
109 | - Elective course: Introduction to Mathematical Thinking
110 | - Elective courses: Electricity and Magnetism
111 | - Elective courses: MIT's Computation Structures
112 | - Elective course: Multivariable Calculus
113 | - Elective course: ops-class.org
114 | - Elective course: Automata Theory
115 | - Elective course: Introduction to Logic
116 | - Elective course: Computational Geometry
117 | - Elective course: Formal Concept Analysis
118 | - Elective course: Game Theory
119 | - Elective specializations:
120 | - Robotics
121 | - Data Mining
122 | - Big Data
123 | - Internet of Things
124 | - Cloud Computing
125 | - Full Stack Web Development
126 | - Data Science
127 | - Pro specializations:
128 | - Mastering Software Development in R
129 | - Artificial Intelligence Engineer
130 | - Machine Learning Engineer
131 | - Cybersecurity
132 | - Android Developer
133 |
134 | ### Removed
135 | - Removed many dead links and obsolete courses
136 | - Removed per-course project requirement
137 | - Course: Object-Oriented Programming in Java
138 | - Course: Functional Programming in Scala
139 | - Course: Computer Architecture (but left as a footnote)
140 | - Course: Intro to Theoretical Computer Science
141 | - Course: Software Processes and Agile Practices
142 | - Course: Operating Systems & System Programming
143 | - Course: Introduction to Cyber Security
144 | - Course: Parallel Computer Architecture and Programming
145 | - Course: UX Design for Mobile Developers
146 |
147 | ## [6.0] 2016-10-09
148 | ### Updated
149 | - Put Calculus One before and together with Mathematics for Computer Science
150 | - Improve text in "Order of the classes"
151 |
152 | ### Added
153 | - Create public Trello board with the new curriculum version
154 | - Create the section "How to track and show your progress" in "How to use this guide"
155 | - Add PROJECTS.md file
156 | - Copy all sections of curriculum to PROJECTS.md
157 |
158 | ### Removed
159 | - Remove "Next Goals" section
160 | - Remove reference to OSSU web app
161 |
162 | ## [5.1.0] 2016-08-20
163 | Update to latest version of Math for Computer Science:
164 |
165 | ### Updated
166 | - Section: **Math (Discrete Math)**
167 | - Mathematics for Computer Science
168 |
169 | ## [5.0.0] 2016-08-20
170 | Due to removed course, we had the following updates:
171 |
172 | ### Removed
173 | - Section: **Natural Language Processing**
174 | - Natural Language Processing
175 |
176 | ### Added
177 | - Section: **Natural Language Processing**
178 | - Introduction to Natural Language Processing
179 |
180 | ## [4.1.0] 2016-08-05
181 | Due to Coursera's platform changes, we had the following updates:
182 | ### Fixed
183 | - Section: **Big Data**
184 | - Introduction to Big Data
185 |
186 | ## [4.0.0] 2016-07-30
187 | Due to Coursera's platform changes, we had the following updates:
188 |
189 | ### Removed
190 | - Section: **Theory**
191 | - Automata
192 | - Section: **Math (Linear Algebra)**
193 | - Coding the Matrix: Linear Algebra through Computer Science Applications
194 | - Section: **Parallel Computing**
195 | - Heterogeneous Parallel Programming
196 | - Section: **Natural Language Processing**
197 | - Natural Language Processing
198 |
199 | ### Fixed
200 | - Section: **Computer Networks**
201 | - Computer Networks
202 | - Section: **Compilers**
203 | - Compilers
204 |
205 | ### Added
206 | - Section: **Theory**
207 | - Intro to Theoretical Computer Science
208 | - Section: **Math (Linear Algebra)**
209 | - Linear Algebra - Foundations to Frontiers
210 | - Section: **Parallel Computing**
211 | - Parallel Computer Architecture and Programming
212 | - Section: **Natural Language Processing**
213 | - Natural Language Processing
214 |
215 | ## [3.0.0] 2016-05-04
216 | ### Removed
217 | - Section: **Introduction to Computer Science**:
218 | - Introduction to Computer Science and Programming Using Python
219 | - From Nand to Tetris (Part 1)
220 |
221 | ### Added
222 | - Section: **Introduction to Computer Science**:
223 | - Introduction to Computer Science - CS50
224 |
225 | ## [2.0.1] 2016-04-04
226 | ### Fixed
227 | - Now students should enroll through our [web app](https://ossu.firebaseapp.com).
228 |
229 | ## [2.0.0] 2016-03-17
230 | ### Fixed
231 | - Program Design section course's names and links
232 |
233 | ### Removed
234 | - **Introduction to Computer Science**:
235 | - Introduction to Computer Science
236 | - Introduction to Computational Thinking and Data Science
237 | - **Algorithms**
238 | - Analysis of Algorithms
239 | - **Programming Paradigms**
240 | - Principles of Reactive Programming
241 | - **Math (Calculus)**
242 | - Multivariable Calculus
243 | - **Software Architecture**:
244 | - Web Application Architectures
245 | - **Software Engineering**:
246 | - Agile Development Using Ruby on Rails - Basics
247 | - Agile Development Using Ruby on Rails - Advanced
248 | - Startup Engineering
249 | - **Computer Architecture**:
250 | - The Hardware/Software Interface
251 | - **Operating Systems**:
252 | - Operating System Engineering
253 | - **Computer Networks**:
254 | - Introduction to Computer Networking
255 | - **Cryptography**:
256 | - Applied Cryptography
257 |
258 | **ps**: These removed courses are now in the [extras](https://github.com/ossu/computer-science/tree/master/extras) section.
259 |
260 | ## [1.3.12] 2016-03-17
261 | ### Added
262 | - How to collaborate: send new links to the extras section
263 |
264 | ## [1.3.11] 2016-03-06
265 | ### Fixed
266 | - Nand to Tetris: change name and url
267 | - UC Berkeley Agile development: change name and url
268 | - Direct links to specializations
269 |
270 | ## [1.3.10] 2016-03-06
271 | ### Fixed
272 | - Link from Systematic Program Design Part 2 course
273 |
274 | ## [1.3.9] 2015-11-09
275 | ### Fixed
276 | - Link for the correct Natural Language Processing course
277 |
278 | ## [1.3.8] 2015-11-07
279 | ### Added
280 | - Add "Project Suggestions" section with more references
281 |
282 | ## [1.3.7] 2015-11-01
283 | ### Removed
284 | - Removed project.md file, moved to **help** repo
285 |
286 | ## [1.3.6] 2015-10-22
287 | ### Added
288 | - Latest version of CS 162, Operating Systems and System Programming
289 |
290 | ## [1.2.6] 2015-10-19
291 | ### Added
292 | - Badge/Link to the Awesome list
293 |
294 | ## [1.2.5] 2015-10-16
295 | ### Fixed
296 | - Fix name of the section and add a hyperlink to it.
297 |
298 | ## [1.2.4] 2015-10-14
299 | ### Removed
300 | - Removed citation about public commitment
301 |
302 | ## [1.2.3] 2015-10-12
303 | ### Changed
304 | - Updated the prerequisite section for more clarity
305 |
306 | ## [1.2.2] 2015-10-12
307 | ### Fixed
308 | - New link to issue intended for students' enrollment
309 |
310 | ## [1.2.1] 2015-10-11
311 | ### Added
312 | - Article Git - the simple guide to the prerequisite section
313 |
314 | ##[1.1.1] 2015-10-11
315 | ### Fixed
316 | - Fix typos
317 | - As MOOC is a "Massive Open Online Course" MOOC course is redundant
318 | - Elaborated on "real problem"
319 | - Fixed a few small grammatical and wording errors
320 |
321 | ## [1.1.0] 2015-10-08
322 | ### Added
323 | - Motivation & Preparation section (optional resources)
324 | - Article: MIT Challenge
325 | - Course: Learning How to Learn
326 |
327 | ## [1.0.0] 2015-10-08
328 |
329 | Release of the first **complete** version of the Computer Science curriculum
330 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 |
5 | Path to a free self-taught education in Computer Science! 6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |