OSSU

What is OSSU?

OSSU stands for open source society university. They, among other things, publish a curriculum for people to follow so that they can learn computer science, for free.

Which courses?

OSSU does a pretty good job at guiding student by separating the courses in intro CS, core CS and advanced CS. At the end, students chose to do a final project to showcase their newly learnt abilities.

My progress

Intro CS

This course will introduce you to the world of computer science and programming. This course gives you 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

CoursesDurationPrerequisitesCompleted?
Introduction to Computer Science and Programming using Python14 weekshigh school algebrayes!

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

CoursesDurationPrerequisitesCompleted?
Systematic Program Design13 weeksnoneyes!
Class-based Program Design13 weeksSystematic Program Design, High School Mathenrolled
Programming Languages, Part A5 weeksSystematic Program Design (Hear instructor)enrolled
Programming Languages, Part B3 weeksProgramming Languages, Part A
Programming Languages, Part C3 weeksProgramming Languages, Part B
Object-Oriented Design13 weeksClass Based Program Design
Software Architecture4 weeksObject Oriented Design

Core math

Discrete math (Math for CS) is a prerequisite and closely related to the study of algorithms and data structures. Calculus both prepares students for discrete math and helps students develop mathematical maturity.

Topics covered: discrete mathematics mathematical proofs basic statistics O-notation discrete probability and more

CoursesDurationNotesPrerequisitesCompleted?
Calculus 1A: Differentiation (alternative)13 weeksThe alternate covers this and the following 2 courseshigh school math
Calculus 1B: Integration13 weeks-Calculus 1A
Calculus 1C: Coordinate Systems & Infinite Series6 weeks-Calculus 1B
Mathematics for Computer Science (alternative)13 weeks2015/2019 solutions 2010 solutions 2005 solutions.Calculus 1C

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

CoursesDurationPrerequisitesCompleted?
The Missing Semester of Your CS Education2 weeks-

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

CoursesDurationAdditional Text / AssignmentsPrerequisitesCompleted?
Build a Modern Computer from First Principles: From Nand to Tetris (alternative)6 weeks-C-like programming language
Build a Modern Computer from First Principles: Nand to Tetris Part II 6 weeks-one of these programming languages, From Nand to Tetris Part I
Operating Systems: Three Easy Pieces10-12 weeks-Nand to Tetris Part II
Computer Networking: a Top-Down Approach8 weeksWireshark Labsalgebra, probability, basic CS

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

CoursesDurationPrerequisitesCompleted?
Divide and Conquer, Sorting and Searching, and Randomized Algorithms4 weeksany programming language, Mathematics for Computer Science
Graph Search, Shortest Paths, and Data Structures4 weeksDivide and Conquer, Sorting and Searching, and Randomized Algorithms
Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming4 weeksGraph Search, Shortest Paths, and Data Structures
Shortest Paths Revisited, NP-Complete Problems and What To Do About Them4 weeksGreedy Algorithms, Minimum Spanning Trees, and Dynamic Programming

Core security

Topics covered Confidentiality, Integrity, Availability Secure Design Defensive Programming Threats and Attacks Network Security Cryptography and more

CoursesDurationPrerequisitesCompleted?
Cybersecurity Fundamentals8 weeks-
Principles of Secure Coding4 weeks-
Identifying Security Vulnerabilities4 weeks-

Choose one of the following:

CoursesDurationPrerequisitesCompleted?
Identifying Security Vulnerabilities in C/C++Programming4 weeks-
Exploiting and Securing Vulnerabilities in Java Applications4 weeks-

Core applications

Topics covered: Agile methodology REST software specifications refactoring relational databases transaction processing data modeling neural networks supervised learning unsupervised learning OpenGL ray tracing and more

CoursesDurationPrerequisitesCompleted?
Databases: Modeling and Theory2 weekscore programming
Databases: Relational Databases and SQL2 weekscore programming
Databases: Semistructured Data2 weekscore programming
Machine Learning11 weeksBasic coding
Computer Graphics (alternative)6 weeksC++ or Java, Basic Linear Algebra
Software Engineering: Introduction (alternative)6 weeksCore Programming, and a sizable project

Core ethics

Topics covered: Social Context Analytical Tools Professional Ethics Intellectual Property Privacy and Civil Liberties and more

CoursesDurationPrerequisitesCompleted?
Ethics, Technology and Engineering9 weeksnone
Introduction to Intellectual Property4 weeksnone
Data Privacy Fundamentals3 weeksnone

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.

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

CoursesDurationPrerequisites
Parallel Programming4 weeksScala programming
Compilers9 weeksnone
Introduction to Haskell14 weeks-
Learn Prolog Now! (alternative)*12 weeks-
Software Debugging8 weeksPython, object-oriented programming
Software Testing4 weeksPython, programming experience

(*) 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

CoursesDurationEffortPrerequisitesNotes
Computation Structures 1: Digital Circuits alternative 1 alternative 210 weeks6 hours/weekNand2Tetris IIAlternate links contain all 3 courses.
Computation Structures 2: Computer Architecture10 weeks6 hours/weekComputation Structures 1-
Computation Structures 3: Computer Organization10 weeks6 hours/weekComputation 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

CoursesDurationPrerequisites
Theory of Computation (alternative)13 weeksMathematics for Computer Science, logic, algorithms
Computational Geometry16 weeksalgorithms, C++
Game Theory8 weeksmathematical thinking, probability, calculus

Advanced Information Security

CoursesDurationPrerequisites
Web Security Fundamentals5 weeksunderstanding basic web technologies
Security Governance & Compliance3 weeks-
Digital Forensics Concepts3 weeksCore Security
Secure Software Development: Requirements, Design, and Reuse7 weeksCore Programming and Core Security
Secure Software Development: Implementation7 weeksSecure Software Development: Requirements, Design, and Reuse
Secure Software Development: Verification and More Specialized Topics7 weeksSecure Software Development: Implementation

Advanced math

CoursesDurationPrerequisitesCompleted?
Essence of Linear Algebra--high school math
Linear Algebra14 weekscorequisite: Essence of Linear Algebra
Introduction to Numerical Methods14 weeksLinear Algebra
Introduction to Formal Logic10 weeksSet Theory
Probability15 weeksDifferentiation and Integration

Final project

Part of learning is doing. The assignments and exams for each course are to prepare you to use your knowledge to solve real-world problems.

After you've completed Core CS and the parts of Advanced CS relevant to you, you should identify a problem that you can solve using the knowledge you've acquired. You can create something entirely new, or you can improve some tool/program that you use and wish were better.

Students who would like more guidance in creating a project may choose to use a series of project oriented courses. Here is a sample of options (many more are available, at this point you should be capable of identifying a series that is interesting and relevant to you):

CoursesDurationPrerequisites
Fullstack Open12 weeksprogramming
Modern Robotics (Specialization)26 weeksfreshman-level physics, linear algebra, calculus, linear ordinary differential equations
Data Mining (Specialization)30 weeksmachine learning
Big Data (Specialization)30 weeksnone
Internet of Things (Specialization)30 weeksstrong programming
Cloud Computing (Specialization)30 weeksC++ programming
Data Science (Specialization)43 weeksnone
Functional Programming in Scala (Specialization)29 weeksOne year programming experience
Game Design and Development with Unity 2020 (Specialization)6 monthsprogramming, interactive design