├── .gitignore ├── LICENSE ├── PROJECTS.md ├── CONTRIBUTING.md ├── extras ├── curriculum_guidelines.md ├── courses.md └── readings.md ├── REQUIREMENTS.md ├── FAQ.md ├── CHANGELOG.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.swp 3 | *.swo -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 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 | Webliza | ELIZA in python with web interface | [Vipin Kumar](https://github.com/VipinindKumar) | [Webliza](https://github.com/VipinindKumar/Webliza) 21 | 22 | 23 | ## Programming 24 | Project Title | Description | Author(s) | Repository 25 | :-- | :-- | :--: | :-- 26 | 27 | ## Math 28 | Project Title | Description | Author(s) | Repository 29 | :-- | :-- | :--: | :-- 30 | 31 | ## Systems 32 | Project Title | Description | Author(s) | Repository 33 | :-- | :-- | :--: | :-- 34 | 35 | ## Theory 36 | Project Title | Description | Author(s) | Repository 37 | :-- | :-- | :--: | :-- 38 | 39 | ## Application 40 | Project Title | Description | Author(s) | Repository 41 | :-- | :-- | :--: | :-- 42 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /extras/curriculum_guidelines.md: -------------------------------------------------------------------------------- 1 | # Computer Science - Curricular Resources 2 | 3 | ## Accreditation Board for Engineering and Technology 4 | 5 | ABET, incorporated as the Accreditation Board for Engineering and Technology, Inc., is a non-governmental organization that accredits post-secondary education programs in applied and natural science, computing, engineering and engineering technology. As of October 2017, 3,852 programs are accredited, distributed over 776 universities and colleges in 31 countries. ABET is the recognized U.S. accreditor of college and university programs in applied and natural science, computing, engineering and engineering technology. 6 | 7 | [Program Criteria for Computer Science, Information Systems, and Information Technology Programs](http://www.abet.org/accreditation/accreditation-criteria/criteria-for-accrediting-computing-programs-2018-2019/#2) 8 | 9 | ## The Association for Computing Machinery 10 | 11 | The Association for Computing Machinery (ACM) is an international learned society for computing. It was founded in 1947, and is the world's largest scientific and educational computing society. The ACM is a non-profit professional membership group, with more than 100,000 members as of 2011. 12 | 13 | ### with 14 | 15 | ## Institute of Electrical and Electronics Engineers 16 | 17 | The Institute of Electrical and Electronics Engineers (IEEE) is a professional association formed in 1963 from the amalgamation of the American Institute of Electrical Engineers and the Institute of Radio Engineers. As of 2018, it is the world's largest association of technical professionals with more than 423,000 members in over 160 countries around the world. Its objectives are the educational and technical advancement of electrical and electronic engineering, telecommunications, computer engineering and allied disciplines. 18 | 19 | [Curriculum Guidelines for Undergraduate Programs in Computer Science](https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf) 20 | 21 | [Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering](https://www.acm.org/binaries/content/assets/education/se2014.pdf) 22 | 23 | [Computer Engineering Curricula](https://www.acm.org/binaries/content/assets/education/ce2016-final-report.pdf) 24 | -------------------------------------------------------------------------------- /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 language 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 | -------------------------------------------------------------------------------- /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 a 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 are retaining 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 | By learning C, students will also have a much easier time getting through the following course, Nand2Tetris. 79 | 80 | That being said, feel free to finish CS50 if you like it and want to. 81 | 82 | ### Why doesn't the curriculum cover/ignore topic X? 83 | 84 | We have several goals that we have to balance: 85 | - Ensure students learn the timeless principles of computer science in the best possible way, pedagogically speaking. 86 | - Ensure students are given sufficient knowledge of today's systems to be employable in the near future. 87 | - Ensure students are exposed to enough cutting-edge knowledge that they won't be left behind when technology changes, which it always does. 88 | - Keep the curriculum brief enough that it can be completed in a reasonable amount of time. 89 | 90 | Therefore, not everything can be included, but we strive to be eclectic so that students are both employable and well-armed for change. 91 | 92 | ### Why is the curriculum missing some pre-requisites? 93 | 94 | The curriculum assumes two things: 95 | - You are reasonably fluent in English. 96 | - You have gotten through a standard high school curriculum that included physics and pre-calculus. 97 | 98 | Without these assumptions, the curriculum would be out of control with trying to fill in your knowledge gaps. 99 | 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/). 100 | 101 | 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! 102 | -------------------------------------------------------------------------------- /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 | [Computing In Python, Part I: Fundamentals and Procedural Programming](https://www.edx.org/course/computing-in-python-i-fundamentals-and-procedural-programming-0) | 5 weeks | 10 hours/week 16 | [Computing In Python, Part II: Control Structures](https://www.edx.org/course/computing-in-python-ii-control-structures-0) | 5 weeks | 10 hours/week 17 | [Computing In Python, Part III: Data Structures](https://www.edx.org/course/computing-in-python-iii-data-structures-0) | 5 weeks | 10 hours/week 18 | [Computing In Python, Part IV: Objects & Algorithms](https://www.edx.org/course/computing-in-python-iv-objects-algorithms-0) | 5 weeks | 10 hours/week 19 | [Programming Basics](https://www.edx.org/course/programming-basics-iitbombayx-cs101-1x)| 9 weeks | 8 hours/week 20 | [Object-Oriented Programming](https://www.edx.org/course/object-oriented-programming-iitbombayx-cs101-2x)| 4 weeks | 8 hours/week 21 | [Object-Oriented Programming with Java (Part 1)](http://mooc.fi/courses/2013/programming-part-1/)| 6 weeks | - 22 | [Object-Oriented Programming with Java (Part 2)](http://mooc.fi/courses/2013/programming-part-2/)| 6 weeks | - 23 | [Introduction to Programming with MATLAB](https://www.coursera.org/learn/matlab)| - | - 24 | [Introduction to Functional Programming](https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0)| 7 weeks | 4-6 hours/week 25 | [The Structure and Interpretation of Computer Programs](http://cs61a.org/) | - | - 26 | [Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/) | 14 weeks | 4 hours/week 27 | 28 | ## Math 29 | 30 | Courses | Duration | Effort 31 | :-- | :--: | :--: 32 | [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x-0) | 4 weeks | 2 hours/week 33 | [Introduction to Mathematical Thinking](https://www.coursera.org/learn/mathematical-thinking) | 10 weeks | 10 hours/week 34 | [Introduction to Probability and Data](https://www.coursera.org/learn/probability-intro)| - | - 35 | [Linear Algebra (Strang)](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/index.htm) | - | - 36 | 37 | ## Systems 38 | 39 | Courses | Duration | Effort 40 | :-- | :--: | :--: 41 | [Computer Architecture](https://www.coursera.org/learn/comparch) | - | 5-8 hours/week 42 | [Operating System Engineering](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-828-operating-system-engineering-fall-2012/) | - | - 43 | [Introduction to Operating Systems](https://www.udacity.com/course/introduction-to-operating-systems--ud923)| 8 weeks | 5-8 hours/week 44 | [Advanced Operating Systems](https://www.udacity.com/course/advanced-operating-systems--ud189)| 5 weeks | 5-8 hours/week 45 | [Computer Networking](https://www.udacity.com/course/computer-networking--ud436) | 12 weeks | 5-8 hours/week 46 | 47 | ## Theory 48 | 49 | Courses | Duration | Effort 50 | :-- | :--: | :--: 51 | [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) | 6 weeks | 6-12 hours/week 52 | [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) | 6 weeks | 6-12 hours/week 53 | [Analysis of Algorithms (Sedgewick)](https://www.coursera.org/learn/analysis-of-algorithms) | 6 weeks | 6-8 hours/week 54 | [Analysis of Algorithms (Skiena)](http://www3.cs.stonybrook.edu/~skiena/373/) | 15 weeks | 6-8 hours/week 55 | [Programming Challenges (Skiena)](http://www3.cs.stonybrook.edu/~skiena/392/) | 14 weeks | 6-8 hours/week 56 | [Data Structures and Algorithms (Specialization)](https://www.coursera.org/specializations/data-structures-algorithms) | 25 weeks | 3-10 hours/week 57 | [Algorithmic Thinking (Part 1)](https://www.coursera.org/learn/algorithmic-thinking-1/) | - | - 58 | [Algorithmic Thinking (Part 2)](https://www.coursera.org/learn/algorithmic-thinking-2/) | - | - 59 | [Statistical Mechanics: Algorithms and Computations](https://www.coursera.org/learn/statistical-mechanics/) | - | - 60 | [Approximation Algorithms Part I](https://www.coursera.org/learn/approximation-algorithms-part-1/) | - | - 61 | [Approximation Algorithms Part II](https://www.coursera.org/learn/approximation-algorithms-part-2/) | - | - 62 | 63 | ## Applications 64 | 65 | Courses | Duration | Effort 66 | :-- | :--: | :--: 67 | [Using Databases with Python](https://www.coursera.org/learn/python-databases) | 5 weeks | 2-3 hours/week 68 | [Database Systems](https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22ed2ee867-9610-4bad-94af-5d12c2ea47cd%22) | - | 27 hours 69 | [Database Management Essentials](https://www.coursera.org/learn/database-management) | 7 weeks | 4-6 hours/week 70 | [Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271)| 16 weeks | 6-10 hours/week 71 | [Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120)| 10 weeks | 6-10 hours/week 72 | [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 73 | [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 74 | [Big Data Science with the BD2K-LINCS Data Coordination and Integration Center](https://www.coursera.org/course/bd2klincs)| 7 weeks | 4-5 hours/week 75 | 76 | ## Tools 77 | 78 | Courses | Duration | Effort 79 | :-- | :--: | :--: 80 | [How to Use Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775) | 3 weeks | 2-3 hours/week 81 | 82 | 83 | # Online Learning - Great Courses 84 | 85 | Courses | Duration | Effort 86 | :-- | :--: | :--: 87 | [Learning How to Learn](https://www.coursera.org/learn/learning-how-to-learn) | 4 weeks | 2 hours/week 88 | [Mindshift](https://www.coursera.org/learn/mindshift) | 4 weeks | 2 hours/week 89 | -------------------------------------------------------------------------------- /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 2e](https://www.amazon.com/Introduction-Computation-Programming-Using-Python/dp/0262529629/) | John V. Guttag 15 | [Think Python 2e](http://greenteapress.com/wp/think-python-2e/) | Allen B. Downey 16 | [How to Design Programs](https://www.htdp.org/) | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi 17 | [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sites/default/files/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](https://papl.cs.brown.edu/2018/) | 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 | [Ximera](https://ximera.osu.edu/): Interactive Calculus Textbooks | [Ximera team](https://ximera.osu.edu/about/team) 33 | [Discrete Mathematics with Applications (4th Edition)](http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/) | Susanna S. Epp 34 | [Discrete Mathematics: An Open Introduction](http://discrete.openmathbooks.org/dmoi/) | Oscar Levin 35 | [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads2/) | Alan Doerr, Ken Levasseur 36 | [Grinstead and Snell’s Introduction to Probability](https://math.dartmouth.edu/~prob/prob/prob.pdf) |Charles M. Grinstead, J. Laurie Snell 37 | [Introduction to Linear Algebra](https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0980232775/) | Gilbert Strang 38 | 39 | ## Systems 40 | 41 | Name | Author(s) 42 | :-- | :--: 43 | [Computer Systems: A Programmer's Perspective (3rd Edition)](http://csapp.cs.cmu.edu/) | Randal E. Bryant, David R. O'Hallaron 44 | [Modern Operating Systems (4th Edition)](http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/) | Andrew S. Tanenbaum, Herbert Bos 45 | [Computer Organization and Design: The Hardware/Software Interface](https://www.amazon.com/gp/product/0124077269) | David Patternson, John Hennessy 46 | [Computer Networks (5th Edition)](http://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958/) | Andrew S. Tanenbaum, David J. Wetherall 47 | [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 48 | [Distributed Systems: Principles and Paradigms](https://www.amazon.com/Distributed-Systems-Principles-Andrew-Tanenbaum/dp/153028175X) | Andrew Tanenbaum 49 | [Distributed Systems Reading Group](http://dsrg.pdos.csail.mit.edu/papers/) | Various 50 | [System Design: Design large-scale systems](https://github.com/donnemartin/system-design-primer) | Various 51 | 52 | ## Theory 53 | 54 | Name | Author(s) 55 | :-- | :--: 56 | [Introduction to Computing: Explorations in Language, Logic, and Machines](http://www.computingbook.org/) | David Evans 57 | [Introduction to the Theory of Computation](https://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X) | Michael Sipser 58 | [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 59 | [The Algorithm Design Manual](https://www.amazon.com/gp/product/1848000693) | Steven Skiena 60 | [Category Theory: A Gentle Introduction](http://www.logicmatters.net/resources/pdfs/GentleIntro.pdf) | Peter Smith 61 | [Category Theory for Programmers: The Preface](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) | Bartosz Milewski 62 | [An Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf) | Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze 63 | 64 | ## Applications 65 | 66 | Name | Author(s) 67 | :-- | :--: 68 | [Architecture of a Database System](http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf) | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton 69 | [Readings in Database Systems](http://www.redbook.io/) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors 70 | [Database Management Systems](https://www.amazon.com/gp/product/0072465638) | Raghu Ramakrishnan, Johannes Gehrke 71 | [Transaction Processing: Concepts and Techniques](https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902) | Jim Gray, Andreas Reuter 72 | [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 73 | [The Architecture of Open Source Applications](http://aosabook.org/en/) | Michael DiBernardo (editor) 74 | [An Introduction to Statistical Learning](https://www-bcf.usc.edu/~gareth/ISL/) | Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani 75 | [Deep Learning](http://www.deeplearningbook.org/) | Ian Goodfellow, Yoshua Bengio and Aaron Courville 76 | [Bayesian Reasoning and Machine Learning](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage) | David Barber 77 | [Language Implementation Patterns](https://www.amazon.com/gp/product/193435645X) | Terence Parr 78 | [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 79 | [Compiler Construction](http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf) | Niklaus Wirth 80 | [The Mythical Man-Month](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/) | Fred Brooks, Jr. 81 | [Physically Based Rendering: From Theory To Implementation](http://www.pbr-book.org/) | Matt Pharr, Wenzel Jakob, and Greg Humphreys 82 | -------------------------------------------------------------------------------- /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 | - [Intro CS](#intro-cs) 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 are 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 | **Process**. Students can work through the curriculum alone or in groups, in order or out of order. 78 | - For grouping up, please use the [cohorts repository](https://github.com/ossu/cohorts) to find or create a cohort suited to you. 79 | - We recommend doing all courses in Core CS, only skipping a course when you are certain that you've already learned the material previously. 80 | - For simplicity, we recommend working through courses (especially Core CS) in order from top to bottom, as they have already been [topologically sorted](https://en.wikipedia.org/wiki/Topological_sorting) by their prerequisites. 81 | - Courses in Advanced CS are electives. Choose one subject (e.g. Advanced programming) you want to become an expert in and take all the courses under that heading. You can also create your own custom subject, but we recommend getting validation from the community on the subject you choose. 82 | 83 | **Content policy**. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. 84 | *Do NOT disrespect the code of conduct* that you signed in the beginning of each course! 85 | 86 | **How to contribute**. Please see [CONTRIBUTING](CONTRIBUTING.md). 87 | 88 | **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)! 89 | 90 | # Curriculum 91 | 92 | **Curriculum version**: `8.0.0` (see [CHANGELOG](CHANGELOG.md)) 93 | 94 | - [Prerequisites](#prerequisites) 95 | - [Intro CS](#intro-cs) 96 | - [Introduction to Programming](#introduction-to-programming) 97 | - [Introduction to Computer Science](#introduction-to-computer-science) 98 | - [Core CS](#core-cs) 99 | - [Core programming](#core-programming) 100 | - [Core math](#core-math) 101 | - [Core systems](#core-systems) 102 | - [Core theory](#core-theory) 103 | - [Core applications](#core-applications) 104 | - [Advanced CS](#advanced-cs) 105 | - [Advanced programming](#advanced-programming) 106 | - [Advanced math](#advanced-math) 107 | - [Advanced systems](#advanced-systems) 108 | - [Advanced theory](#advanced-theory) 109 | - [Advanced applications](#advanced-applications) 110 | - [Final project](#final-project) 111 | - [Pro CS](#pro-cs) 112 | 113 | --- 114 | 115 | ## Prerequisites 116 | 117 | - [Core CS](#core-cs) assumes the student has already taken high school math and physics, including algebra, geometry, and pre-calculus. 118 | 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. 119 | - [Advanced CS](#advanced-cs) assumes the student has already taken the entirety of Core CS 120 | and is knowledgeable enough now to decide which electives to take. 121 | - Note that [Advanced systems](#advanced-systems) assumes the student has taken a basic physics course (e.g. AP Physics in high school). 122 | 123 | ## Intro CS 124 | 125 | ### Introduction to Programming 126 | 127 | If you've never written a for-loop, or don't know what a string is in programming, start here. Choose one of the two course series below. Either one will give you an introduction to programming that assumes no prior knowledge. 128 | 129 | Trying to decide between them? 130 | 131 | _Python for Everyone_ will introduce you to a popular language and will quickly move to practical programming tasks - using web APIs and databases. This will give you a taste of what many professional developers do. 132 | 133 | _Fundamentals of Computing_ will also start by introducing you to Python. It then moves on to give an introduction to academic Computer Science topics, like sorting and recursion. This will give you a taste of what the following courses will be like. (Students who complete _Fundamentals of Computing_ can skip Intro to Computer Science and begin Core CS.) 134 | 135 | **Topics covered**: 136 | `simple programs` 137 | `simple data structures` 138 | 139 | Courses | Effort | Prerequisites 140 | :-- | :--: | :--: 141 | [Python for Everyone](https://www.coursera.org/specializations/python) | 58 hours | none 142 | [Fundamentals of Computing](https://www.coursera.org/specializations/computer-fundamentals) | 138 hours | high school mathematics 143 | 144 | ### Introduction to Computer Science 145 | 146 | This course will introduce you to the world of computer science. Students who have been introduced to programming, either from the courses above or through study elsewhere, should take this course for a flavor of the material to come. If you finish the course wanting more, Computer Science is likely for you! 147 | 148 | **Topics covered**: 149 | `computation` 150 | `imperative programming` 151 | `basic data structures and algorithms` 152 | `and more` 153 | 154 | Courses | Duration | Effort | Prerequisites 155 | :-- | :--: | :--: | :--: 156 | [Introduction to Computer Science and Programming using Python](https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-10) ([alt](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/)) | 9 weeks | 15 hours/week | high school algebra 157 | 158 | ## Core CS 159 | 160 | All coursework under Core CS is **required**, unless otherwise indicated. 161 | 162 | ### Core programming 163 | **Topics covered**: 164 | `functional programming` 165 | `design for testing` 166 | `program requirements` 167 | `common design patterns` 168 | `unit testing` 169 | `object-oriented design` 170 | `Java` 171 | `static typing` 172 | `dynamic typing` 173 | `ML-family languages (via Standard ML)` 174 | `Lisp-family languages (via Racket)` 175 | `Ruby` 176 | `and more` 177 | 178 | Courses | Duration | Effort | Prerequisites 179 | :-- | :--: | :--: | :--: 180 | [How to Code - Simple Data](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x) | 7 weeks | 8-10 hours/week | none 181 | [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 182 | [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 183 | [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 184 | [Programming Languages, Part A](https://www.coursera.org/learn/programming-languages) | 4 weeks | 8-16 hours/week | recommended: Java, C 185 | [Programming Languages, Part B](https://www.coursera.org/learn/programming-languages-part-b) | 3 weeks | 8-16 hours/week | Programming Languages, Part A 186 | [Programming Languages, Part C](https://www.coursera.org/learn/programming-languages-part-c) | 3 weeks | 8-16 hours/week | Programming Languages, Part B 187 | 188 | #### Readings 189 | - **Required** to learn about monads, laziness, purity: [Learn You a Haskell for a Great Good!](http://learnyouahaskell.com/) 190 | - **Note**: probably the best resource to learn Haskell: [Haskell Programming from First Principles](http://haskellbook.com/) `paid` 191 | - **Required**, to learn about logic programming, backtracking, unification: [Learn Prolog Now!](http://lpn.swi-prolog.org/lpnpage.php?pageid=top) 192 | 193 | ### Core math 194 | 195 | **Topics covered**: 196 | `linear transformations` 197 | `matrices` 198 | `vectors` 199 | `mathematical proofs` 200 | `number theory` 201 | `differential calculus` 202 | `integral calculus` 203 | `sequences and series` 204 | `discrete mathematics` 205 | `basic statistics` 206 | `O-notation` 207 | `graph theory` 208 | `vector calculus` 209 | `discrete probability` 210 | `and more` 211 | 212 | Courses | Duration | Effort | Prerequisites 213 | :-- | :--: | :--: | :--: 214 | [Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) | - | - | pre-calculus 215 | [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-to-frontiers-0) ([alt](http://ulaff.net/)) | 15 weeks | 8 hours/week | Essence of Linear Algebra 216 | [Calculus 1A: Differentiation](https://www.edx.org/course/calculus-1a-differentiation) | 13 weeks | 6-10 hours/week | pre-calculus 217 | [Calculus 1B: Integration](https://www.edx.org/course/calculus-1b-integration) | 13 weeks | 5-10 hours/week | Calculus 1A 218 | [Calculus 1C: Coordinate Systems & Infinite Series](https://www.edx.org/course/calculus-1c-coordinate-systems-infinite-series) | 13 weeks | 5-10 hours/week | Calculus 1B 219 | [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)**1** | 13 weeks | 5 hours/week | Calculus 1C 220 | 221 | **1**: Students struggling with MIT Math for CS can consider taking the [Discrete Mathematics Specialization](https://www.coursera.org/specializations/discrete-mathematics) first. 222 | It is more interactive but less comprehensive, and it costs money to unlock full interactivity. 223 | 224 | ### Core systems 225 | 226 | **Topics covered**: 227 | `procedural programming` 228 | `manual memory management` 229 | `boolean algebra` 230 | `gate logic` 231 | `memory` 232 | `computer architecture` 233 | `assembly` 234 | `machine language` 235 | `virtual machines` 236 | `high-level languages` 237 | `compilers` 238 | `operating systems` 239 | `network protocols` 240 | `and more` 241 | 242 | Courses | Duration | Effort | Additional Text / Assignments| Prerequisites 243 | :-- | :--: | :--: | :--: | :--: 244 | [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 | After the sections on C, skip to the next course. [Why?](FAQ.md#why-do-you-recommend-skipping-the-second-half-of-cs50) | introductory programming 245 | [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 | - | C-like programming language 246 | [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 247 | [Introduction to Computer Networking](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)| 8 weeks | 4–12 hours/week | [Assignment 1](https://github.com/PrincetonUniversity/COS461-Public/tree/master/assignments/assignment1)
[Assignment 2](https://www.scs.stanford.edu/10au-cs144/lab/reliable/reliable.html)
[Assignment 3](https://nptel.ac.in/content/storage2/courses/106105080/pdf/M2L7.pdf)
[Assignment 4](http://www-net.cs.umass.edu/wireshark-labs/Wireshark_TCP_v7.0.pdf) | algebra, probability, basic CS 248 | [ops-class.org - Hack the Kernel](https://www.ops-class.org/) | 15 weeks | 6 hours/week | Replace course textbook with [Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/) | algorithms 249 | 250 | ### Core theory 251 | 252 | **Topics covered**: 253 | `divide and conquer` 254 | `sorting and searching` 255 | `randomized algorithms` 256 | `graph search` 257 | `shortest paths` 258 | `data structures` 259 | `greedy algorithms` 260 | `minimum spanning trees` 261 | `dynamic programming` 262 | `NP-completeness` 263 | `and more` 264 | 265 | Courses | Duration | Effort | Prerequisites 266 | :-- | :--: | :--: | :--: 267 | [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 268 | [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 269 | 270 | 271 | ### Core applications 272 | 273 | **Topics covered**: 274 | `Agile methodology` 275 | `REST` 276 | `software specifications` 277 | `refactoring` 278 | `relational databases` 279 | `transaction processing` 280 | `data modeling` 281 | `neural networks` 282 | `supervised learning` 283 | `unsupervised learning` 284 | `OpenGL` 285 | `raytracing` 286 | `block ciphers` 287 | `authentication` 288 | `public key encryption` 289 | `and more` 290 | 291 | Courses | Duration | Effort | Prerequisites 292 | :-- | :--: | :--: | :--: 293 | [Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)| 12 weeks | 8-12 hours/week | some programming, basic CS 294 | [Machine Learning](https://www.coursera.org/learn/machine-learning)| 11 weeks | 4-6 hours/week | linear algebra 295 | [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)| 6 weeks | 12 hours/week | C++ or Java, linear algebra 296 | [Cryptography I](https://www.coursera.org/course/crypto)| 6 weeks | 5-7 hours/week | linear algebra, probability 297 | [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x) | 6 weeks | 8-10 hours/week | Software Construction - Object-Oriented Design 298 | [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 299 | 300 | ## Advanced CS 301 | 302 | After completing **every required course** in Core CS, students should choose a subset of courses from Advanced CS based on interest. 303 | Not every course from a subcategory needs to be taken. 304 | But students should take *every* course that is relevant to the field they intend to go into. 305 | 306 | The Advanced CS study should then end with one of the Specializations under [Advanced applications](#advanced-applications). 307 | A Specialization's Capstone, if taken, may act as the [Final project](#final-project), if permitted by the Honor Code of the course. 308 | 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. 309 | 310 | ### Advanced programming 311 | 312 | **Topics covered**: 313 | `debugging theory and practice` 314 | `goal-oriented programming` 315 | `GPU programming` 316 | `CUDA` 317 | `parallel computing` 318 | `object-oriented analysis and design` 319 | `UML` 320 | `large-scale software architecture and design` 321 | `and more` 322 | 323 | Courses | Duration | Effort | Prerequisites 324 | :-- | :--: | :--: | :--: 325 | [Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)| 9 weeks | 6-8 hours/week | none 326 | [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)| 8 weeks | 6 hours/week | Python, object-oriented programming 327 | [Software Testing](https://www.udacity.com/course/software-testing--cs258) | 4 weeks | 6 hours/week | Python, programming experience 328 | [LAFF - On Programming for Correctness](https://www.edx.org/course/laff-on-programming-for-correctness) | 7 weeks | 6 hours/week | linear algebra 329 | [Introduction to Parallel Programming](https://classroom.udacity.com/courses/cs344) ([alt](https://www.youtube.com/playlist?list=PLGvfHSgImk4aweyWlhBXNF6XISY3um82_)) | 12 weeks | - | C, algorithms 330 | [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)| 8 weeks | 6 hours/week | software engineering in Java 331 | 332 | ### Advanced math 333 | 334 | **Topics covered**: 335 | `parametric equations` 336 | `polar coordinate systems` 337 | `multivariable integrals` 338 | `multivariable differentials` 339 | `probability theory` 340 | `and more` 341 | 342 | Courses | Duration | Effort | Prerequisites 343 | :-- | :--: | :--: | :--: 344 | [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/index.htm) | 13 weeks | 12 hours/week | MIT Calculus 1C 345 | [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 346 | 347 | ### Advanced systems 348 | 349 | **Topics covered**: 350 | `digital signaling` 351 | `combinational logic` 352 | `CMOS technologies` 353 | `sequential logic` 354 | `finite state machines` 355 | `processor instruction sets` 356 | `caches` 357 | `pipelining` 358 | `virtualization` 359 | `parallel processing` 360 | `virtual memory` 361 | `synchronization primitives` 362 | `system call interface` 363 | `and more` 364 | 365 | Courses | Duration | Effort | Prerequisites 366 | :-- | :--: | :--: | :--: 367 | [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 368 | [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 369 | [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 370 | [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 371 | [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 372 | [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 373 | [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 374 | 375 | **1 Note**: 376 | These courses assume knowledge of basic physics. 377 | ([Why?](FAQ.md#why-is-the-curriculum-missing-some-pre-requisites)) 378 | If you are struggling, you can find a physics MOOC or utilize the materials from Khan Academy: 379 | [Khan Academy - Physics](https://www.khanacademy.org/science/physics) 380 | 381 | ### Advanced theory 382 | 383 | **Topics covered**: 384 | `formal languages` 385 | `Turing machines` 386 | `computability` 387 | `event-driven concurrency` 388 | `automata` 389 | `distributed shared memory` 390 | `consensus algorithms` 391 | `state machine replication` 392 | `computational geometry theory` 393 | `propositional logic` 394 | `relational logic` 395 | `Herbrand logic` 396 | `concept lattices` 397 | `game trees` 398 | `and more` 399 | 400 | Courses | Duration | Effort | Prerequisites 401 | :-- | :--: | :--: | :--: 402 | [Introduction to Logic](https://www.coursera.org/learn/logic-introduction) | 10 weeks | 4-8 hours/week | set theory 403 | [Automata Theory](https://lagunita.stanford.edu/courses/course-v1:ComputerScience+Automata+SelfPaced/about) | 7 weeks | 10 hours/week | discrete mathematics, logic, algorithms 404 | [Computational Geometry](https://www.edx.org/course/computational-geometry-tsinghuax-70240183x) | 16 weeks | 8 hours/week | algorithms, C++ 405 | [Introduction to Formal Concept Analysis](https://www.coursera.org/learn/formal-concept-analysis) | 6 weeks | 4-6 hours/week | logic, probability 406 | [Game Theory](https://www.coursera.org/learn/game-theory-1) | 8 weeks | x hours/week | mathematical thinking, probability, calculus 407 | 408 | ### Advanced applications 409 | 410 | These Coursera Specializations all end with a Capstone project. 411 | Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum. 412 | Note that doing a Specialization with the Capstone at the end always costs money. 413 | 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. 414 | 415 | Courses | Duration | Effort | Prerequisites 416 | :-- | :--: | :--: | :--: 417 | [Robotics (Specialization)](https://www.coursera.org/specializations/robotics) | 26 weeks | 2-5 hours/week | linear algebra, calculus, programming, probability 418 | [Data Mining (Specialization)](https://www.coursera.org/specializations/data-mining) | 30 weeks | 2-5 hours/week | machine learning 419 | [Big Data (Specialization)](https://www.coursera.org/specializations/big-data) | 30 weeks | 3-5 hours/week | none 420 | [Internet of Things (Specialization)](https://www.coursera.org/specializations/internet-of-things) | 30 weeks | 1-5 hours/week | strong programming 421 | [Cloud Computing (Specialization)](https://www.coursera.org/specializations/cloud-computing) | 30 weeks | 2-6 hours/week | C++ programming 422 | [Full Stack Web Development (Specialization)](https://www.coursera.org/specializations/full-stack) | 27 weeks | 2-6 hours/week | programming, databases 423 | [Data Science (Specialization)](https://www.coursera.org/specializations/jhu-data-science) | 43 weeks | 1-6 hours/week | none 424 | [Functional Programming in Scala (Specialization)](https://www.coursera.org/specializations/scala) | 29 weeks | 4-5 hours/week | One year programming experience 425 | 426 | ## Final project 427 | 428 | OSS University is **project-focused**. 429 | 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. 430 | 431 | 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. 432 | Not only does real project work look great on a resume, but the project will also *validate* and *consolidate* your knowledge. 433 | You can create something entirely new, or you can find an existing project that needs help via websites like 434 | [CodeTriage](https://www.codetriage.com/) 435 | or 436 | [First Timers Only](http://www.firsttimersonly.com/). 437 | 438 | Another option is using the Capstone project from taking one of the Specializations in [Advanced applications](#advanced-applications); 439 | 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. 440 | In some cases, it may not be permitted; 441 | do **not** violate your course's Honor Code! 442 | 443 | Put the OSSU-CS badge in the README of your repository! 444 | [![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science) 445 | 446 | - Markdown: `[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)` 447 | - HTML: `Open Source Society University - Computer Science` 448 | 449 | ### Evaluation 450 | 451 | Upon completing your final project, submit your project's information to [PROJECTS](PROJECTS.md) 452 | via a pull request and use our [community](#community) channels to announce it to your fellow students. 453 | 454 | Your peers and mentors from OSSU will then informally evaluate your project. 455 | You will not be "graded" in the traditional sense — everyone has their own measurements for what they consider a success. 456 | The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist 457 | and to get experience listening to feedback — both positive and negative — and taking it in stride. 458 | 459 | The final project evaluation has a second purpose: to evaluate whether OSSU, 460 | through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education. 461 | 462 | ### Cooperative work 463 | 464 | You can create this project alone or with other students! 465 | **We love cooperative work**! 466 | Use our [channels](#community) to communicate with other fellows to combine and create new projects! 467 | 468 | ### Which programming languages should I use? 469 | 470 | My friend, here is the best part of liberty! 471 | You can use **any** language that you want to complete the final project. 472 | 473 | The important thing is to **internalize** the core concepts and to be able to use them with whatever tool (programming language) that you wish. 474 | 475 | ## Pro CS 476 | 477 | 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. 478 | 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. 479 | Many of these courses are graduate-level. 480 | 481 | Choose one or more of the following **specializations**: 482 | - [Mastering Software Development in R Specialization](https://www.coursera.org/specializations/r) by Johns Hopkins University 483 | - [Artificial Intelligence Engineer Nanodegree](https://www.udacity.com/ai) by IBM, Amazon, and Didi 484 | - [Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009) by Kaggle 485 | - [Cybersecurity MicroMasters](https://www.edx.org/micromasters/ritx-cybersecurity) by the Rochester Institute of Technology 486 | - [Android Developer Nanodegree](https://www.udacity.com/course/android-developer-nanodegree-by-google--nd801) by Google 487 | 488 | These aren't the only specializations you can choose. Check the following websites for **more options**: 489 | - edX: [xSeries](https://www.edx.org/xseries) 490 | - Coursera: [Specializations](https://www.coursera.org/specializations) 491 | - Udacity: [Nanodegree](https://www.udacity.com/nanodegree) 492 | 493 | ### Where to go next? 494 | 495 | - Look for a job as a developer! 496 | - Check out the [readings](extras/readings.md) for classic books you can read that will sharpen your skills and expand your knowledge. 497 | - Join a local developer meetup (e.g. via [meetup.com](https://www.meetup.com/)). 498 | - Pay attention to emerging technologies in the world of software development: 499 | + 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! 500 | + Explore **borrowing and lifetimes** through [Rust](https://www.rust-lang.org/), a systems language which achieves memory- and thread-safety without a garbage collector! 501 | + Explore **dependent type systems** through [Idris](https://www.idris-lang.org/), a new Haskell-inspired language with unprecedented support for type-driven development. 502 | 503 | ![keep learning](http://i.imgur.com/REQK0VU.jpg) 504 | 505 | # Code of conduct 506 | [OSSU's code of conduct](https://github.com/ossu/code-of-conduct). 507 | 508 | # Community 509 | 510 | - Subscribe to our [newsletter](https://tinyletter.com/ossu). 511 | - Use our [forum](https://github.com/ossu/forum) if you need some help. 512 | - You can also interact through [GitHub issues](https://github.com/ossu/computer-science/issues). 513 | - 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) 514 | - Add **Open Source Society University** to your [Linkedin](https://www.linkedin.com/school/11272443/) profile! 515 | 516 | > **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. 517 | **Please use our forum for important discussions**. 518 | 519 | ## How to show your progress 520 | 521 | 1. Create an account in [Trello](https://trello.com/). 522 | 1. Copy [this](https://trello.com/b/7NIfi40X) board to your personal account. 523 | See how to copy a board [here](https://help.trello.com/article/802-copying-cards-lists-or-boards). 524 | 525 | 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. 526 | 527 | We also have **labels** to help you have more control through the process. 528 | The meaning of each of these labels is: 529 | 530 | - `Main Curriculum`: cards with that label represent courses that are listed in our curriculum. 531 | - `Extra Resources`: cards with that label represent courses that were added by the student. 532 | - `Doing`: cards with that label represent courses the student is current doing. 533 | - `Done`: cards with that label represent courses finished by the student. 534 | Those cards should also have the link for at least one project/article built with the knowledge acquired in such course. 535 | - `Section`: cards with that label represent the section that we have in our curriculum. 536 | Those cards with the `Section` label are only to help the organization of the Done column. 537 | You should put the *Course's cards* below its respective *Section's card*. 538 | 539 | 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. 540 | You can change the status of your board to be *public* or *private*. 541 | 542 | ## Team 543 | 544 | * **[Eric Douglas](https://github.com/ericdouglas)**: founder of OSSU and co-maintainer of all its curricula 545 | * **[hanjiexi](https://github.com/hanjiexi)**: lead technical maintainer 546 | * **[waciumawanjohi](https://github.com/waciumawanjohi)**: lead academic maintainer 547 | * **[Contributors](https://github.com/ossu/computer-science/graphs/contributors)** 548 | 549 | # References 550 | 551 | - [Google - Guide for Technical Development](https://www.google.com/about/careers/students/guide-to-technical-development.html) 552 | - [Coursera](https://www.coursera.org/) 553 | - [edX](https://www.edx.org) 554 | - [Udacity](https://www.udacity.com/) 555 | - [Stanford University](https://lagunita.stanford.edu/) 556 | - [Carnegie Mellon University: Computer Science Major Requirements](https://www.csd.cs.cmu.edu/academics/undergraduate/requirements) 557 | - [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science) 558 | - [Teach Yourself Computer Science](https://teachyourselfcs.com/) 559 | - [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/) 560 | --------------------------------------------------------------------------------