├── .gitattributes ├── .xet └── config.toml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── CURRICULAR_GUIDELINES.md ├── Code-of-Conduct.md ├── FAQ.md ├── HELP.md ├── LICENSE ├── PROJECTS.md ├── README.md ├── ReadmeChinese.md └── extras ├── Logo.png ├── courses.md ├── other_curricula.md └── readings.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # XET LOCK 2 | * filter=xet diff=xet merge=xet -text 3 | *.gitattributes filter= 4 | *.xet/** filter= 5 | -------------------------------------------------------------------------------- /.xet/config.toml: -------------------------------------------------------------------------------- 1 | [upstream] 2 | origin_type = "github" 3 | user_name = "Charmve" 4 | repo_name = "OpenCS-Courses" 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | **Note**: The curriculum is currently undergoing review for v9. This consists largely of checking our recommendations against our [curricular guidelines](CURRICULAR_GUIDELINES.md), adding missing topics and cutting redundant or out of scope courses. As Requests for Comment in this effort are completed, changes are made immediately to the curriculum. When the overall review is complete we will notate the version bump to v9. 4 | 5 | All notable changes to this project will be documented in this file. 6 | This project adheres *in spirit* to [Semantic Versioning](http://semver.org/): 7 | - "MAJOR" updates correspond to changing the topics studied within a subject 8 | - "MINOR" updates correspond to changing courses without changing the topics 9 | - "PATCH" updates correspond to aesthetic and non-essential additions/removals or changing order of classes for better progression 10 | 11 | ## [8.0.0] 2017-11-01 12 | ### Added 13 | - extras/readings: "The System Design Primer" 14 | - extras/readings: "Category Theory for Programmers: The Preface" 15 | - extras/readings: "Programming Languages: Application and Interpretation" 16 | - extras/readings: "Programming and Programming Languages" 17 | - CONTRIBUTING: "Learning Git" section to the contributor guidelines page 18 | - Core Math: Added "Essence of Linear Algebra" as pre-requisite to "Linear Algebra: Foundations to Frontiers" 19 | 20 | ### Updated 21 | - Moved "Introduction to Mathematical Thinking" to extras/courses 22 | - Moved "Hack the Kernel" (ops-class) from Advanced Systems to Core Systems 23 | - Core Systems: "Operating Systems: Three Easy Pieces" is no longer required, but is recommended as companion text to "Hack the Kernel" 24 | - Core Theory: Replaced Coursera with Lagunita as the host for Stanford Algorithms, since Coursera uses dark patterns to trick users into paying 25 | 26 | ## [7.2.2] 2017-07-02 27 | ### Added 28 | - "Haskell Programming from First Principles" book as a paid alternative to learn Haskell 29 | - "Think Python" to extras/readings 30 | - FAQ entries and links under relevant courses 31 | - "Category Theory: A Gentle Introduction" to extras/readings 32 | 33 | ## [7.2.1] 2017-05-14 34 | ### Updated 35 | - Networking course should take 8 weeks to complete 36 | - Fixed spelling error 37 | 38 | ### Added 39 | - Introduction to Haskell course to [extras/courses](extras/courses.md) 40 | 41 | ## [7.2.0] 2017-04-28 42 | ### Added 43 | - Software Testing course 44 | - Link to Stanford Lagunita's Algorithms: Design and Analysis 45 | - 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 46 | 47 | ## [7.1.2] 2017-04-22 48 | ### Updated 49 | - Add link to Mega Project List in the introduction of the Projects section 50 | 51 | ## [7.1.1] 2017-04-11 52 | ### Updated 53 | - Final touch to release 54 | 55 | ## [7.1.0] 2017-04-10 56 | ### Updated 57 | - Reverted reformat of programming languages course 58 | 59 | ### Added 60 | - Reliable Distributed Algorithms courses 61 | - New Introduction to CS course 62 | 63 | ## [7.0.2] 2017-03-30 64 | ### Updated 65 | - Moved optional online learning courses to extras/courses in a new section 66 | - Moved alternate computer architecture course to extras/courses 67 | 68 | ### Added 69 | - Scala specialization under Advanced applications 70 | 71 | ### Removed 72 | - Removed all but one choice for required readings to make the curriculum simpler 73 | 74 | ## [7.0.1] 2017-03-11 75 | ### Updated 76 | - Fixed link to Bradfield's DIY computer science page 77 | 78 | ### Added 79 | - Note under Calculus One with links to errata and course progression recommendations 80 | - Optional courses under extras: 81 | - Strang's course on linear algebra 82 | - Berkeley's Structure and Interpretation of Computer Programs 83 | - Optional readings under extras: 84 | - Van Roy's advanced programming book 85 | - P&H's computer architecture book 86 | - Skiena's algorithms book 87 | - Strang's linear algebra book 88 | - Database Management Systems book 89 | - Tarr's book on creating your own Domain-specific language 90 | - Readings from various authors on distributed systems 91 | 92 | ## [7.0] 2017-03-09 93 | Complete overhaul of program structure 94 | 95 | ### Updated 96 | - Clarified contributor guidelines and moved them to separated file 97 | - Switched from many subjects to just four subjects with many topics 98 | - Consolidated free-books.md and paid-books.md into readings.md 99 | - Consolidated free-courses.md and paid-courses.md into courses.md 100 | - Replace old "How to Code" with new "How to Code" (Software Development MicroMasters) 101 | - Replace Princeton Algorithms (moved to [alternative courses](#extras/courses.md)) with Stanford Algorithms 102 | 103 | ### Added 104 | - Indicate prerequisites for all courses 105 | - Requirements: subject/topic requirements and project requirements 106 | - Required readings on Haskell, Prolog, Operating Systems 107 | - Courses: Dan Grossman's Programming Languages 108 | - Courses: From Nand to Tetris 109 | - Elective course: Intro to Parallel Programming 110 | - Elective course: LAFF: Programming for Correctness 111 | - Elective course: Introduction to Mathematical Thinking 112 | - Elective courses: Electricity and Magnetism 113 | - Elective courses: MIT's Computation Structures 114 | - Elective course: Multivariable Calculus 115 | - Elective course: ops-class.org 116 | - Elective course: Automata Theory 117 | - Elective course: Introduction to Logic 118 | - Elective course: Computational Geometry 119 | - Elective course: Formal Concept Analysis 120 | - Elective course: Game Theory 121 | - Elective specializations: 122 | - Robotics 123 | - Data Mining 124 | - Big Data 125 | - Internet of Things 126 | - Cloud Computing 127 | - Full Stack Web Development 128 | - Data Science 129 | - Pro specializations: 130 | - Mastering Software Development in R 131 | - Artificial Intelligence Engineer 132 | - Machine Learning Engineer 133 | - Cybersecurity 134 | - Android Developer 135 | 136 | ### Removed 137 | - Removed many dead links and obsolete courses 138 | - Removed per-course project requirement 139 | - Course: Object-Oriented Programming in Java 140 | - Course: Functional Programming in Scala 141 | - Course: Computer Architecture (but left as a footnote) 142 | - Course: Intro to Theoretical Computer Science 143 | - Course: Software Processes and Agile Practices 144 | - Course: Operating Systems & System Programming 145 | - Course: Introduction to Cyber Security 146 | - Course: Parallel Computer Architecture and Programming 147 | - Course: UX Design for Mobile Developers 148 | 149 | ## [6.0] 2016-10-09 150 | ### Updated 151 | - Put Calculus One before and together with Mathematics for Computer Science 152 | - Improve text in "Order of the classes" 153 | 154 | ### Added 155 | - Create public Trello board with the new curriculum version 156 | - Create the section "How to track and show your progress" in "How to use this guide" 157 | - Add PROJECTS.md file 158 | - Copy all sections of curriculum to PROJECTS.md 159 | 160 | ### Removed 161 | - Remove "Next Goals" section 162 | - Remove reference to OSSU web app 163 | 164 | ## [5.1.0] 2016-08-20 165 | Update to latest version of Math for Computer Science: 166 | 167 | ### Updated 168 | - Section: **Math (Discrete Math)** 169 | - Mathematics for Computer Science 170 | 171 | ## [5.0.0] 2016-08-20 172 | Due to removed course, we had the following updates: 173 | 174 | ### Removed 175 | - Section: **Natural Language Processing** 176 | - Natural Language Processing 177 | 178 | ### Added 179 | - Section: **Natural Language Processing** 180 | - Introduction to Natural Language Processing 181 | 182 | ## [4.1.0] 2016-08-05 183 | Due to Coursera's platform changes, we had the following updates: 184 | ### Fixed 185 | - Section: **Big Data** 186 | - Introduction to Big Data 187 | 188 | ## [4.0.0] 2016-07-30 189 | Due to Coursera's platform changes, we had the following updates: 190 | 191 | ### Removed 192 | - Section: **Theory** 193 | - Automata 194 | - Section: **Math (Linear Algebra)** 195 | - Coding the Matrix: Linear Algebra through Computer Science Applications 196 | - Section: **Parallel Computing** 197 | - Heterogeneous Parallel Programming 198 | - Section: **Natural Language Processing** 199 | - Natural Language Processing 200 | 201 | ### Fixed 202 | - Section: **Computer Networks** 203 | - Computer Networks 204 | - Section: **Compilers** 205 | - Compilers 206 | 207 | ### Added 208 | - Section: **Theory** 209 | - Intro to Theoretical Computer Science 210 | - Section: **Math (Linear Algebra)** 211 | - Linear Algebra - Foundations to Frontiers 212 | - Section: **Parallel Computing** 213 | - Parallel Computer Architecture and Programming 214 | - Section: **Natural Language Processing** 215 | - Natural Language Processing 216 | 217 | ## [3.0.0] 2016-05-04 218 | ### Removed 219 | - Section: **Introduction to Computer Science**: 220 | - Introduction to Computer Science and Programming Using Python 221 | - From Nand to Tetris (Part 1) 222 | 223 | ### Added 224 | - Section: **Introduction to Computer Science**: 225 | - Introduction to Computer Science - CS50 226 | 227 | ## [2.0.1] 2016-04-04 228 | ### Fixed 229 | - Now students should enroll through our [web app](https://ossu.firebaseapp.com). 230 | 231 | ## [2.0.0] 2016-03-17 232 | ### Fixed 233 | - Program Design section course's names and links 234 | 235 | ### Removed 236 | - **Introduction to Computer Science**: 237 | - Introduction to Computer Science 238 | - Introduction to Computational Thinking and Data Science 239 | - **Algorithms** 240 | - Analysis of Algorithms 241 | - **Programming Paradigms** 242 | - Principles of Reactive Programming 243 | - **Math (Calculus)** 244 | - Multivariable Calculus 245 | - **Software Architecture**: 246 | - Web Application Architectures 247 | - **Software Engineering**: 248 | - Agile Development Using Ruby on Rails - Basics 249 | - Agile Development Using Ruby on Rails - Advanced 250 | - Startup Engineering 251 | - **Computer Architecture**: 252 | - The Hardware/Software Interface 253 | - **Operating Systems**: 254 | - Operating System Engineering 255 | - **Computer Networks**: 256 | - Introduction to Computer Networking 257 | - **Cryptography**: 258 | - Applied Cryptography 259 | 260 | **ps**: These removed courses are now in the [extras](https://github.com/ossu/computer-science/tree/master/extras) section. 261 | 262 | ## [1.3.12] 2016-03-17 263 | ### Added 264 | - How to collaborate: send new links to the extras section 265 | 266 | ## [1.3.11] 2016-03-06 267 | ### Fixed 268 | - Nand to Tetris: change name and url 269 | - UC Berkeley Agile development: change name and url 270 | - Direct links to specializations 271 | 272 | ## [1.3.10] 2016-03-06 273 | ### Fixed 274 | - Link from Systematic Program Design Part 2 course 275 | 276 | ## [1.3.9] 2015-11-09 277 | ### Fixed 278 | - Link for the correct Natural Language Processing course 279 | 280 | ## [1.3.8] 2015-11-07 281 | ### Added 282 | - Add "Project Suggestions" section with more references 283 | 284 | ## [1.3.7] 2015-11-01 285 | ### Removed 286 | - Removed project.md file, moved to **help** repo 287 | 288 | ## [1.3.6] 2015-10-22 289 | ### Added 290 | - Latest version of CS 162, Operating Systems and System Programming 291 | 292 | ## [1.2.6] 2015-10-19 293 | ### Added 294 | - Badge/Link to the Awesome list 295 | 296 | ## [1.2.5] 2015-10-16 297 | ### Fixed 298 | - Fix name of the section and add a hyperlink to it. 299 | 300 | ## [1.2.4] 2015-10-14 301 | ### Removed 302 | - Removed citation about public commitment 303 | 304 | ## [1.2.3] 2015-10-12 305 | ### Changed 306 | - Updated the prerequisite section for more clarity 307 | 308 | ## [1.2.2] 2015-10-12 309 | ### Fixed 310 | - New link to issue intended for students' enrollment 311 | 312 | ## [1.2.1] 2015-10-11 313 | ### Added 314 | - Article Git - the simple guide to the prerequisite section 315 | 316 | ##[1.1.1] 2015-10-11 317 | ### Fixed 318 | - Fix typos 319 | - As MOOC is a "Massive Open Online Course" MOOC course is redundant 320 | - Elaborated on "real problem" 321 | - Fixed a few small grammatical and wording errors 322 | 323 | ## [1.1.0] 2015-10-08 324 | ### Added 325 | - Motivation & Preparation section (optional resources) 326 | - Article: MIT Challenge 327 | - Course: Learning How to Learn 328 | 329 | ## [1.0.0] 2015-10-08 330 | 331 | Release of the first **complete** version of the Computer Science curriculum 332 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Changing the Curriculum 2 | OSSU thrives because of the changes made by our many contributors. Read on for details on how to help every student that follows you. 3 | 4 | ## Non-substantive changes 5 | 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://www.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github-3/) to fix any mistakes that you have found. 6 | 7 | ## Substantive changes 8 | 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/). While it is acceptable to point out problems, all successful changes naturally require a plan for fixing the problem. 9 | OSSU’s curricular guidelines are [here](./CURRICULAR_GUIDELINES.md). Successful critiques of the curriculum will point out ways that OSSU is failing to uphold these guidelines. Examples are: 10 | 11 | * OSSU lists a course as required when the course topics are elective in the curricular guide. 12 | * OSSU does not having a course to cover required topics from the curricular guide. 13 | * OSSU lists multiple courses that cover the same topics when fewer courses could suffice. 14 | * OSSU recommends a course to teach a topic, but there exists a higher quality course that covers the same material. 15 | 16 | ## Other ways to contribute 17 | ### Responding to Issues 18 | Issues require more than just users to suggest them. Issues require active community members to read and respond to proposals. Even adding simple [emoji reactions](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) can help the community. 19 | ### Engaging with other students 20 | Learning is enhanced by engaged peers. You can be that peer for someone new to OSSU. When you see a new person posting in Gitter, ask them a question about themselves. When you see a cohort starting at _almost_ the right time, join in. Doing so will make OSSU a stronger program for everyone, including you. 21 | 22 | # Personal Customization 23 | If you want to customize the curriculum for yourself, you are encouraged to [fork this project](https://help.github.com/articles/fork-a-repo/)! 24 | -------------------------------------------------------------------------------- /CURRICULAR_GUIDELINES.md: -------------------------------------------------------------------------------- 1 | # Curricular Guidelines 2 | 3 | [Curriculum Guidelines for Undergraduate Programs in Computer Science](https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf) 4 | 5 | Our curricular guidelines are from the 2013 report of the Association for Computing Machinery and the Institute of Electrical and Electronics Engineers. This report is the most recent in a series of such reports outlining the expectations of undergraduate degrees in Computer Science. The report outlines critical Knowledge Areas and topics within them. It drills down further to outline specific learning goals, going so far as to outline what concepts a student must be able to explain vs concepts a student must be able to demonstrate using in practice. 6 | 7 | ## Organizations publishing: 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 | ### Institute of Electrical and Electronics Engineers 14 | 15 | 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. -------------------------------------------------------------------------------- /Code-of-Conduct.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | # OpenCS's Code of Conduct 6 | 7 | ## 1. Purpose 8 | 9 | A primary goal of OpenCS is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). 10 | 11 | This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. 12 | 13 | We invite all those who participate in one of the OpenCS's initiatives to help us create safe and positive experiences for everyone. 14 | 15 | ## 2. Open Source Citizenship 16 | 17 | A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. 18 | 19 | Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. 20 | 21 | If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. 22 | 23 | ## 3. Expected Behavior 24 | 25 | The following behaviors are expected and requested of all community members: 26 | 27 | * Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. 28 | * Exercise consideration and respect in your speech and actions. 29 | * Attempt collaboration before conflict. 30 | * Refrain from demeaning, discriminatory, or harassing behavior and speech. 31 | * Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. 32 | 33 | ## 4. Unacceptable Behavior 34 | 35 | The following behaviors are considered harassment and are **unacceptable** within our community: 36 | 37 | * Violence, threats of violence or violent language directed against another person. 38 | * Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. 39 | * Messages in an aggressive, rude, ironic, disrespectful, slanderous, tone. 40 | * Criticism on people, not ideas. 41 | * Posting or displaying sexually explicit or violent material. 42 | * Posting or threatening to post other people’s personally identifying information ("doxing"). 43 | * Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. 44 | * Inappropriate photography or recording. 45 | * Inappropriate physical contact. You should have someone’s consent before touching them. 46 | * Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. 47 | * Deliberate intimidation, stalking or following (online or in person). 48 | * Advocating for, or encouraging, any of the above behavior. 49 | 50 | ## 5. Consequences of Unacceptable Behavior 51 | 52 | Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. 53 | 54 | Anyone asked to stop unacceptable behavior is expected to comply immediately. 55 | 56 | If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community. 57 | 58 | ## 6. Reporting Guidelines 59 | 60 | If you are subject to or witness unacceptable behavior, or have any other concerns, please [notify](https://gitter.im/ericdouglas) a community organizer as soon as possible. 61 | 62 | ## 7. Addressing Grievances 63 | 64 | If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify OpenCS with a concise description of your grievance. Your grievance will be handled by community consensus. 65 | 66 | 67 | ## 8. Scope 68 | 69 | We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business. 70 | 71 | This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. 72 | 73 | ## 9. Contact info 74 | 75 | yidazhang1@gmail.com 76 | 77 | ## 10. License and attribution 78 | 79 | This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). 80 | 81 | OpenCS's Code of Conduct was inspired by [FrontendBR forum](https://github.com/frontendbr/forum). 82 | -------------------------------------------------------------------------------- /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 | - [Does OSSU offer a degree?](#does-ossu-offer-a-degree) 12 | - [How can I review the math prerequisites?](#how-can-i-review-the-math-prerequisites) 13 | - [What is a good course to learn a language (C++, Rust, Java, etc)?](#what-is-a-good-course-to-learn-a-particular-language) 14 | - [Why is the Firebase OSSU app different/broken?](#why-is-the-firebase-ossu-app-different-or-broken) 15 | - [In what order should I take the courses?](#in-what-order-should-i-take-the-courses) 16 | - [Does every resource in the main curriculum have to be free?](#does-every-resource-in-the-main-curriculum-have-to-be-free) 17 | - [Are Coursera courses free to access?](#are-coursera-courses-free-to-access) 18 | - [Is it necessary to purchase the Verified Upgrade for edX courses?](#is-it-necessary-to-purchase-the-verified-upgrade-for-edx-courses) 19 | - [Why do you recommend skipping the second half of CS50?](#why-do-you-recommend-skipping-the-second-half-of-cs50) 20 | - [Why doesn't the curriculum cover/ignore topic X?](#why-doesnt-the-curriculum-coverignore-topic-x) 21 | - [Why is the curriculum missing some pre-requisites?](#why-is-the-curriculum-missing-some-pre-requisites) 22 | - [Why require experience with a sizable project before the Software Engineering courses?](#why-require-experience-with-a-sizable-project-before-the-Software-Engineering-courses) 23 | 24 | ## Questions 25 | 26 | ### Does OSSU offer a degree? 27 | No. OSSU creates guides to resources that will empower you to learn the curriculum of an undergraduate degree. Individuals who used to be involved in OSSU may be working with other organizations to offer degrees, but Open Source Society University is not involved in those efforts. 28 | 29 | ### How can I review the math prerequisites? 30 | Many OSSU students choose to review math topics that they have not studied recently. 31 | OSSU recommends students use Khan Academy for such a review. 32 | Below are links to topic assessments. 33 | After taking an assessment, you should have a clear idea what topics to study, and resources on Khan Academy to use. 34 | 35 | - [Arithmetics](https://www.khanacademy.org/math/arithmetic#arithmetic-subject-challenge) 36 | - [Basic Geometry](https://www.khanacademy.org/math/basic-geo#basic-geo-subject-challenge) 37 | - [Pre-algebra](https://www.khanacademy.org/math/pre-algebra#pre-algebra-subject-challenge) 38 | - [High School Math 1](https://www.khanacademy.org/math/math1#math1-subject-challenge) 39 | - [High School Math 2](https://www.khanacademy.org/math/math2#math2-subject-challenge) 40 | - [High School Math 3](https://www.khanacademy.org/math/math3#math3-subject-challenge) 41 | 42 | (Math 1, 2, 3 covers all of algebra, pre-calculus, high school geometry, trig, stats. It interleaves the order of these topics.) 43 | 44 | ### What is a good course to learn a particular language? 45 | OSSU focuses on finding the best courses to learn computer science topics, and isn’t focused on finding language specific courses. If you are looking to learn a particular language or framework there are two great resources to check. 46 | 1. [Hackr.io](https://hackr.io/) allows users to submit and upvote learning resources for topics such as Python or the Java Spring Framework. 47 | 2. Most languages have a community on reddit. When you find the community’s page, check to see if there is a wiki or sidebar with resources. For example, see [/r/python](https://old.reddit.com/r/Python). Note that the sidebar content can be different depending on whether you use www.reddit.com or old.reddit.com. 48 | 49 | ### Why is the Firebase OSSU app different or broken? 50 | 51 | The OSSU curriculum and ecosystem have been collaboratively built by many individuals. The Firebase app was one such contribution. When it was written, it was with the intention of helping future OSSU students. 52 | 53 | Unfortunately, the app has not been updated in many years. It does not reflect updates to the curriculum, it contains links to courses that no longer exist, and it has known bugs that prevent students from logging in. 54 | 55 | It is our hope that the creators of the Firebase app can bring the app up to date. Until that time, the firebase app should be considered a deprecated product that is no longer supported. 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 | ### Does every resource in the main curriculum have to be free? 67 | 68 | Yes, that is a core goal of OSSU. 69 | 70 | At the same time, we recognize that education is a resource that requires payment to instructors to make it sustainable in the long term. 71 | 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. 72 | 73 | So we only require that the *learning materials* of a resource be free to access, not that every possible add-on be free. 74 | It would be ideal if graded assignments were always free. In the event that free assessments are not available OSSU looks for alternate assessments to pair with a course. 75 | 76 | ### Are Coursera courses free to access? 77 | 78 | Some courses that require payment to access probably do exist on Coursera, but we don't put those on our curriculum. 79 | All Coursera courses that we put on the curriculum must, at minimum, be **free to audit**. 80 | For some courses, all course features are available for free; 81 | for others (especially those that are part of a specialization), you may only be able to access the lecture videos. 82 | (If you find the policies have changed for any courses on our curriculum, please tell us!) 83 | 84 | Unfortunately, for some courses, Coursera's interface is [very aggressive](https://darkpatterns.org/) about convincing you that you have to pay. 85 | 86 | You may see something like this on the course page: 87 | 88 | Free Trial 89 | 90 | When attempting to enroll in such a course: 91 | - Click the blue "Enroll" or "Enroll Now" button. 92 | - A pop-up will appear. 93 | - **Do not click** "Start Free Trial", unless you do want to pay. 94 | - Find the text that says "Audit this course" at the bottom. 95 | - Click **Audit**. 96 | 97 | ![Audit this course](https://user-images.githubusercontent.com/3349406/27321369-95ca12e6-55cc-11e7-9b5c-f8fedd8fd643.png) 98 | 99 | ### Is it necessary to purchase the Verified Upgrade for edX courses? 100 | 101 | If you just want to watch the videos, it is never necessary for any edX course on our curriculum. Note that a number of edX courses only allow students to audit a course for the estimated number of weeks it takes to complete. Students should not begin a course until they are prepared to focus and complete the course. 102 | 103 | ### Why do you recommend skipping the second half of CS50? 104 | 105 | The strongest and most useful part of CS50 is the part where they teach C. 106 | 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. 107 | By learning C, students will also have a much easier time getting through the following course, Nand2Tetris. 108 | 109 | That being said, feel free to finish CS50 if you like it and want to. 110 | 111 | ### Why doesn't the curriculum cover/ignore topic X? 112 | 113 | You can read more about our curricular guidelines and the qualifications of the guidelines' authors [here](CURRICULAR_GUIDELINES.md). If you find a topic that is required by our guidelines and is not included in the curriculum, we should make a change! Read more about [contributing to a change](CONTRIBUTING.md). 114 | 115 | ### Why is the curriculum missing some pre-requisites? 116 | 117 | The curriculum assumes two things: 118 | - You are reasonably fluent in English. 119 | - You have gotten through a standard high school curriculum that included physics and pre-calculus. 120 | 121 | Without these assumptions, the curriculum would be out of control with trying to fill in your knowledge gaps. 122 | For those who want to study math pre-requisites, read more [here](#how-can-i-review-the-math-prerequisites) 123 | 124 | 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! 125 | 126 | ### Why require experience with a sizable project before the Software Engineering courses? 127 | Software engineering tries to solve the problem of dealing with large programs. Building a sizable program before taking the SE courses will help you understand what SE is trying to solve. We recommend the Jack-to-VM-code compiler project from the nand2tetris course because it's the first project in the curriculum that is complex enough to see value in a SE course. That said, any sizable project will do and can come from outside of the OSSU curriculum. The idea is that you've done some large enough project where the pieces started to feel unmanageable. This experience will expose pain points and lead to a better understanding of SE. 128 | -------------------------------------------------------------------------------- /HELP.md: -------------------------------------------------------------------------------- 1 | # Getting help 2 | ## Check the FAQ! 3 | Please check our [Frequently Asked Questions](FAQ.md) to see if your question has been addressed. 4 | ## Ask in the chat room 5 | [![Discord](https://img.shields.io/discord/744385009028431943.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/5pUhfpX) Join the OSSU [Discord server](https://discord.gg/5pUhfpX)! Discord is an online chat service, similar to Slack or IRC where you can chat with other students and get help. 6 | ### Specific problems 7 | If you need help successfully completing the content of a course or are having general technical difficulties, first reach out to the resources provided by the course (e.g. the course forum on Coursera, edX, etc). If you need additional help after that, post in Discord. **In your post, mention what steps you have already taken to try and solve the problem**. 8 | ### General problems 9 | If you have general problems with the program not specific to any course, such as preferring textbook-style learning over MOOCs, Discord is a good place to reach out to people who may have great suggestions. You might form a working group that makes the next improvement to OSSU CS! Read more about contributing [here](CONTRIBUTING.md). 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 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 Architecture 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 | Observatory | Interactively displays temperatures and deviations all around the world from 1975 to 2015 | [spamegg](https://github.com/spamegg1) | [ScalaCapstone](https://github.com/spamegg1/ScalaCapstone) 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenCS-Courses 2 | @Charmve | English | Chinese 3 | 4 |
5 | 6 |
7 | 8 |

