├── .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 | Free Trial 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 | ![Audit this course](https://user-images.githubusercontent.com/3349406/27321369-95ca12e6-55cc-11e7-9b5c-f8fedd8fd643.png) 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 | ![Open Source Society University (OSSU)](http://i.imgur.com/kYYCXtC.png) 2 | 3 |

Open Source Society University

4 |

5 | Path to a free self-taught education in Computer Science! 6 |

7 |

8 | 9 | Awesome 10 | 11 | 12 | Open Source Society University - Computer Science 13 | 14 | 15 | Contribute with OSSU on Patreon 16 | 17 |

18 | 19 | # Contents 20 | 21 | - [Summary](#summary) 22 | - [Curriculum](#curriculum) 23 | - [Prerequisites](#prerequisites) 24 | - [Introduction to Computer Science](#introduction-to-computer-science) 25 | - [Core CS](#core-cs) 26 | - [Advanced CS](#advanced-cs) 27 | - [Final project](#final-project) 28 | - [Pro CS](#pro-cs) 29 | - [Code of conduct](#code-of-conduct) 30 | - [Community](#community) 31 | - [How to show your progress](#how-to-show-your-progress) 32 | - [Team](#team) 33 | - [References](#references) 34 | 35 | # Summary 36 | 37 | The OSSU curriculum is a **complete education in computer science** using online materials. 38 | It's not merely for career training or professional development. 39 | It's for those who want a proper, *well-rounded* grounding in concepts fundamental to all computing disciplines, 40 | and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, 41 | but with support from a worldwide community of fellow learners. 42 | 43 | It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, 44 | as it is assumed most of the people following this curriculum are already educated outside the field of CS. 45 | The courses themselves are among the very best in the world, often coming from Harvard, Princeton, MIT, etc., 46 | but specifically chosen to meet the following criteria. 47 | 48 | **Courses must**: 49 | - Be open for enrollment 50 | - Run regularly (ideally in self-paced format, otherwise running at least once a month or so) 51 | - Fulfill the [academic requirements](REQUIREMENTS.md) of OSSU 52 | - Fit neatly into the progression of the curriculum with respect to topics and difficulty level 53 | - Be of generally high quality in teaching materials and pedagogical principles 54 | 55 | When no course meets the above criteria, the coursework is supplemented with a book. 56 | When there are courses or books that don't fit into the curriculum but are otherwise of high quality, 57 | they belong in [extras/courses](extras/courses.md) or [extras/readings](extras/readings.md). 58 | 59 | **Organization**. The curriculum is designed as follows: 60 | - *Intro CS*: for students to try out CS and see if it's right for them 61 | - *Core CS*: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take 62 | - *Advanced CS*: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student's interests 63 | - *Final Project*: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide 64 | - *Pro CS*: graduate-level specializations students can elect to take after completing the above curriculum if they want to maximize their chances of getting a good job 65 | 66 | **Duration**. It is possible to finish Core CS within about 2 years if you plan carefully and devote roughly 18-22 hours/week to your studies. 67 | Courses in Core CS should be taken linearly if possible, but since a perfectly linear progression is rarely possible, 68 | each class's prerequisites is specified so that you can design a logical but non-linear progression 69 | based on the class schedules and your own life plans. 70 | 71 | **Cost**. All or nearly all course material prior to Pro CS is available for free, 72 | however some courses may charge money for assignments/tests/projects to be graded. 73 | Note that Coursera offers [financial aid](https://learner.coursera.help/hc/en-us/articles/209819033-Apply-for-Financial-Aid). 74 | Decide how much or how little to spend based on your own time and budget; 75 | just remember that you can't purchase success! 76 | 77 | **Content policy**. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. 78 | *Do NOT disrespect the code of conduct* that you signed in the beginning of each course! 79 | 80 | **How to contribute**. Please see [CONTRIBUTING](CONTRIBUTING.md). 81 | 82 | **Getting help**. Please check our [Frequently Asked Questions](FAQ.md), and if you cannot find the answer, file an issue or talk to our [friendly community](#community)! 83 | 84 | # Curriculum 85 | 86 | **Curriculum version**: `8.0.0` (see [CHANGELOG](CHANGELOG.md)) 87 | 88 | - [Prerequisites](#prerequisites) 89 | - [Introduction to Computer Science](#introduction-to-computer-science) 90 | - [Core CS](#core-cs) 91 | - [Core programming](#core-programming) 92 | - [Core math](#core-math) 93 | - [Core systems](#core-systems) 94 | - [Core theory](#core-theory) 95 | - [Core applications](#core-applications) 96 | - [Advanced CS](#advanced-cs) 97 | - [Advanced programming](#advanced-programming) 98 | - [Advanced math](#advanced-math) 99 | - [Advanced systems](#advanced-systems) 100 | - [Advanced theory](#advanced-theory) 101 | - [Advanced applications](#advanced-applications) 102 | - [Final project](#final-project) 103 | - [Pro CS](#pro-cs) 104 | 105 | --- 106 | 107 | ## Prerequisites 108 | 109 | - [Core CS](#core-cs) assumes the student has already taken high school math and physics, including algebra, geometry, and pre-calculus. 110 | Some high school graduates will have already taken AP Calculus, but this is usually only about 3/4 of a college calculus class, so the calculus courses in the curriculum are still recommended. 111 | - [Advanced CS](#advanced-cs) assumes the student has already taken the entirety of Core CS 112 | and is knowledgeable enough now to decide which electives to take. 113 | - Note that [Advanced systems](#advanced-systems) assumes the student has taken a basic physics course (e.g. AP Physics in high school). 114 | 115 | ## Introduction to Computer Science 116 | 117 | These courses will introduce you to the world of computer science. 118 | Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C. 119 | ([Why?](FAQ.md#why-do-you-recommend-skipping-the-second-half-of-cs50)) 120 | 121 | **Topics covered**: 122 | `imperative programming` 123 | `procedural programming` 124 | `C` 125 | `manual memory management` 126 | `basic data structures and algorithms` 127 | `Python` 128 | `SQL` 129 | `basic HTML, CSS, JavaScript` 130 | `and more` 131 | 132 | Courses | Duration | Effort | Prerequisites 133 | :-- | :--: | :--: | :--: 134 | [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!) ([alt](https://cs50.harvard.edu/)) | 12 weeks | 10-20 hours/week | none 135 | [Introduction to Computer Science and Programming using Python](https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-10) | 9 weeks | 15 hours/week | high school algebra 136 | 137 | ## Core CS 138 | 139 | All coursework under Core CS is **required**, unless otherwise indicated. 140 | 141 | ### Core programming 142 | **Topics covered**: 143 | `functional programming` 144 | `design for testing` 145 | `program requirements` 146 | `common design patterns` 147 | `unit testing` 148 | `object-oriented design` 149 | `Java` 150 | `static typing` 151 | `dynamic typing` 152 | `ML-family languages (via Standard ML)` 153 | `Lisp-family languages (via Racket)` 154 | `Ruby` 155 | `and more` 156 | 157 | Courses | Duration | Effort | Prerequisites 158 | :-- | :--: | :--: | :--: 159 | [How to Code - Simple Data](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x) | 7 weeks | 8-10 hours/week | none 160 | [How to Code - Complex Data](https://www.edx.org/course/how-code-complex-data-ubcx-htc2x) | 6 weeks | 8-10 hours/week | How to Code: Simple Data 161 | [Software Construction - Data Abstraction](https://www.edx.org/course/software-construction-data-abstraction-ubcx-softconst1x) | 6 weeks | 8-10 hours/week | How to Code - Complex Data 162 | [Software Construction - Object-Oriented Design](https://www.edx.org/course/software-construction-object-oriented-ubcx-softconst2x) | 6 weeks | 8-10 hours/week | Software Construction - Data Abstraction 163 | [Programming Languages, Part A](https://www.coursera.org/learn/programming-languages) | 4 weeks | 8-16 hours/week | recommended: Java, C 164 | [Programming Languages, Part B](https://www.coursera.org/learn/programming-languages-part-b) | 3 weeks | 8-16 hours/week | Programming Languages, Part A 165 | [Programming Languages, Part C](https://www.coursera.org/learn/programming-languages-part-c) | 3 weeks | 8-16 hours/week | Programming Languages, Part B 166 | 167 | #### Readings 168 | - **Required** to learn about monads, laziness, purity: [Learn You a Haskell for a Great Good!](http://learnyouahaskell.com/) 169 | - **Note**: probably the best resource to learn Haskell: [Haskell Programming from First Principles](http://haskellbook.com/) `paid` 170 | - **Required**, to learn about logic programming, backtracking, unification: [Learn Prolog Now!](http://lpn.swi-prolog.org/lpnpage.php?pageid=top) 171 | 172 | ### Core math 173 | 174 | **Topics covered**: 175 | `linear transformations` 176 | `matrices` 177 | `vectors` 178 | `mathematical proofs` 179 | `number theory` 180 | `differential calculus` 181 | `integral calculus` 182 | `sequences and series` 183 | `discrete mathematics` 184 | `basic statistics` 185 | `O-notation` 186 | `graph theory` 187 | `vector calculus` 188 | `discrete probability` 189 | `and more` 190 | 191 | Courses | Duration | Effort | Prerequisites 192 | :-- | :--: | :--: | :--: 193 | [Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) | - | - | pre-calculus 194 | [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!) ([alt](http://ulaff.net/)) | 15 weeks | 8 hours/week | Essence of Linear Algebra 195 | [Calculus One](https://www.coursera.org/learn/calculus1)*1* ([alt](https://mooculus.osu.edu/)) | 16 weeks | 8-10 hours/week | pre-calculus 196 | [Calculus Two: Sequences and Series](https://www.coursera.org/learn/advanced-calculus)| 7 weeks | 9-10 hours/week | Calculus One 197 | [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm) | 13 weeks | 5 hours/week | single variable calculus (Calculus Two) 198 | 199 | **1 Note**: When you are enrolled, please see this 200 | [list of errors](https://www.coursera.org/learn/calculus1/discussions/forums/WcY9_8ayEeSWEiIAC0wC5g/threads/CgOJwV-jEeWncxKXIFxpFQ/replies/kH6u_2FPEeWukw4fFhIvKw) 201 | and 202 | [these recommendations](https://www.coursera.org/learn/calculus1/discussions/all/threads/W5P9mFY8EeWbVQrsfyQbuw/replies/XyyJflZDEeWBRg5dvElQww/comments/l-bON17nEeW9lgqcHapJBw) 203 | for how to progress through the course. 204 | 205 | ### Core systems 206 | 207 | **Topics covered**: 208 | `boolean algebra` 209 | `gate logic` 210 | `memory` 211 | `computer architecture` 212 | `assembly` 213 | `machine language` 214 | `virtual machines` 215 | `high-level languages` 216 | `compilers` 217 | `operating systems` 218 | `network protocols` 219 | `and more` 220 | 221 | Courses | Duration | Effort | Prerequisites 222 | :-- | :--: | :--: | :--: 223 | [Build a Modern Computer from First Principles: From Nand to Tetris](https://www.coursera.org/learn/build-a-computer) ([alt](http://www.nand2tetris.org/)) | 6 weeks | 7-13 hours/week | none 224 | [Build a Modern Computer from First Principles: Nand to Tetris Part II ](https://www.coursera.org/learn/nand2tetris2) | 6 weeks | 12-18 hours/week | one of [these programming languages](https://user-images.githubusercontent.com/2046800/35426340-f6ce6358-026a-11e8-8bbb-4e95ac36b1d7.png), From Nand to Tetris Part I 225 | [Introduction to Computer Networking](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)| 8 weeks | 4–12 hours/week | algebra, probability, basic CS 226 | [ops-class.org - Hack the Kernel](https://www.ops-class.org/) | 15 weeks | 6 hours/week | algorithms 227 | 228 | #### Readings 229 | - **Recommended**: While Hack the Kernel recommends Modern Operating Systems as a textbook, we suggest using [Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/). 230 | 231 | ### Core theory 232 | 233 | **Topics covered**: 234 | `divide and conquer` 235 | `sorting and searching` 236 | `randomized algorithms` 237 | `graph search` 238 | `shortest paths` 239 | `data structures` 240 | `greedy algorithms` 241 | `minimum spanning trees` 242 | `dynamic programming` 243 | `NP-completeness` 244 | `and more` 245 | 246 | Courses | Duration | Effort | Prerequisites 247 | :-- | :--: | :--: | :--: 248 | [Algorithms: Design and Analysis, Part I](https://lagunita.stanford.edu/courses/course-v1:Engineering+Algorithms1+SelfPaced/about) | 8 weeks | 4-8 hours/week | any programming language, Mathematics for Computer Science 249 | [Algorithms: Design and Analysis, Part II](https://lagunita.stanford.edu/courses/course-v1:Engineering+Algorithms2+SelfPaced/about) | 8 weeks | 4-8 hours/week | Part I 250 | 251 | 252 | ### Core applications 253 | 254 | **Topics covered**: 255 | `Agile methodology` 256 | `REST` 257 | `software specifications` 258 | `refactoring` 259 | `relational databases` 260 | `transaction processing` 261 | `data modeling` 262 | `neural networks` 263 | `supervised learning` 264 | `unsupervised learning` 265 | `OpenGL` 266 | `raytracing` 267 | `block ciphers` 268 | `authentication` 269 | `public key encryption` 270 | `and more` 271 | 272 | Courses | Duration | Effort | Prerequisites 273 | :-- | :--: | :--: | :--: 274 | [Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)| 12 weeks | 8-12 hours/week | some programming, basic CS 275 | [Machine Learning](https://www.coursera.org/learn/machine-learning)| 11 weeks | 4-6 hours/week | linear algebra 276 | [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)| 6 weeks | 12 hours/week | C++ or Java, linear algebra 277 | [Cryptography I](https://www.coursera.org/course/crypto)| 6 weeks | 5-7 hours/week | linear algebra, probability 278 | [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x) | 6 weeks | 8-10 hours/week | Software Construction - Object-Oriented Design 279 | [Software Development Capstone Project](https://www.edx.org/course/software-development-capstone-project-ubcx-softengprjx) | 6-7 weeks | 8-10 hours/week | Software Engineering: Introduction 280 | 281 | ## Advanced CS 282 | 283 | After completing **every required course** in Core CS, students should choose a subset of courses from Advanced CS based on interest. 284 | Not every course from a subcategory needs to be taken. 285 | But students should take *every* course that is relevant to the field they intend to go into. 286 | 287 | The Advanced CS study should then end with one of the Specializations under [Advanced applications](#advanced-applications). 288 | A Specialization's Capstone, if taken, may act as the [Final project](#final-project), if permitted by the Honor Code of the course. 289 | If not, or if a student chooses not to take the Capstone, then a separate Final project will need to be done to complete this curriculum. 290 | 291 | ### Advanced programming 292 | 293 | **Topics covered**: 294 | `debugging theory and practice` 295 | `goal-oriented programming` 296 | `GPU programming` 297 | `CUDA` 298 | `parallel computing` 299 | `object-oriented analysis and design` 300 | `UML` 301 | `large-scale software architecture and design` 302 | `and more` 303 | 304 | Courses | Duration | Effort | Prerequisites 305 | :-- | :--: | :--: | :--: 306 | [Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)| 9 weeks | 6-8 hours/week | none 307 | [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)| 8 weeks | 6 hours/week | Python, object-oriented programming 308 | [Software Testing](https://www.udacity.com/course/software-testing--cs258) | 4 weeks | 6 hours/week | Python, programming experience 309 | [LAFF: Programming for Correctness](https://www.edx.org/course/laff-programming-correctness-utaustinx-ut-p4c-14-01x) | 7 weeks | 6 hours/week | linear algebra 310 | [Introduction to Parallel Programming](https://www.udacity.com/course/intro-to-parallel-programming--cs344) ([alt](https://www.youtube.com/playlist?list=PLGvfHSgImk4aweyWlhBXNF6XISY3um82_)) | 12 weeks | - | C, algorithms 311 | [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)| 8 weeks | 6 hours/week | software engineering in Java 312 | 313 | ### Advanced math 314 | 315 | **Topics covered**: 316 | `parametric equations` 317 | `polar coordinate systems` 318 | `multivariable integrals` 319 | `multivariable differentials` 320 | `probability theory` 321 | `and more` 322 | 323 | Courses | Duration | Effort | Prerequisites 324 | :-- | :--: | :--: | :--: 325 | [Calculus: Parametric Equations and Polar Coordinates](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/unit-4-techniques-of-integration/part-c-parametric-equations-and-polar-coordinates/) | - | - | single-variable calculus (Calculus Two) 326 | [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/index.htm) | 13 weeks | 12 hours/week | Parametric Equations and Polar Coordinates 327 | [Introduction to Probability - The Science of Uncertainty](https://www.edx.org/course/introduction-probability-science-mitx-6-041x-2) | 18 weeks | 12 hours/week | Multivariable Calculus 328 | 329 | ### Advanced systems 330 | 331 | **Topics covered**: 332 | `digital signaling` 333 | `combinational logic` 334 | `CMOS technologies` 335 | `sequential logic` 336 | `finite state machines` 337 | `processor instruction sets` 338 | `caches` 339 | `pipelining` 340 | `virtualization` 341 | `parallel processing` 342 | `virtual memory` 343 | `synchronization primitives` 344 | `system call interface` 345 | `and more` 346 | 347 | Courses | Duration | Effort | Prerequisites 348 | :-- | :--: | :--: | :--: 349 | [Reliable Distributed Systems, Part 1](https://www.edx.org/course/reliable-distributed-algorithms-part-1-kthx-id2203-1x) | 5 weeks | 5 hours/week | Scala, intermediate CS 350 | [Reliable Distributed Systems, Part 2](https://www.edx.org/course/reliable-distributed-algorithms-part-2-kthx-id2203-2x) | 5 weeks | 5 hours/week | Part 1 351 | [Electricity and Magnetism, Part 1](https://www.edx.org/course/electricity-magnetism-part-1-ricex-phys102-1x-0)1 | 7 weeks | 8-10 hours/week | calculus, basic mechanics 352 | [Electricity and Magnetism, Part 2](https://www.edx.org/course/electricity-magnetism-part-2-ricex-phys102-2x-0) | 7 weeks | 8-10 hours/week | Electricity and Magnetism, Part 1 353 | [Computation Structures 1: Digital Circuits](https://www.edx.org/course/computation-structures-part-1-digital-mitx-6-004-1x-0) | 10 weeks | 6 hours/week | electricity, magnetism 354 | [Computation Structures 2: Computer Architecture](https://www.edx.org/course/computation-structures-2-computer-mitx-6-004-2x) | 10 weeks | 6 hours/week | Computation Structures 1 355 | [Computation Structures 3: Computer Organization](https://www.edx.org/course/computation-structures-3-computer-mitx-6-004-3x-0) | 10 weeks | 6 hours/week | Computation Structures 2 356 | 357 | **1 Note**: 358 | These courses assume knowledge of basic physics. 359 | ([Why?](FAQ.md#why-is-the-curriculum-missing-some-pre-requisites)) 360 | If you are struggling, you can find a physics MOOC or utilize the materials from Khan Academy: 361 | [Khan Academy - Physics](https://www.khanacademy.org/science/physics) 362 | 363 | ### Advanced theory 364 | 365 | **Topics covered**: 366 | `formal languages` 367 | `Turing machines` 368 | `computability` 369 | `event-driven concurrency` 370 | `automata` 371 | `distributed shared memory` 372 | `consensus algorithms` 373 | `state machine replication` 374 | `computational geometry theory` 375 | `propositional logic` 376 | `relational logic` 377 | `Herbrand logic` 378 | `concept lattices` 379 | `game trees` 380 | `and more` 381 | 382 | Courses | Duration | Effort | Prerequisites 383 | :-- | :--: | :--: | :--: 384 | [Introduction to Logic](https://www.coursera.org/learn/logic-introduction) | 10 weeks | 4-8 hours/week | set theory 385 | [Automata Theory](https://lagunita.stanford.edu/courses/course-v1:ComputerScience+Automata+Fall2016/about) | 8 weeks | 10 hours/week | discrete mathematics, logic, algorithms 386 | [Computational Geometry](https://www.edx.org/course/computational-geometry-tsinghuax-70240183x) | 16 weeks | 8 hours/week | algorithms, C++ 387 | [Introduction to Formal Concept Analysis](https://www.coursera.org/learn/formal-concept-analysis) | 6 weeks | 4-6 hours/week | logic, probability 388 | [Game Theory](https://www.coursera.org/learn/game-theory-1) | 8 weeks | x hours/week | mathematical thinking, probability, calculus 389 | 390 | ### Advanced applications 391 | 392 | These Coursera Specializations all end with a Capstone project. 393 | Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum. 394 | Note that doing a Specialization with the Capstone at the end always costs money. 395 | So if you don't wish to spend money or use the Capstone as your Final, it may be possible to take the courses in the Specialization for free by manually searching for them, but not all allow this. 396 | 397 | Courses | Duration | Effort | Prerequisites 398 | :-- | :--: | :--: | :--: 399 | [Robotics (Specialization)](https://www.coursera.org/specializations/robotics) | 26 weeks | 2-5 hours/week | linear algebra, calculus, programming, probability 400 | [Data Mining (Specialization)](https://www.coursera.org/specializations/data-mining) | 30 weeks | 2-5 hours/week | machine learning 401 | [Big Data (Specialization)](https://www.coursera.org/specializations/big-data) | 30 weeks | 3-5 hours/week | none 402 | [Internet of Things (Specialization)](https://www.coursera.org/specializations/internet-of-things) | 30 weeks | 1-5 hours/week | strong programming 403 | [Cloud Computing (Specialization)](https://www.coursera.org/specializations/cloud-computing) | 30 weeks | 2-6 hours/week | C++ programming 404 | [Full Stack Web Development (Specialization)](https://www.coursera.org/specializations/full-stack) | 27 weeks | 2-6 hours/week | programming, databases 405 | [Data Science (Specialization)](https://www.coursera.org/specializations/jhu-data-science) | 43 weeks | 1-6 hours/week | none 406 | [Functional Programming in Scala (Specialization)](https://www.coursera.org/specializations/scala) | 29 weeks | 4-5 hours/weeks | One year programming experience 407 | 408 | ## Final project 409 | 410 | OSS University is **project-focused**. 411 | You are encouraged to do the assignments and exams for each course, but what really matters is whether you can *use* your knowledge to solve a real world problem. 412 | 413 | After you've gotten through all of Core CS and the parts of Advanced CS relevant to you, you should think about a problem that you can solve using the knowledge you've acquired. 414 | Not only does real project work look great on a resume, the project will *validate* and *consolidate* your knowledge. 415 | You can create something entirely new, or you can find an existing project that needs help via websites like 416 | [CodeTriage](https://www.codetriage.com/) 417 | or 418 | [First Timers Only](http://www.firsttimersonly.com/). 419 | 420 | Another option is using the Capstone project from taking one of the Specializations in [Advanced applications](#advanced-applications); 421 | whether or not this makes sense depends on the course, the project, and whether or not the course's Honor Code permits you to display your work publicly. 422 | In some cases, it may not be permitted; 423 | do **not** violate your course's Honor Code! 424 | 425 | Put the OSSU-CS badge in the README of your repository! 426 | [![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science) 427 | 428 | - Markdown: `[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)` 429 | - HTML: `Open Source Society University - Computer Science` 430 | 431 | ### Evaluation 432 | 433 | Upon completing your final project, submit your project's information to [PROJECTS](PROJECTS.md) 434 | via a pull request and use our [community](#community) channels to announce it to your fellow students. 435 | 436 | Your peers and mentors from OSSU will then informally evaluate your project. 437 | You will not be "graded" in the traditional sense — everyone has their own measurements for what they consider a success. 438 | The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist, 439 | and to get experience listening to feedback — both positive and negative — and taking it in stride. 440 | 441 | The final project evaluation has a second purpose: to evaluate whether OSSU, 442 | through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education. 443 | 444 | ### Cooperative work 445 | 446 | You can create this project alone or with other students! 447 | **We love cooperative work**! 448 | Use our [channels](#community) to communicate with other fellows to combine and create new projects! 449 | 450 | ### Which programming languages should I use? 451 | 452 | My friend, here is the best part of liberty! 453 | You can use **any** language that you want to complete the final project. 454 | 455 | The important thing is to **internalize** the core concepts and to be able to use them with whatever tool (programming language) that you wish. 456 | 457 | ## Pro CS 458 | 459 | After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science, or quite close to one. 460 | You can stop in the Advanced CS section, but the next step to completing your studies is to develop skills and knowledge in a specific domain. 461 | Many of these courses are graduate-level. 462 | 463 | Choose one or more of the following **specializations**: 464 | - [Mastering Software Development in R Specialization](https://www.coursera.org/specializations/r) by Johns Hopkins University 465 | - [Artificial Intelligence Engineer Nanodegree](https://www.udacity.com/ai) by IBM, Amazon, and Didi 466 | - [Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009) by kaggle 467 | - [Cybersecurity MicroMasters](https://www.edx.org/micromasters/ritx-cybersecurity) by the Rochester Institute of Technology 468 | - [Android Developer Nanodegree](https://www.udacity.com/course/android-developer-nanodegree-by-google--nd801) by Google 469 | 470 | These aren't the only specializations you can choose. Check the following websites for **more options**: 471 | - edX: [xSeries](https://www.edx.org/xseries) 472 | - Coursera: [Specializations](https://www.coursera.org/specializations) 473 | - Udacity: [Nanodegree](https://www.udacity.com/nanodegree) 474 | 475 | ### Where to go next? 476 | 477 | - Look for a job as a developer! 478 | - Check out the [readings](extras/readings.md) for classic books you can read that will sharpen your skills and expand your knowledge. 479 | - Join a local developer meetup (e.g. via [meetup.com](https://www.meetup.com/)). 480 | - Pay attention to emerging technologies in the world of software development: 481 | + Explore the **actor model** through [Elixir](http://elixir-lang.org/), a new functional programming language for the web based on the battle-tested Erlang Virtual Machine! 482 | + Explore **borrowing and lifetimes** through [Rust](https://www.rust-lang.org/), a systems language which achieves memory- and thread-safety without a garbage collector! 483 | + Explore **dependent type systems** through [Idris](https://www.idris-lang.org/), a new Haskell-inspired language with unprecedented support for type-driven development. 484 | 485 | ![keep learning](http://i.imgur.com/REQK0VU.jpg) 486 | 487 | # Code of conduct 488 | [OSSU's code of conduct](https://github.com/ossu/code-of-conduct). 489 | 490 | # Community 491 | 492 | - Subscribe to our [newsletter](https://tinyletter.com/ossu). 493 | - Use our [forum](https://github.com/ossu/forum) if you need some help. 494 | - You can also interact through [GitHub issues](https://github.com/ossu/computer-science/issues). 495 | - 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) 496 | - Add **Open Source Society University** to your [Linkedin](https://www.linkedin.com/school/11272443/) and [Facebook](https://www.facebook.com/ossuniversity) profile! 497 | 498 | > **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. 499 | **Please use our forum for important discussions**. 500 | 501 | ## How to show your progress 502 | 503 | 1. Create an account in [Trello](https://trello.com/). 504 | 1. Copy [this](https://trello.com/b/9DPXYv5f) board to your personal account. 505 | See how to copy a board [here](http://blog.trello.com/you-can-copy-boards-now-finally/). 506 | 507 | 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. 508 | 509 | We also have **labels** to help you have more control through the process. 510 | The meaning of each of these labels is: 511 | 512 | - `Main Curriculum`: cards with that label represent courses that are listed in our curriculum. 513 | - `Extra Resources`: cards with that label represent courses that was added by the student. 514 | - `Doing`: cards with that label represent courses the student is current doing. 515 | - `Done`: cards with that label represent courses finished by the student. 516 | Those cards should also have the link for at least one project/article built with the knowledge acquired in such course. 517 | - `Section`: cards with that label represent the section that we have in our curriculum. 518 | Those cards with the `Section` label are only to help the organization of the Done column. 519 | You should put the *Course's cards* below its respective *Section's card*. 520 | 521 | 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. 522 | You can change the status of your board to be *public* or *private*. 523 | 524 | ## Team 525 | 526 | * **Curriculum Founders**: [Eric Douglas](https://github.com/ericdouglas) 527 | * **Curriculum Maintainers**: [Eric Douglas](https://github.com/ericdouglas) and [hanjiexi](https://github.com/hanjiexi) 528 | * **Contributors**: [contributors](https://github.com/ossu/computer-science/graphs/contributors) 529 | 530 | # References 531 | 532 | - [Google - Guide for Technical Development](https://www.google.com/about/careers/students/guide-to-technical-development.html) 533 | - [Coursera](https://www.coursera.org/) 534 | - [edX](https://www.edx.org) 535 | - [Udacity](https://www.udacity.com/) 536 | - [Stanford University](https://lagunita.stanford.edu/) 537 | - [Carnegie Mellon University: Computer Science Major Requirements](https://www.csd.cs.cmu.edu/academics/undergraduate/requirements) 538 | - [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science) 539 | - [Teach Yourself Computer Science](https://teachyourselfcs.com/) 540 | - [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/) 541 | --------------------------------------------------------------------------------