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.
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.
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
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Introduction to Computer Science and Programming using Python | 14 weeks | high school algebra | yes! |
All coursework under Core CS is required, unless otherwise indicated.
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
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Systematic Program Design | 13 weeks | none | yes! |
Class-based Program Design | 13 weeks | Systematic Program Design, High School Math | enrolled |
Programming Languages, Part A | 5 weeks | Systematic Program Design (Hear instructor) | enrolled |
Programming Languages, Part B | 3 weeks | Programming Languages, Part A | |
Programming Languages, Part C | 3 weeks | Programming Languages, Part B | |
Object-Oriented Design | 13 weeks | Class Based Program Design | |
Software Architecture | 4 weeks | Object Oriented Design |
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
Courses | Duration | Notes | Prerequisites | Completed? |
---|---|---|---|---|
Calculus 1A: Differentiation (alternative) | 13 weeks | The alternate covers this and the following 2 courses | high school math | |
Calculus 1B: Integration | 13 weeks | - | Calculus 1A | |
Calculus 1C: Coordinate Systems & Infinite Series | 6 weeks | - | Calculus 1B | |
Mathematics for Computer Science (alternative) | 13 weeks | 2015/2019 solutions 2010 solutions 2005 solutions. | Calculus 1C |
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 | Prerequisites | Completed? |
---|---|---|---|
The Missing Semester of Your CS Education | 2 weeks | - |
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
Courses | Duration | Additional Text / Assignments | Prerequisites | Completed? |
---|---|---|---|---|
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 Pieces | 10-12 weeks | - | Nand to Tetris Part II | |
Computer Networking: a Top-Down Approach | 8 weeks | Wireshark Labs | algebra, probability, basic CS |
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 | Prerequisites | Completed? |
---|---|---|---|
Divide and Conquer, Sorting and Searching, and Randomized Algorithms | 4 weeks | any programming language, Mathematics for Computer Science | |
Graph Search, Shortest Paths, and Data Structures | 4 weeks | Divide and Conquer, Sorting and Searching, and Randomized Algorithms | |
Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming | 4 weeks | Graph Search, Shortest Paths, and Data Structures | |
Shortest Paths Revisited, NP-Complete Problems and What To Do About Them | 4 weeks | Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming |
Topics covered
Confidentiality, Integrity, Availability
Secure Design
Defensive Programming
Threats and Attacks
Network Security
Cryptography
and more
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Cybersecurity Fundamentals | 8 weeks | - | |
Principles of Secure Coding | 4 weeks | - | |
Identifying Security Vulnerabilities | 4 weeks | - |
Choose one of the following:
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Identifying Security Vulnerabilities in C/C++Programming | 4 weeks | - | |
Exploiting and Securing Vulnerabilities in Java Applications | 4 weeks | - |
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
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Databases: Modeling and Theory | 2 weeks | core programming | |
Databases: Relational Databases and SQL | 2 weeks | core programming | |
Databases: Semistructured Data | 2 weeks | core programming | |
Machine Learning | 11 weeks | Basic coding | |
Computer Graphics (alternative) | 6 weeks | C++ or Java, Basic Linear Algebra | |
Software Engineering: Introduction (alternative) | 6 weeks | Core Programming, and a sizable project |
Topics covered:
Social Context
Analytical Tools
Professional Ethics
Intellectual Property
Privacy and Civil Liberties
and more
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Ethics, Technology and Engineering | 9 weeks | none | |
Introduction to Intellectual Property | 4 weeks | none | |
Data Privacy Fundamentals | 3 weeks | none |
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.
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 | Prerequisites |
---|---|---|
Parallel Programming | 4 weeks | Scala programming |
Compilers | 9 weeks | none |
Introduction to Haskell | 14 weeks | - |
Learn Prolog Now! (alternative)* | 12 weeks | - |
Software Debugging | 8 weeks | Python, object-oriented programming |
Software Testing | 4 weeks | Python, programming experience |
(*) book by Blackburn, Bos, Striegnitz (compiled from source, redistributed under CC license)
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 | Notes |
---|---|---|---|---|
Computation Structures 1: Digital Circuits alternative 1 alternative 2 | 10 weeks | 6 hours/week | Nand2Tetris II | Alternate links contain all 3 courses. |
Computation Structures 2: Computer Architecture | 10 weeks | 6 hours/week | Computation Structures 1 | - |
Computation Structures 3: Computer Organization | 10 weeks | 6 hours/week | Computation Structures 2 | - |
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 | Prerequisites |
---|---|---|
Theory of Computation (alternative) | 13 weeks | Mathematics for Computer Science, logic, algorithms |
Computational Geometry | 16 weeks | algorithms, C++ |
Game Theory | 8 weeks | mathematical thinking, probability, calculus |
Courses | Duration | Prerequisites |
---|---|---|
Web Security Fundamentals | 5 weeks | understanding basic web technologies |
Security Governance & Compliance | 3 weeks | - |
Digital Forensics Concepts | 3 weeks | Core Security |
Secure Software Development: Requirements, Design, and Reuse | 7 weeks | Core Programming and Core Security |
Secure Software Development: Implementation | 7 weeks | Secure Software Development: Requirements, Design, and Reuse |
Secure Software Development: Verification and More Specialized Topics | 7 weeks | Secure Software Development: Implementation |
Courses | Duration | Prerequisites | Completed? |
---|---|---|---|
Essence of Linear Algebra | - | - | high school math |
Linear Algebra | 14 weeks | corequisite: Essence of Linear Algebra | |
Introduction to Numerical Methods | 14 weeks | Linear Algebra | |
Introduction to Formal Logic | 10 weeks | Set Theory | |
Probability | 15 weeks | Differentiation and Integration |
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):
Courses | Duration | Prerequisites |
---|---|---|
Fullstack Open | 12 weeks | programming |
Modern Robotics (Specialization) | 26 weeks | freshman-level physics, linear algebra, calculus, linear ordinary differential equations |
Data Mining (Specialization) | 30 weeks | machine learning |
Big Data (Specialization) | 30 weeks | none |
Internet of Things (Specialization) | 30 weeks | strong programming |
Cloud Computing (Specialization) | 30 weeks | C++ programming |
Data Science (Specialization) | 43 weeks | none |
Functional Programming in Scala (Specialization) | 29 weeks | One year programming experience |
Game Design and Development with Unity 2020 (Specialization) | 6 months | programming, interactive design |