OpenCS: Top University Open CS Courses

9 |

10 | Path to a free self-taught education in Computer Science! 11 |

12 |

13 | 14 | Awesome 15 | 16 | 17 | Open Source Society University - Computer Science 18 | 19 |

20 | 21 | # Contents 22 | 23 | - [Summary](#summary) 24 | - [Community](#community) 25 | - [Curriculum](#curriculum) 26 | - [Code of Conduct](#code-of-conduct) 27 | - [Team](#team) 28 | 29 | # Summary 30 | 31 | The OpenCS curriculum is a **complete education in computer science** using online materials. 32 | It's not merely for career training or professional development. 33 | It's for those who want a proper, *well-rounded* grounding in concepts fundamental to all computing disciplines, 34 | and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, 35 | but with support from a worldwide community of fellow learners. 36 | 37 | It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, 38 | as it is assumed most of the people following this curriculum are already educated outside the field of CS. 39 | The courses themselves are among the very best in the world, often coming from Harvard, Princeton, MIT, etc., 40 | but specifically chosen to meet the following criteria. 41 | 42 | **Courses must**: 43 | - Be open for enrollment 44 | - Run regularly (ideally in self-paced format, otherwise running multiple times per year) 45 | - Be of generally high quality in teaching materials and pedagogical principles 46 | - Match the curricular standards of the [CS 2013](CURRICULAR_GUIDELINES.md): Curriculum Guidelines for Undergraduate Degree Programs in Computer Science 47 | 48 | When no course meets the above criteria, the coursework is supplemented with a book. 49 | When there are courses or books that don't fit into the curriculum but are otherwise of high quality, 50 | they belong in [extras/courses](extras/courses.md) or [extras/readings](extras/readings.md). 51 | 52 | **Organization**. The curriculum is designed as follows: 53 | - *Intro CS*: for students to try out CS and see if it's right for them 54 | - *Core CS*: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take 55 | - *Advanced CS*: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student's interests 56 | - *Final Project*: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide 57 | 58 | **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. 59 | Courses in Core CS should be taken linearly if possible, but since a perfectly linear progression is rarely possible, 60 | each class's prerequisites are specified so that you can design a logical but non-linear progression 61 | based on the class schedules and your own life plans. 62 | 63 | **Cost**. All or nearly all course material is available for free. However, some courses may charge money for assignments/tests/projects to be graded. 64 | Note that Coursera offers [financial aid](https://learner.coursera.help/hc/en-us/articles/209819033-Apply-for-Financial-Aid). 65 | 66 | Decide how much or how little to spend based on your own time and budget; 67 | just remember that you can't purchase success! 68 | 69 | **Process**. Students can work through the curriculum alone or in groups, in order or out of order. 70 | - We recommend doing all courses in Core CS, only skipping a course when you are certain that you've already learned the material previously. 71 | - 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. 72 | - 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. 73 | 74 | **Content policy**. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. 75 | *Do NOT disrespect the code of conduct* that you signed in the beginning of each course! 76 | 77 | **[How to contribute](CONTRIBUTING.md)** 78 | 79 | **[Getting help](HELP.md)** (Details about our FAQ and chatroom) 80 | 81 | # Community 82 | 83 | - We have a discord server! [![Discord](https://img.shields.io/discord/744385009028431943.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/5pUhfpX) This should be your first stop to talk with other OpenCS students. Why don't you introduce yourself right now? [Join the CS channel in OSSU Discord](https://discord.gg/5pUhfpX) 84 | - You can also interact through [GitHub issues](https://github.com/Charmve/OpenCS-Courses/issues). If there is a problem with a course, or a change needs to be made to the curriculum, this is the place to start the conversation. Read more [here](CONTRIBUTING.md). 85 | - Subscribe to our [newsletter](https://tinyletter.com/ossu). 86 | - Add **Open Source Society University** to your [Linkedin](https://www.linkedin.com/school/11272443/) profile! 87 | - Note: There is an unmaintained and deprecated firebase app that you might find when searching OpenCS. You can safely ignore it. Read more in the [FAQ](./FAQ.md#why-is-the-firebase-ossu-app-different-or-broken). 88 | 89 |
90 | 91 | # Curriculum 92 | 93 | **Curriculum version**: `8.0.0` (see [CHANGELOG](CHANGELOG.md)) 94 | 95 | - [Prerequisites](#prerequisites) 96 | - [Intro CS](#intro-cs) 97 | - [Introduction to Programming](#introduction-to-programming) 98 | - [Introduction to Computer Science](#introduction-to-computer-science) 99 | - [Core CS](#core-cs) 100 | - [Core programming](#core-programming) 101 | - [Core math](#core-math) 102 | - [CS Tools](#cs-tools) 103 | - [Core systems](#core-systems) 104 | - [Core theory](#core-theory) 105 | - [Core applications](#core-applications) 106 | - [Core security](#core-security) 107 | - [Advanced CS](#advanced-cs) 108 | - [Advanced programming](#advanced-programming) 109 | - [Advanced systems](#advanced-systems) 110 | - [Advanced theory](#advanced-theory) 111 | - [Advanced applications](#advanced-applications) 112 | - [Final project](#final-project) 113 | 114 | --- 115 | 116 | ## Prerequisites 117 | 118 | - [Core CS](#core-cs) assumes the student has already taken [high school math](https://github.com/Charmve/OpenCS-Courses/blob/master/FAQ.md#how-can-i-review-the-math-prerequisites), including algebra, geometry, and pre-calculus. 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 | [BACK to TOP -->](#curriculum) 124 | 125 | ## Intro CS 126 | 127 | ### Introduction to Programming 128 | 129 | If you've never written a for-loop, or don't know what a string is in programming, start here. This course is self-paced, allowing you to adjust the number of hours you spend per week to meet your needs. 130 | 131 | **Topics covered**: 132 | `simple programs` 133 | `simple data structures` 134 | 135 | Courses | Duration | Effort | Prerequisites | Discussion 136 | :-- | :--: | :--: | :--: | :--: 137 | [Python for Everybody](https://www.py4e.com/) | 10 weeks | 10 hours/week | none | [chat](https://discord.gg/syA242Z) 138 | 139 | ### Introduction to Computer Science 140 | 141 | 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! 142 | 143 | **Topics covered**: 144 | `computation` 145 | `imperative programming` 146 | `basic data structures and algorithms` 147 | `and more` 148 | 149 | Courses | Duration | Effort | Prerequisites | Discussion 150 | :-- | :--: | :--: | :--: | :--: 151 | [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](https://www.khanacademy.org/math/algebra-home) | [chat](https://discord.gg/jvchSm9) 152 | 153 | [BACK to TOP -->](#curriculum) 154 | 155 | ## Core CS 156 | 157 | All coursework under Core CS is **required**, unless otherwise indicated. 158 | 159 | ### Core programming 160 | **Topics covered**: 161 | `functional programming` 162 | `design for testing` 163 | `program requirements` 164 | `common design patterns` 165 | `unit testing` 166 | `object-oriented design` 167 | `Java` 168 | `static typing` 169 | `dynamic typing` 170 | `ML-family languages (via Standard ML)` 171 | `Lisp-family languages (via Racket)` 172 | `Ruby` 173 | `and more` 174 | 175 | The How to Code courses are based on the textbook [How to Design Programs](https://htdp.org/2003-09-26/). The First Edition is available for free online and includes problem sets and solutions. Students are encouraged to do these assignments. 176 | 177 | Courses | Duration | Effort | Prerequisites | Discussion 178 | :-- | :--: | :--: | :--: | :--: 179 | [How to Code - Simple Data](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x) | 7 weeks | 8-10 hours/week | none | [chat](https://discord.gg/RfqAmGJ) 180 | [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 | [chat](https://discord.gg/kczJzpm) 181 | [Programming Languages, Part A](https://www.coursera.org/learn/programming-languages) | 5 weeks | 4-8 hours/week | How to Code ([Hear instructor](https://www.coursera.org/lecture/programming-languages/recommended-background-k1yuh)) | [chat](https://discord.gg/8BkJtXN) 182 | [Programming Languages, Part B](https://www.coursera.org/learn/programming-languages-part-b) | 3 weeks | 4-8 hours/week | Programming Languages, Part A | [chat](https://discord.gg/EeA7VR9) 183 | [Programming Languages, Part C](https://www.coursera.org/learn/programming-languages-part-c) | 3 weeks | 4-8 hours/week | Programming Languages, Part B | [chat](https://discord.gg/8EZUVbA) 184 | 185 | ### Math Electives 186 | **Students must choose one of the following topics**: calculus, linear algebra, logic, or probability. 187 | 188 | #### Calculus 189 | 190 | Courses | Duration | Effort | Prerequisites | Discussion 191 | :-- | :--: | :--: | :--: | :--: 192 | [Calculus 1A: Differentiation](https://www.edx.org/course/calculus-1a-differentiation) | 13 weeks | 6-10 hours/week | [high school math](FAQ.md#how-can-i-review-the-math-prerequisites) | [chat](https://discord.gg/mPCt45F) 193 | [Calculus 1B: Integration](https://www.edx.org/course/calculus-1b-integration) | 13 weeks | 5-10 hours/week | Calculus 1A | [chat](https://discord.gg/sddAsZg) 194 | [Calculus 1C: Coordinate Systems & Infinite Series](https://www.edx.org/course/calculus-1c-coordinate-systems-infinite-series) | 6 weeks | 5-10 hours/week | Calculus 1B | [chat](https://discord.gg/FNEcNNq) 195 | 196 | #### Linear Algebra 197 | Courses | Duration | Effort | Prerequisites | Discussion 198 | :-- | :--: | :--: | :--: | :--: 199 | [Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) | - | - | [high school math](FAQ.md#how-can-i-review-the-math-prerequisites) | [chat](https://discord.gg/m6wHbP6) 200 | [Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/) | 14 weeks | 12 hours/week | Essence of Linear Algebra | [chat](https://discord.gg/k7nSWJH) 201 | 202 | #### Logic 203 | Courses | Duration | Effort | Prerequisites | Discussion 204 | :-- | :--: | :--: | :--: | :--: 205 | [Introduction to Logic](https://www.coursera.org/learn/logic-introduction) | 10 weeks | 4-8 hours/week | [set theory](https://www.youtube.com/playlist?list=PL5KkMZvBpo5AH_5GpxMiryJT6Dkj32H6N) | [chat](https://discord.gg/MbM2Gg5) 206 | 207 | #### Probability 208 | Courses | Duration | Effort | Prerequisites | Discussion 209 | :-- | :--: | :--: | :--: | :--: 210 | [Probability](https://projects.iq.harvard.edu/stat110/home) | 24 weeks | 12 hours/week | [Differentiation and Integration](https://www.edx.org/course/calculus-1b-integration) | [chat](https://discord.gg/UVjs9BU) 211 | 212 | ### Core Math 213 | In addition to their math elective, students must complete the following course on discrete mathematics. 214 | 215 | **Topics covered**: 216 | `discrete mathematics` 217 | `mathematical proofs` 218 | `basic statistics` 219 | `O-notation` 220 | `discrete probability` 221 | `and more` 222 | 223 | Courses | Duration | Effort | Notes | Prerequisites | Discussion 224 | :-- | :--: | :--: | :--: | :--: | :--: 225 | [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 | An alternate version with solutions to the problem sets is [here](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2005/assignments/). Students struggling can consider the [Discrete Mathematics Specialization](https://www.coursera.org/specializations/discrete-mathematics) first. It is more interactive but less comprehensive, and costs money to unlock full interactivity. | Calculus 1C | [chat](https://discord.gg/EuTzNbF) 226 | 227 | 228 | ### CS Tools 229 | Understanding theory is important, but you will also be expected to create programs. There are a number of tools that are widely used to make that process easier. Learn them now to ease your future work writing programs. 230 | 231 | **Topics covered**: 232 | `terminals and shell scripting` 233 | `vim` 234 | `command line environments` 235 | `version control` 236 | `and more` 237 | 238 | Courses | Duration | Effort | Prerequisites | Discussion 239 | :-- | :--: | :--: | :--: | :--: 240 | [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) | 2 weeks | 12 hours/week | - | [chat](https://discord.gg/5FvKycS) 241 | 242 | ### Core systems 243 | 244 | **Topics covered**: 245 | `procedural programming` 246 | `manual memory management` 247 | `boolean algebra` 248 | `gate logic` 249 | `memory` 250 | `computer architecture` 251 | `assembly` 252 | `machine language` 253 | `virtual machines` 254 | `high-level languages` 255 | `compilers` 256 | `operating systems` 257 | `network protocols` 258 | `and more` 259 | 260 | Courses | Duration | Effort | Additional Text / Assignments| Prerequisites | Discussion 261 | :-- | :--: | :--: | :--: | :--: | :--: 262 | [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 | [chat](https://discord.gg/NruSj5Q) 263 | [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 | [chat](https://discord.gg/vxB2DRV) 264 | [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 | [chat](https://discord.gg/AsUXcPu) 265 | [Introduction to Computer Networking](https://www.youtube.com/playlist?list=PLEAYkSg4uSQ2dr0XO_Nwa5OcdEcaaELSG)| 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)
[Interactive Problems](https://gaia.cs.umass.edu/kurose_ross/interactive/index.php) | algebra, probability, basic CS | [chat](https://discord.gg/MJ9YXyV) 266 | [Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/Classes/537/Spring2018/) | 10-12 weeks | 6 hours/week | - | algorithms | [chat](https://discord.gg/wZNgpep) 267 | 268 | ### Core theory 269 | 270 | **Topics covered**: 271 | `divide and conquer` 272 | `sorting and searching` 273 | `randomized algorithms` 274 | `graph search` 275 | `shortest paths` 276 | `data structures` 277 | `greedy algorithms` 278 | `minimum spanning trees` 279 | `dynamic programming` 280 | `NP-completeness` 281 | `and more` 282 | 283 | Courses | Duration | Effort | Prerequisites | Discussion 284 | :-- | :--: | :--: | :--: | :--: 285 | [Divide and Conquer, Sorting and Searching, and Randomized Algorithms](https://www.coursera.org/learn/algorithms-divide-conquer) | 4 weeks | 4-8 hours/week | any programming language, Mathematics for Computer Science | [chat](https://discord.gg/mKRS7tY) 286 | [Graph Search, Shortest Paths, and Data Structures](https://www.coursera.org/learn/algorithms-graphs-data-structures) | 4 weeks | 4-8 hours/week | Divide and Conquer, Sorting and Searching, and Randomized Algorithms | [chat](https://discord.gg/Qstqe4t) 287 | [Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming](https://www.coursera.org/learn/algorithms-greedy) | 4 weeks | 4-8 hours/week | Graph Search, Shortest Paths, and Data Structures | [chat](https://discord.gg/dWVvjuz) 288 | [Shortest Paths Revisited, NP-Complete Problems and What To Do About Them](https://www.coursera.org/learn/algorithms-npcomplete) | 4 weeks | 4-8 hours/week | Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming | [chat](https://discord.gg/dYuY78u) 289 | 290 | ### Core Security 291 | **Topics covered** 292 | `Confidentiality, Integrity, Availability` 293 | `Secure Design` 294 | `Defensive Programming` 295 | `Threats and Attacks` 296 | `Network Security` 297 | `Cryptography` 298 | `and more` 299 | 300 | Note: **_These courses are provisionally recommended_**. There is an open [Request For Comment](https://github.com/ossu/computer-science/issues/639) on security course selection. Contributors are encouraged to compare the various courses in the RFC and offer feedback. 301 | 302 | Courses | Duration | Effort | Prerequisites | Discussion 303 | :-- | :--: | :--: | :--: | :--: 304 | [Information Security: Context and Introduction](https://www.coursera.org/learn/information-security-data) | 5 weeks | 3 hours/week | - | [chat](https://discord.gg/8h6Rz8g) 305 | [Principles of Secure Coding](https://www.coursera.org/learn/secure-coding-principles)| 4 weeks | 4 hours/week | - | [chat](https://discord.gg/5gMdeSK) 306 | [Identifying Security Vulnerabilities](https://www.coursera.org/learn/identifying-security-vulnerabilities) | 4 weeks | 4 hours/week | - | [chat](https://discord.gg/V78MjUS) 307 | 308 | Choose **one** of the following: 309 | Courses | Duration | Effort | Prerequisites | Discussion 310 | :-- | :--: | :--: | :--: | :--: 311 | [Identifying Security Vulnerabilities in C/C++Programming](https://www.coursera.org/learn/identifying-security-vulnerabilities-c-programming) | 4 weeks | 5 hours/week | - | [chat](https://discord.gg/Vbxce7A) 312 | [Exploiting and Securing Vulnerabilities in Java Applications](https://www.coursera.org/learn/exploiting-securing-vulnerabilities-java-applications) | 4 weeks | 5 hours/week | - | [chat](https://discord.gg/QxC22rR) 313 | 314 | ### Core applications 315 | 316 | **Topics covered**: 317 | `Agile methodology` 318 | `REST` 319 | `software specifications` 320 | `refactoring` 321 | `relational databases` 322 | `transaction processing` 323 | `data modeling` 324 | `neural networks` 325 | `supervised learning` 326 | `unsupervised learning` 327 | `OpenGL` 328 | `raytracing` 329 | `and more` 330 | 331 | Courses | Duration | Effort | Prerequisites | Discussion 332 | :-- | :--: | :--: | :--: | :--: 333 | [Relational Databases and SQL](https://www.edx.org/course/databases-5-sql)| 2 weeks | 10 hours/week | core programming | [chat](https://discord.gg/P8SPPyF) 334 | [Databases: Modeling and Theory](https://www.edx.org/course/modeling-and-theory)| 2 weeks | 10 hours/week | [Relational Databases and SQL](https://www.edx.org/course/databases-5-sql) | [chat](https://discord.gg/pMFqNf4) 335 | [Databases: Semistructured Data](https://www.edx.org/course/semistructured-data)| 2 weeks | 10 hours/week | core programming | [chat](https://discord.gg/duCJ3GN) 336 | [Machine Learning](https://www.coursera.org/learn/machine-learning)| 11 weeks | 4-6 hours/week | linear algebra | [chat](https://discord.gg/NcXHDjy) 337 | [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)| 6 weeks | 12 hours/week | C++ or Java, linear algebra | [chat](https://discord.gg/68WqMNV) 338 | [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x) | 6 weeks | 8-10 hours/week | Core Programming, and a [sizable project](FAQ.md#why-require-experience-with-a-sizable-project-before-the-Software-Engineering-courses) | [chat](https://discord.gg/5Qtcwtz) 339 | [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 | [chat](https://discord.gg/2FAujEZ) 340 | 341 | [BACK to TOP -->](#curriculum) 342 | 343 | ## Advanced CS 344 | 345 | After completing **every required course** in Core CS, students should choose a subset of courses from Advanced CS based on interest. 346 | Not every course from a subcategory needs to be taken. 347 | But students should take *every* course that is relevant to the field they intend to go into. 348 | 349 | The Advanced CS study should then end with one of the Specializations under [Advanced applications](#advanced-applications). 350 | A Specialization's Capstone, if taken, may act as the [Final project](#final-project), if permitted by the Honor Code of the course. 351 | 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. 352 | 353 | ### Advanced programming 354 | 355 | **Topics covered**: 356 | `debugging theory and practice` 357 | `goal-oriented programming` 358 | `GPU programming` 359 | `CUDA` 360 | `parallel computing` 361 | `object-oriented analysis and design` 362 | `UML` 363 | `large-scale software architecture and design` 364 | `and more` 365 | 366 | Courses | Duration | Effort | Prerequisites 367 | :-- | :--: | :--: | :--: 368 | [Parallel Programming](https://www.coursera.org/learn/parprog1)| 4 weeks | 6-8 hours/week | Scala programming 369 | [Compilers](https://www.edx.org/course/compilers) | 9 weeks | 6-8 hours/week | none 370 | [Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/)| 14 weeks | - | - 371 | [Learn Prolog Now!](http://lpn.swi-prolog.org/lpnpage.php?pageid=top)| 12 weeks | - | - 372 | [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)| 8 weeks | 6 hours/week | Python, object-oriented programming 373 | [Software Testing](https://www.udacity.com/course/software-testing--cs258) | 4 weeks | 6 hours/week | Python, programming experience 374 | [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)| 8 weeks | 6 hours/week | software engineering in Java 375 | 376 | ### Advanced systems 377 | 378 | **Topics covered**: 379 | `digital signaling` 380 | `combinational logic` 381 | `CMOS technologies` 382 | `sequential logic` 383 | `finite state machines` 384 | `processor instruction sets` 385 | `caches` 386 | `pipelining` 387 | `virtualization` 388 | `parallel processing` 389 | `virtual memory` 390 | `synchronization primitives` 391 | `system call interface` 392 | `and more` 393 | 394 | Courses | Duration | Effort | Prerequisites 395 | :-- | :--: | :--: | :--: 396 | [Computation Structures 1: Digital Circuits](https://www.edx.org/course/computation-structures-part-1-digital-circuits) | 10 weeks | 6 hours/week | [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2) 397 | [Computation Structures 2: Computer Architecture](https://www.edx.org/course/computation-structures-2-computer-architecture-2) | 10 weeks | 6 hours/week | Computation Structures 1 398 | [Computation Structures 3: Computer Organization](https://www.edx.org/course/computation-structures-3-computer-organization-2) | 10 weeks | 6 hours/week | Computation Structures 2 399 | 400 | ### Advanced theory 401 | 402 | **Topics covered**: 403 | `formal languages` 404 | `Turing machines` 405 | `computability` 406 | `event-driven concurrency` 407 | `automata` 408 | `distributed shared memory` 409 | `consensus algorithms` 410 | `state machine replication` 411 | `computational geometry theory` 412 | `propositional logic` 413 | `relational logic` 414 | `Herbrand logic` 415 | `concept lattices` 416 | `game trees` 417 | `and more` 418 | 419 | Courses | Duration | Effort | Prerequisites 420 | :-- | :--: | :--: | :--: 421 | [Theory of Computation](http://aduni.org/courses/theory/index.php?view=cw) ([Lectures](https://www.youtube.com/playlist?list=PLTke5lHMAdSNmi57H0DOTzClHPK6UwSTN)) | 8 weeks | 10 hours/week | discrete mathematics, logic, algorithms 422 | [Computational Geometry](https://www.edx.org/course/computational-geometry-tsinghuax-70240183x) | 16 weeks | 8 hours/week | algorithms, C++ 423 | [Introduction to Formal Concept Analysis](https://www.coursera.org/learn/formal-concept-analysis) | 6 weeks | 4-6 hours/week | logic, probability 424 | [Game Theory](https://www.coursera.org/learn/game-theory-1) | 8 weeks | 3 hours/week | mathematical thinking, probability, calculus 425 | 426 | ### Advanced applications 427 | 428 | These Coursera Specializations all end with a Capstone project. 429 | Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum. 430 | Note that doing a Specialization with the Capstone at the end always costs money. 431 | 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. 432 | 433 | Courses | Duration | Effort | Prerequisites 434 | :-- | :--: | :--: | :--: 435 | [Modern Robotics (Specialization)](https://www.coursera.org/specializations/modernrobotics) | 26 weeks | 2-5 hours/week | freshman-level physics, linear algebra, calculus, [linear ordinary differential equations](https://www.khanacademy.org/math/differential-equations) 436 | [Data Mining (Specialization)](https://www.coursera.org/specializations/data-mining) | 30 weeks | 2-5 hours/week | machine learning 437 | [Big Data (Specialization)](https://www.coursera.org/specializations/big-data) | 30 weeks | 3-5 hours/week | none 438 | [Internet of Things (Specialization)](https://www.coursera.org/specializations/internet-of-things) | 30 weeks | 1-5 hours/week | strong programming 439 | [Cloud Computing (Specialization)](https://www.coursera.org/specializations/cloud-computing) | 30 weeks | 2-6 hours/week | C++ programming 440 | [Fullstack Open](https://fullstackopen.com/en) | 12 weeks | 6 hours/week | programming 441 | [Data Science (Specialization)](https://www.coursera.org/specializations/jhu-data-science) | 43 weeks | 1-6 hours/week | none 442 | [Functional Programming in Scala (Specialization)](https://www.coursera.org/specializations/scala) | 29 weeks | 4-5 hours/week | One year programming experience 443 | [Game Design and Development (Specialization)](https://www.coursera.org/specializations/game-development) | 6 months | 5 hours/week | programming, interactive design 444 | 445 | [BACK to TOP -->](#curriculum) 446 | 447 | ## Final project 448 | 449 | OSS University is **project-focused**. 450 | 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. 451 | 452 | 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. 453 | Not only does real project work look great on a resume, but the project will also *validate* and *consolidate* your knowledge. 454 | You can create something entirely new, or you can find an existing project that needs help via websites like 455 | [CodeTriage](https://www.codetriage.com/) 456 | or 457 | [First Timers Only](http://www.firsttimersonly.com/). 458 | 459 | Another option is using the Capstone project from taking one of the Specializations in [Advanced applications](#advanced-applications); 460 | 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. 461 | In some cases, it may not be permitted; 462 | do **not** violate your course's Honor Code! 463 | 464 | Put the OpenCS badge in the README of your repository! 465 | [![Open Source Society University - Computer Science](https://img.shields.io/badge/OpenCS-computer--science-blue.svg)](https://github.com/Charmve/OpenCS-Courses) 466 | 467 | - Markdown: `[![Open Source Society University - Computer Science](https://img.shields.io/badge/OpenCS-computer--science-blue.svg)](https://github.com/Charmve/OpenCS-Courses)` 468 | - HTML: `Open Source Society University - Computer Science` 469 | 470 | ### Evaluation 471 | 472 | Upon completing your final project, submit your project's information to [PROJECTS](PROJECTS.md) 473 | via a pull request and use our [community](#community) channels to announce it to your fellow students. 474 | 475 | Your peers and mentors from OpenCS will then informally evaluate your project. 476 | You will not be "graded" in the traditional sense — everyone has their own measurements for what they consider a success. 477 | The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist 478 | and to get experience listening to feedback — both positive and negative — and taking it in stride. 479 | 480 | The final project evaluation has a second purpose: to evaluate whether OpenCS, 481 | through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education. 482 | 483 | ### Cooperative Work 484 | 485 | You can create this project alone or with other students! 486 | **We love cooperative work**! 487 | Use our [channels](#community) to communicate with other fellows to combine and create new projects! 488 | 489 | ### Which programming languages should I use? 490 | 491 | My friend, here is the best part of liberty! 492 | You can use **any** language that you want to complete the final project. 493 | 494 | The important thing is to **internalize** the core concepts and to be able to use them with whatever tool (programming language) that you wish. 495 | 496 | [BACK to TOP -->](#curriculum) 497 | 498 | ## Congratulations 499 | 500 | After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science. Congratulations! 501 | 502 | What is next for you? The possibilities are boundless and overlapping: 503 | 504 | - Look for a job as a developer! 505 | - Check out the [readings](extras/readings.md) for classic books you can read that will sharpen your skills and expand your knowledge. 506 | - Join a local developer meetup (e.g. via [meetup.com](https://www.meetup.com/)). 507 | - Pay attention to emerging technologies in the world of software development: 508 | + 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! 509 | + Explore **borrowing and lifetimes** through [Rust](https://www.rust-lang.org/), a systems language which achieves memory- and thread-safety without a garbage collector! 510 | + Explore **dependent type systems** through [Idris](https://www.idris-lang.org/), a new Haskell-inspired language with unprecedented support for type-driven development. 511 | 512 | [BACK to TOP -->](#curriculum) 513 |
514 | 515 | ![keep learning](http://i.imgur.com/REQK0VU.jpg) 516 | 517 | # Code of Conduct 518 | [OpenCS's code of conduct](./Code-of-Conduct.md). 519 | 520 | ## How to show your progress 521 | 522 | 1. Create an account in [Trello](https://trello.com/). 523 | 1. Copy [this](https://trello.com/b/IScNSzsI/ossu-compsci) board to your personal account. 524 | See how to copy a board [here](https://help.trello.com/article/802-copying-cards-lists-or-boards). 525 | 526 | 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. 527 | 528 | We also have **labels** to help you have more control through the process. 529 | The meaning of each of these labels is: 530 | 531 | - `Main Curriculum`: cards with that label represent courses that are listed in our curriculum. 532 | - `Extra Resources`: cards with that label represent courses that were added by the student. 533 | - `Doing`: cards with that label represent courses the student is current doing. 534 | - `Done`: cards with that label represent courses finished by the student. 535 | Those cards should also have the link for at least one project/article built with the knowledge acquired in such course. 536 | - `Section`: cards with that label represent the section that we have in our curriculum. 537 | Those cards with the `Section` label are only to help the organization of the Done column. 538 | You should put the *Course's cards* below its respective *Section's card*. 539 | 540 | 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. 541 | You can change the status of your board to be *public* or *private*. 542 | 543 | [BACK to TOP -->](#opencs-courses) 544 | 545 | # Team 546 | 547 | * **[Eric Douglas](https://github.com/ericdouglas)**: founder of [OSSU](https://github.com/ossu) 548 | * **[hanjiexi](https://github.com/hanjiexi)**: lead technical maintainer 549 | * **[waciumawanjohi](https://github.com/waciumawanjohi)**: lead academic maintainer 550 | * **[Contributors](https://github.com/ossu/computer-science/graphs/contributors)** 551 | 552 | [BACK to TOP -->](#opencs-courses) 553 | 554 | # License 555 | 556 | 知识共享许可协议 557 | 558 | 559 | ## :rocket: 知识星球 560 | 561 | 专为求职面试中算法与数据结构的小伙伴,创了学习交流/刷题群(知识星球)!想要最快的提升算法与数据结构技能,和更多小伙伴一起来吧! 562 | 563 |
564 | 565 | Click to see the more details 566 |
567 | 568 | Click to see the more details 569 | 570 |
571 | -------------------------------------------------------------------------------- /ReadmeChinese.md: -------------------------------------------------------------------------------- 1 | # OpenCS-Course 2 | Charmve | English | Chinese 3 | 4 |
5 | 6 |
7 | 8 |

OpenCS: Top University Open CS Courses

9 |

10 | Path to a free self-taught education in Computer Science! 11 |

12 |

13 | 14 | Awesome 15 | 16 | 17 | Open Source Society University - Computer Science 18 | 19 |

20 | 21 | # Contents 22 | 23 | - [概述](#概述) 24 | - [社区](#社区) 25 | - [课程](#课程) 26 | - [社群行为准则](#社群行为准则) 27 | - [团队介绍](#团队介绍) 28 | 29 | # 概述 30 | 31 | https://github.com/ossu/computer-science-cn 32 | 33 | Coming soon ... 34 | -------------------------------------------------------------------------------- /extras/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Charmve/OpenCS-Courses/0746c926332160313404b562383642b6932b63f0/extras/Logo.png -------------------------------------------------------------------------------- /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 with Java](https://java-programming.mooc.fi/)| 14 weeks | 10 hours/week 21 | [Introduction to Programming with MATLAB](https://www.coursera.org/learn/matlab)| - | - 22 | [Introduction to Functional Programming](https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0)| 7 weeks | 4-6 hours/week 23 | [The Structure and Interpretation of Computer Programs](http://cs61a.org/) | - | - 24 | [Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/) | 14 weeks | 4 hours/week 25 | 26 | ## Math 27 | 28 | Courses | Duration | Effort 29 | :-- | :--: | :--: 30 | [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x-0) | 4 weeks | 2 hours/week 31 | [Introduction to Mathematical Thinking](https://www.coursera.org/learn/mathematical-thinking) | 10 weeks | 10 hours/week 32 | [High School Math](https://www.khanacademy.org/math/high-school-math) | - | - 33 | [Precalculus](https://www.futurelearn.com/courses/precalculus) | 5 weeks | 6 hours/week 34 | [Advanced Precalculus](https://www.futurelearn.com/courses/advanced-precalculus) | 4 weeks | 5 hours/week 35 | [Introduction to Probability and Data](https://www.coursera.org/learn/probability-intro)| - | - 36 | [Linear Algebra (Strang)](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/index.htm) | - | - 37 | [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/index.htm) | 13 weeks | 12 hours/week 38 | [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](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/index.htm) 39 | 40 | ## Systems 41 | 42 | Courses | Duration | Effort 43 | :-- | :--: | :--: 44 | [Cloud Computing / Distributed Programming](https://www.coursera.org/learn/cloud-computing) | 5 weeks | 5-10 hours/week 45 | [Introduction to Parallel Programming](https://classroom.udacity.com/courses/cs344) ([alt](https://www.youtube.com/playlist?list=PLGvfHSgImk4aweyWlhBXNF6XISY3um82_)) ([HW](https://colab.research.google.com/github/depctg/udacity-cs344-colab))| 12 weeks | 8-10 hours/week 46 | [Intro to Computer Systems](http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-f15/www/) ([Labs](http://csapp.cs.cmu.edu/3e/labs.html)) | 15 weeks | 12 hours/week 47 | [Great Ideas in Computer Architecture (Machine Structures)](https://inst.eecs.berkeley.edu/~cs61c/fa14/) ([Lectures](https://archive.org/details/ucberkeley_webcast_itunesu_915550404)) | 15 weeks | 12 hours/week 48 | [Computer Architecture](https://www.coursera.org/learn/comparch) | - | 5-8 hours/week 49 | [Operating System Engineering](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-828-operating-system-engineering-fall-2012/) | - | - 50 | [Introduction to Operating Systems](https://www.udacity.com/course/introduction-to-operating-systems--ud923)| 8 weeks | 5-8 hours/week 51 | [Advanced Operating Systems](https://www.udacity.com/course/advanced-operating-systems--ud189)| 5 weeks | 5-8 hours/week 52 | [Computer Networking](https://www.udacity.com/course/computer-networking--ud436) | 12 weeks | 5-8 hours/week 53 | 54 | ## Theory 55 | 56 | Courses | Duration | Effort 57 | :-- | :--: | :--: 58 | [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) | 6 weeks | 6-12 hours/week 59 | [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) | 6 weeks | 6-12 hours/week 60 | [Analysis of Algorithms (Sedgewick)](https://www.coursera.org/learn/analysis-of-algorithms) | 6 weeks | 6-8 hours/week 61 | [Analysis of Algorithms (Skiena)](http://www3.cs.stonybrook.edu/~skiena/373/) | 15 weeks | 6-8 hours/week 62 | [Programming Challenges (Skiena)](http://www3.cs.stonybrook.edu/~skiena/392/) | 14 weeks | 6-8 hours/week 63 | [Data Structures and Algorithms (Specialization)](https://www.coursera.org/specializations/data-structures-algorithms) | 25 weeks | 3-10 hours/week 64 | [Algorithmic Thinking (Part 1)](https://www.coursera.org/learn/algorithmic-thinking-1/) | - | - 65 | [Algorithmic Thinking (Part 2)](https://www.coursera.org/learn/algorithmic-thinking-2/) | - | - 66 | [Statistical Mechanics: Algorithms and Computations](https://www.coursera.org/learn/statistical-mechanics/) | - | - 67 | [Approximation Algorithms Part I](https://www.coursera.org/learn/approximation-algorithms-part-1/) | - | - 68 | [Approximation Algorithms Part II](https://www.coursera.org/learn/approximation-algorithms-part-2/) | - | - 69 | 70 | ## Applications 71 | 72 | Courses | Duration | Effort 73 | :-- | :--: | :--: 74 | [Using Databases with Python](https://www.coursera.org/learn/python-databases) | 5 weeks | 2-3 hours/week 75 | [Database Systems](https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22ed2ee867-9610-4bad-94af-5d12c2ea47cd%22) | - | 27 hours 76 | [Database Management Essentials](https://www.coursera.org/learn/database-management) | 7 weeks | 4-6 hours/week 77 | [Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271)| 16 weeks | 6-10 hours/week 78 | [Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120)| 10 weeks | 6-10 hours/week 79 | [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 80 | [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 81 | [Big Data Science with the BD2K-LINCS Data Coordination and Integration Center](https://www.coursera.org/course/bd2klincs)| 7 weeks | 4-5 hours/week 82 | 83 | ## Tools 84 | 85 | Courses | Duration | Effort 86 | :-- | :--: | :--: 87 | [How to Use Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775) | 3 weeks | 2-3 hours/week 88 | [Kubernetes Certified Application Developer](https://www.udemy.com/course/certified-kubernetes-application-developer/) | 5 weeks | 2 hours/week 89 | 90 | 91 | # Online Learning - Great Courses 92 | 93 | Courses | Duration | Effort 94 | :-- | :--: | :--: 95 | [Learning How to Learn](https://www.coursera.org/learn/learning-how-to-learn) | 4 weeks | 2 hours/week 96 | [Mindshift](https://www.coursera.org/learn/mindshift) | 4 weeks | 2 hours/week 97 | -------------------------------------------------------------------------------- /extras/other_curricula.md: -------------------------------------------------------------------------------- 1 | # Other curricula 2 | 3 | OSSU is one of a few efforts to inform learners how they can pursue computer science independently. Below are a few other such efforts. 4 | 5 | - [Google - Guide for Technical Development](https://www.google.com/about/careers/students/guide-to-technical-development.html) 6 | - [Teach Yourself Computer Science](https://teachyourselfcs.com/) 7 | - [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/) 8 | - [P1xt](https://github.com/P1xt/p1xt-guides) 9 | 10 | What differentiates OSSU? OSSU is dedicated to how an individual can learn the undergraduate CS curriculum. This is why we use the [CS2013](../CURRICULAR_GUIDELINES.md) as our curricular guidelines. These guidelines are written by the two foremost professional organizations in computing. 11 | 12 | This approach has the benefit of clarifying to others the extent of a student's study and understanding. Students have gone from OSSU study into both tech industry employment and into Computer Science graduate school. We look forward to helping you do the same. 13 | -------------------------------------------------------------------------------- /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 | [Competitive Programming](https://cpbook.net/) | Steven Halim, Felix Halim 27 | 28 | ## Math 29 | 30 | Name | Author(s) 31 | :-- | :--: 32 | [Calculus Made Easy](http://www.gutenberg.org/ebooks/33283) | Silvanus P. Thompson 33 | [Ximera](https://ximera.osu.edu/): Interactive Calculus Textbooks | [Ximera team](https://ximera.osu.edu/about/team) 34 | [Discrete Mathematics with Applications (4th Edition)](http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/) | Susanna S. Epp 35 | [Discrete Mathematics: An Open Introduction](http://discrete.openmathbooks.org/dmoi/) | Oscar Levin 36 | [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads2/) | Alan Doerr, Ken Levasseur 37 | [Grinstead and Snell’s Introduction to Probability](https://math.dartmouth.edu/~prob/prob/prob.pdf) |Charles M. Grinstead, J. Laurie Snell 38 | [Introduction to Linear Algebra](https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0980232775/) | Gilbert Strang 39 | 40 | ## Systems 41 | 42 | Name | Author(s) 43 | :-- | :--: 44 | [But How Do It Know?](http://www.buthowdoitknow.com/) | J. Clark Scott 45 | [Computer Systems: A Programmer's Perspective (3rd Edition)](http://csapp.cs.cmu.edu/) | Randal E. Bryant, David R. O'Hallaron 46 | [Modern Operating Systems (4th Edition)](http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/) | Andrew S. Tanenbaum, Herbert Bos 47 | [Computer Organization and Design: The Hardware/Software Interface](https://www.amazon.com/gp/product/0124077269) | David Patternson, John Hennessy 48 | [Computer Networks (5th Edition)](http://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958/) | Andrew S. Tanenbaum, David J. Wetherall 49 | [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 50 | [Distributed Systems: Principles and Paradigms](https://www.amazon.com/Distributed-Systems-Principles-Andrew-Tanenbaum/dp/153028175X) | Andrew Tanenbaum 51 | [Distributed Systems Reading Group](http://dsrg.pdos.csail.mit.edu/papers/) | Various 52 | [System Design: Design large-scale systems](https://github.com/donnemartin/system-design-primer) | Various 53 | 54 | ## Theory 55 | 56 | Name | Author(s) 57 | :-- | :--: 58 | [Introduction to Computing: Explorations in Language, Logic, and Machines](http://www.computingbook.org/) | David Evans 59 | [Introduction to the Theory of Computation](https://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X) | Michael Sipser 60 | [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 61 | [The Algorithm Design Manual](https://www.amazon.com/gp/product/1848000693) | Steven Skiena 62 | [Category Theory: A Gentle Introduction](http://www.logicmatters.net/resources/pdfs/GentleIntro.pdf) | Peter Smith 63 | [Category Theory for Programmers: The Preface](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) | Bartosz Milewski 64 | [An Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf) | Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze 65 | 66 | ## Applications 67 | 68 | Name | Author(s) 69 | :-- | :--: 70 | [Architecture of a Database System](http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf) | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton 71 | [Readings in Database Systems](http://www.redbook.io/) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors 72 | [Database Management Systems](https://www.amazon.com/gp/product/0072465638) | Raghu Ramakrishnan, Johannes Gehrke 73 | [Transaction Processing: Concepts and Techniques](https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902) | Jim Gray, Andreas Reuter 74 | [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 75 | [The Architecture of Open Source Applications](http://aosabook.org/en/) | Michael DiBernardo (editor) 76 | [An Introduction to Statistical Learning](https://www-bcf.usc.edu/~gareth/ISL/) | Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani 77 | [Deep Learning](http://www.deeplearningbook.org/) | Ian Goodfellow, Yoshua Bengio and Aaron Courville 78 | [Bayesian Reasoning and Machine Learning](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage) | David Barber 79 | [Language Implementation Patterns](https://www.amazon.com/gp/product/193435645X) | Terence Parr 80 | [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 81 | [Compiler Construction](https://inf.ethz.ch/personal/wirth/CompilerConstruction/index.html) | Niklaus Wirth 82 | [The Mythical Man-Month](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/) | Fred Brooks, Jr. 83 | [Physically Based Rendering: From Theory To Implementation](http://www.pbr-book.org/) | Matt Pharr, Wenzel Jakob, and Greg Humphreys 84 | --------------------------------------------------------------------------------