https://github.com/ossu/computer-science Skip to content Sign up * Why GitHub? Features - + Mobile - + Actions - + Codespaces - + Packages - + Security - + Code review - + Issues - + Integrations - + GitHub Sponsors - + Customer stories- * Team * Enterprise * Explore + Explore GitHub - Learn and contribute + Topics - + Collections - + Trending - + Learning Lab - + Open source guides - Connect with others + The ReadME Project - + Events - + Community forum - + GitHub Education - + GitHub Stars program - * Marketplace * Pricing Plans - + Compare plans - + Contact Sales - + Education - [ ] [search-key] * # In this repository All GitHub | Jump to | * No suggested jump to results * # In this repository All GitHub | Jump to | * # In this organization All GitHub | Jump to | * # In this repository All GitHub | Jump to | Sign in Sign up {{ message }} ossu / computer-science * Notifications * Star 91.1k * Fork 12.5k Path to a free self-taught education in Computer Science! MIT License 91.1k stars 12.5k forks Star Notifications * Code * Issues 16 * Pull requests 3 * Actions * Projects 0 * Wiki * Security * Insights More * Code * Issues * Pull requests * Actions * Projects * Wiki * Security * Insights master Switch branches/tags [ ] Branches Tags Could not load branches Nothing to show {{ refName }} default View all branches Could not load tags Nothing to show {{ refName }} default View all tags 2 branches 5 tags Code Clone HTTPS GitHub CLI [https://github.com/o] Use Git or checkout with SVN using the web URL. [gh repo clone ossu/c] Work fast with our official CLI. Learn more. * Open with GitHub Desktop * Download ZIP Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Go back Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Go back Launching Xcode If nothing happens, download Xcode and try again. Go back Launching Visual Studio Code Your codespace will open once ready. There was a problem preparing your codespace, please try again. Latest commit @waciumawanjohi waciumawanjohi Remove course that is no longer offered ... 36b4f15 Jun 26, 2021 Remove course that is no longer offered Resolves #907 36b4f15 Git stats * 877 commits Files Permalink Failed to load latest commit information. Type Name Latest commit message Commit time .github/ISSUE_TEMPLATE Update issue templates Feb 17, 2021 extras Remove course that is no longer offered Jun 26, 2021 .gitignore Update .gitignore Aug 16, 2020 CHANGELOG.md Make note more prominent May 8, 2020 CONTRIBUTING.md Update link to curricular guidelines May 18, 2020 CURRICULAR_GUIDELINES.md Clarify that CS2013 is the curricular guidance for OSSU May 3, 2020 FAQ.md Move CS50 to Courses/Extras Jan 3, 2021 HELP.md Use Discord Widget Sep 16, 2020 LICENSE Update License file copyright year Jan 29, 2020 PROJECTS.md Updated PROJECTS.md Jun 10, 2020 README.md Spreadsheet link prompts users to make a personal copy Jun 16, 2021 View code Open Source Society University Contents Summary Community Curriculum Prerequisites Intro CS Introduction to Programming Introduction to Computer Science Core CS Core programming Math Electives Calculus Linear Algebra Logic Probability Core Math CS Tools Core systems Core theory Core Security Core applications Advanced CS Advanced programming Advanced systems Advanced theory Advanced applications Final project Evaluation Cooperative work Which programming languages should I use? Congratulations Code of conduct How to show your progress Team README.md Open Source Society University (OSSU) Open Source Society University Path to a free self-taught education in Computer Science! Awesome Open Source Society University - Computer Science Contents * Summary * Community * Curriculum * Code of conduct * Team Summary The OSSU curriculum is a complete education in computer science using online materials. It's not merely for career training or professional development. It's for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines, and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, but with support from a worldwide community of fellow learners. It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, as it is assumed most of the people following this curriculum are already educated outside the field of CS. The courses themselves are among the very best in the world, often coming from Harvard, Princeton, MIT, etc., but specifically chosen to meet the following criteria. Courses must: * Be open for enrollment * Run regularly (ideally in self-paced format, otherwise running multiple times per year) * Be of generally high quality in teaching materials and pedagogical principles * Match the curricular standards of the CS 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science When no course meets the above criteria, the coursework is supplemented with a book. When there are courses or books that don't fit into the curriculum but are otherwise of high quality, they belong in extras/courses or extras/readings. Organization. The curriculum is designed as follows: * Intro CS: for students to try out CS and see if it's right for them * Core CS: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take * Advanced CS: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student's interests * Final Project: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide Duration. It is possible to finish within about 2 years if you plan carefully and devote roughly 20 hours/week to your studies. Learners can use this spread to estimate their end date. Make a copy and input your start date and expected hours per week in the Timeline sheet. As you work through courses you can enter your actual course completion dates in the Curriculum Data sheet and get updated completion estimates. Cost. All or nearly all course material is available for free. However, some courses may charge money for assignments/tests/projects to be graded. Note that both Coursera and edX offer financial aid. Decide how much or how little to spend based on your own time and budget; just remember that you can't purchase success! Process. Students can work through the curriculum alone or in groups, in order or out of order. * We recommend doing all courses in Core CS, only skipping a course when you are certain that you've already learned the material previously. * For simplicity, we recommend working through courses (especially Core CS) in order from top to bottom, as they have already been topologically sorted by their prerequisites. * 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. Content policy. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. Do NOT disrespect the code of conduct that you signed in the beginning of each course! How to contribute Getting help (Details about our FAQ and chatroom) Community * We have a discord server! Discord This should be your first stop to talk with other OSSU students. Why don't you introduce yourself right now? Join the OSSU Discord * You can also interact through GitHub 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. * Subscribe to our newsletter. * Add Open Source Society University to your Linkedin profile! * Note: There is an unmaintained and deprecated firebase app that you might find when searching OSSU. You can safely ignore it. Read more in the FAQ. Curriculum Curriculum version: 8.0.0 (see CHANGELOG) * Prerequisites * Intro CS + Introduction to Programming + Introduction to Computer Science * Core CS + Core programming + Core math + CS Tools + Core systems + Core theory + Core applications + Core security * Advanced CS + Advanced programming + Advanced systems + Advanced theory + Advanced applications * Final project --------------------------------------------------------------------- Prerequisites * Core CS assumes the student has already taken high school math, including algebra, geometry, and pre-calculus. * Advanced CS assumes the student has already taken the entirety of Core CS and is knowledgeable enough now to decide which electives to take. * Note that Advanced systems assumes the student has taken a basic physics course (e.g. AP Physics in high school). Intro CS Introduction to Programming 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. Topics covered: simple programs simple data structures Courses Duration Effort Prerequisites Discussion Python for Everybody 10 weeks 10 hours/week none chat Introduction to Computer Science 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! Topics covered: computation imperative programming basic data structures and algorithms and more Courses Duration Effort Prerequisites Discussion Introduction to Computer 15 high school Science and Programming 9 weeks hours/ algebra chat using Python (alt) week Core CS All coursework under Core CS is required, unless otherwise indicated. Core programming Topics covered: functional programming design for testing program requirements common design patterns unit testing object-oriented design static typing dynamic typing ML-family languages (via Standard ML) Lisp-family languages (via Racket) Ruby and more The How to Code courses are based on the textbook How to Design Programs. The First Edition is available for free online and includes problem sets and solutions. Students are encouraged to do these assignments. Courses Duration Effort Prerequisites Discussion How to Code - 8-10 Simple Data 7 weeks hours/ none chat week How to Code - 8-10 How to Code: Simple Complex Data 6 weeks hours/ Data chat week Programming 5 weeks 4-8 hours How to Code (Hear chat Languages, Part A /week instructor) Programming 3 weeks 4-8 hours Programming chat Languages, Part B /week Languages, Part A Programming 3 weeks 4-8 hours Programming chat Languages, Part C /week Languages, Part B Math Electives Students must choose one of the following topics: calculus, linear algebra, logic, or probability. Calculus Courses Duration Effort Prerequisites Discussion Calculus 1A: 6-10 high school Differentiation 13 weeks hours/ math chat week 5-10 Calculus 1B: Integration 13 weeks hours/ Calculus 1A chat week Calculus 1C: Coordinate 5-10 Systems & Infinite Series 6 weeks hours/ Calculus 1B chat week Linear Algebra Courses Duration Effort Prerequisites Discussion Essence of Linear - - high school math chat Algebra Linear Algebra 14 weeks 12 hours/ Essence of Linear chat week Algebra Logic Courses Duration Effort Prerequisites Discussion Introduction to 10 weeks 4-8 hours/week set theory chat Logic Probability Courses Duration Effort Prerequisites Discussion Probability 24 weeks 12 hours/ Differentiation and chat week Integration Core Math In addition to their math elective, students must complete the following course on discrete mathematics. Topics covered: discrete mathematics mathematical proofs basic statistics O-notation discrete probability and more Courses Duration Effort Notes Prerequisites Discussion An alternate version with solutions to the problem sets is here. Students struggling can Mathematics consider the for 5 Discrete Computer 13 weeks hours/ Mathematics Calculus 1C chat Science ( week Specialization alt) first. It is more interactive but less comprehensive, and costs money to unlock full interactivity. CS Tools 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. Topics covered: terminals and shell scripting vim command line environments version control and more Courses Duration Effort Prerequisites Discussion The Missing Semester of 2 weeks 12 hours - chat Your CS Education /week Core systems Topics covered: procedural programming manual memory management boolean algebra gate logic memory computer architecture assembly machine language virtual machines high-level languages compilers operating systems network protocols and more Additional Courses Duration Effort Text / Prerequisites Discussion Assignments Build a Modern Computer from 7-13 C-like First 6 weeks hours/ - programming chat Principles: week language From Nand to Tetris (alt) Build a Modern one of these Computer from 12-18 programming First 6 weeks hours/ - languages, chat Principles: week From Nand to Nand to Tetris Tetris Part I Part II Operating 6-10 algorithms, Systems: Three 10-12 hours/ - familiarity chat Easy Pieces weeks week with C is useful Assignment 1 Assignment Introduction to 4-12 2 algebra, Computer 8 weeks hours/ Assignment probability, chat Networking week 3 basic CS Assignment 4 Interactive Problems Core theory Topics covered: divide and conquer sorting and searching randomized algorithms graph search shortest paths data structures greedy algorithms minimum spanning trees dynamic programming NP-completeness and more Courses Duration Effort Prerequisites Discussion Divide and Conquer, 4-8 any programming Sorting and 4 weeks hours/ language, chat Searching, and week Mathematics for Randomized Algorithms Computer Science Divide and Conquer, Graph Search, 4-8 Sorting and Shortest Paths, and 4 weeks hours/ Searching, and chat Data Structures week Randomized Algorithms Greedy Algorithms, 4-8 Graph Search, Minimum Spanning 4 weeks hours/ Shortest Paths, and chat Trees, and Dynamic week Data Structures Programming Shortest Paths Greedy Algorithms, Revisited, 4-8 Minimum Spanning NP-Complete Problems 4 weeks hours/ Trees, and Dynamic chat and What To Do About week Programming Them Core Security Topics covered Confidentiality, Integrity, Availability Secure Design Defensive Programming Threats and Attacks Network Security Cryptography and more Note: These courses are provisionally recommended. There is an open Request For Comment on security course selection. Contributors are encouraged to compare the various courses in the RFC and offer feedback. Courses Duration Effort Prerequisites Discussion Information Security: 5 weeks 3 hours - chat Context and Introduction /week Principles of Secure Coding 4 weeks 4 hours - chat /week Identifying Security 4 weeks 4 hours - chat Vulnerabilities /week Choose one of the following: Courses Duration Effort Prerequisites Discussion Identifying Security 5 Vulnerabilities in C/ 4 weeks hours/ - chat C++Programming week Exploiting and Securing 5 Vulnerabilities in Java 4 weeks hours/ - chat Applications week Core applications Topics covered: Agile methodology REST software specifications refactoring relational databases transaction processing data modeling neural networks supervised learning unsupervised learning OpenGL raytracing and more Courses Duration Effort Prerequisites Discussion Databases: Modeling 10 and Theory 2 weeks hours/ core programming chat week Databases: 10 Relational Databases 2 weeks hours/ core programming chat and SQL week Databases: 10 Semistructured Data 2 weeks hours/ core programming chat week 4-6 Machine Learning 11 weeks hours/ linear algebra chat week 12 C++ or Java, linear Computer Graphics 6 weeks hours/ algebra chat week Software 8-10 Core Programming, Engineering: 6 weeks hours/ and a sizable chat Introduction week project Software Development 6-7 8-10 Software Capstone Project weeks hours/ Engineering: chat week Introduction Advanced CS After completing every required course in Core CS, students should choose a subset of courses from Advanced CS based on interest. Not every course from a subcategory needs to be taken. But students should take every course that is relevant to the field they intend to go into. The Advanced CS study should then end with one of the Specializations under Advanced applications. A Specialization's Capstone, if taken, may act as the Final project, if permitted by the Honor Code of the course. 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. Advanced programming Topics covered: debugging theory and practice goal-oriented programming parallel computing object-oriented analysis and design UML large-scale software architecture and design and more Courses Duration Effort Prerequisites Parallel Programming 4 weeks 6-8 hours/ Scala programming week Compilers 9 weeks 6-8 hours/ none week Introduction to 14 weeks - - Haskell Learn Prolog Now! (alt 12 weeks - - )* Software Debugging 8 weeks 6 hours/ Python, object-oriented week programming Software Testing 4 weeks 6 hours/ Python, programming week experience Software Architecture 8 weeks 6 hours/ software engineering in & Design week Java (*) book by Blackburn, Bos, Striegnitz (compiled from source, redistributed under CC license) Advanced systems Topics covered: digital signaling combinational logic CMOS technologies sequential logic finite state machines processor instruction sets caches pipelining virtualization parallel processing virtual memory synchronization primitives system call interface and more Courses Duration Effort Prerequisites Computation Structures 1: Digital 10 weeks 6 hours/ Nand2Tetris II Circuits week Computation Structures 2: 10 weeks 6 hours/ Computation Computer Architecture week Structures 1 Computation Structures 3: 10 weeks 6 hours/ Computation Computer Organization week Structures 2 Advanced theory Topics covered: formal languages Turing machines computability event-driven concurrency automata distributed shared memory consensus algorithms state machine replication computational geometry theory propositional logic relational logic Herbrand logic game trees and more Courses Duration Effort Prerequisites Theory of Computation 8 weeks 10 hours discrete mathematics, logic, (Lectures) /week algorithms Computational 16 weeks 8 hours/ algorithms, C++ Geometry week Game Theory 8 weeks 3 hours/ mathematical thinking, week probability, calculus Advanced applications These Coursera Specializations all end with a Capstone project. Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum. Note that doing a Specialization with the Capstone at the end always costs money. 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. Courses Duration Effort Prerequisites Modern Robotics 2-5 freshman-level physics, linear (Specialization) 26 weeks hours/ algebra, calculus, linear week ordinary differential equations Data Mining 2-5 (Specialization) 30 weeks hours/ machine learning week Big Data 3-5 (Specialization) 30 weeks hours/ none week Internet of Things 1-5 (Specialization) 30 weeks hours/ strong programming week Cloud Computing 2-6 (Specialization) 30 weeks hours/ C++ programming week 6 Fullstack Open 12 weeks hours/ programming week Data Science 1-6 (Specialization) 43 weeks hours/ none week Functional 4-5 Programming in Scala 29 weeks hours/ One year programming experience (Specialization) week Game Design and 5 Development with 6 months hours/ programming, interactive design Unity 2020 week (Specialization) Final project OSS University is project-focused. 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. 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. Not only does real project work look great on a resume, but the project will also validate and consolidate your knowledge. You can create something entirely new, or you can find an existing project that needs help via websites like CodeTriage or First Timers Only. Another option is using the Capstone project from taking one of the Specializations in Advanced applications; 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. In some cases, it may not be permitted; do not violate your course's Honor Code! Put the OSSU-CS badge in the README of your repository! Open Source Society University - Computer Science * Markdown: [![Open Source Society University - Computer Science] (https://img.shields.io/badge/OSSU-computer--science-blue.svg)] (https://github.com/ossu/computer-science) * HTML: Open Source Society University - Computer Science Evaluation Upon completing your final project, submit your project's information to PROJECTS via a pull request and use our community channels to announce it to your fellow students. Your peers and mentors from OSSU will then informally evaluate your project. You will not be "graded" in the traditional sense -- everyone has their own measurements for what they consider a success. The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist and to get experience listening to feedback -- both positive and negative -- and taking it in stride. The final project evaluation has a second purpose: to evaluate whether OSSU, through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education. Cooperative work You can create this project alone or with other students! We love cooperative work! Use our channels to communicate with other fellows to combine and create new projects! Which programming languages should I use? My friend, here is the best part of liberty! You can use any language that you want to complete the final project. The important thing is to internalize the core concepts and to be able to use them with whatever tool (programming language) that you wish. Congratulations After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science. Congratulations! What is next for you? The possibilities are boundless and overlapping: * Look for a job as a developer! * Check out the readings for classic books you can read that will sharpen your skills and expand your knowledge. * Join a local developer meetup (e.g. via meetup.com). * Pay attention to emerging technologies in the world of software development: + Explore the actor model through Elixir, a new functional programming language for the web based on the battle-tested Erlang Virtual Machine! + Explore borrowing and lifetimes through Rust, a systems language which achieves memory- and thread-safety without a garbage collector! + Explore dependent type systems through Idris, a new Haskell-inspired language with unprecedented support for type-driven development. keep learning Code of conduct OSSU's code of conduct. How to show your progress 1. Create an account in Trello. 2. Copy this board to your personal account. See how to copy a board here. Now that you have a copy of our official board, you just need to pass the cards to the Doing column or Done column as you progress in your study. We also have labels to help you have more control through the process. The meaning of each of these labels is: * Main Curriculum: cards with that label represent courses that are listed in our curriculum. * Extra Resources: cards with that label represent courses that were added by the student. * Doing: cards with that label represent courses the student is current doing. * Done: cards with that label represent courses finished by the student. Those cards should also have the link for at least one project/article built with the knowledge acquired in such course. * Section: cards with that label represent the section that we have in our curriculum. Those cards with the Section label are only to help the organization of the Done column. You should put the Course's cards below its respective Section's card. The intention of this board is to provide our students a way to track their progress, and also the ability to show their progress through a public page for friends, family, employers, etc. You can change the status of your board to be public or private. Team * Eric Douglas: founder of OSSU * hanjiexi: lead technical maintainer * waciumawanjohi: lead academic maintainer * Contributors About Path to a free self-taught education in Computer Science! Topics computer-science curriculum courses awesome-list Resources Readme License MIT License Releases 5 tags Packages 0 No packages published Contributors 110 * @ericdouglas * @hanjiexi * @waciumawanjohi * @mkghosh * @spamegg1 * @aaronhooper * @Alaharon123 * @Peillach * @afilatov1989 * @jimages * @leungleoqin + 99 contributors * (c) 2021 GitHub, Inc. * Terms * Privacy * Security * Status * Docs * Contact GitHub * Pricing * API * Training * Blog * About You can't perform that action at this time. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.