Comp-Sci Study Plan (for lunatics)


Note: Not for the faint of heart.

This course was born from frustration. It started as an un-organized collection of bookmarks. Then I decided to order and organize them into a structure that made sense. Then I started adding things I felt were missing. And here we are. I am currently commited to and working through this myself. I expect it to take years of study.

FAQ

  • Is this learning path easy? No.
  • Who is this for? People who can’t study at university, but still want to learn. People who need structure.
  • Is it free? Most resources are free or can be found if you’re resourceful. Use your best judgment.
  • Isn’t this just a bunch of other learning resources strung together? Yes.
  • Is the mathematics optional? No.
  • How long does this take? Realistically 3-4 years of dedicated study (20+ hours/week). This is not a sprint.
  • Why did you make this? I am not able to study at university, but still wanted to learn “everything”. Everything turned out to be too big, so I needed a plan. Below is the plan I came up with, and then I modified it slightly to make it fit for public consumption.
  • Where do I get book x? You buy them. Books make you look smart. Put them on a shelf and impress your friends. Otherwise see “is it free?”.

How to Use This Guide

🟢 Green = Core curriculum. Read / do start to finish, cover to cover.
🟡 Yellow = Supplementary materials. Want moar? Do these.
🔴 Red = Academic skills development (we are emulating uni after all..)

Learning Approach:

  • Progress through courses sequentially, but feel free to explore supplementary materials as interests arise. This course is meant to cover everything, and I wanted to suggest (in my opinion) the GOLD STANDARD for resources.
  • Every major topic includes hands-on projects - these are not optional. See one, do one, teach one. I’ve provided guidance for the seeing and the doing. It’s how to learn.
  • Document everything, take extensive notes, put your projects in a portfolio, and write about what you learn.
  • Self-paced means exactly that - take the time you need to truly understand each concept. There are no looming deadlines, and no teachers. This also means you need serious discipline.

Course: Mathematical Foundations

Prerequisites: None

Core Mathematics Track

🟢 Khan Academy: Pre-Algebra
🟢 Khan Academy: Algebra 1
🟢 Khan Academy: Algebra 2
🟢 Khan Academy: Precalculus
🟢 Khan Academy: Calculus I (Differential Calculus)
🟢 Khan Academy: Statistics and Probability

Why this order? Mathematics is the foundation of computer science. This course completes your full mathematical foundation BEFORE moving to programming. Basic statistics early helps with understanding probability in algorithms and data analysis later.

Supplementary

🟡 Khan Academy: Calculus II (Integral Calculus)
🟡 Khan Academy: Calculus III (Multivariable Calculus)
🟡 “Calculus” - Stewart (if you want a proper textbook)
🟡 3Blue1Brown YouTube series (Essence of Calculus, Essence of Linear Algebra)


Course: Foundations

Prerequisites: None (Mathematical Foundations recommended)

Core Track

🟢 “The C Programming Language” - Kernighan & Ritchie
🟢 CS50 (Harvard)
🟢 “Elements of Computing Systems” (Nand2Tetris)
🟢 “Version Control with Git” - Loeliger OR Git documentation and tutorials

Projects

🟢 Project: CS50 comes with plenty of projects. Do them.
🟢 Project: Build CLI tools (calculator, text editor, simple grep clone)
🟢 Project: Complete the NAND to TETRIS project.
🟢 Project: Put all projects on GitHub with proper READMEs and commit history

Supplementary

🟡 “Code: The Hidden Language …” - Petzold
🟡 “The Practice of Programming” - Kernighan & Pike
🟡 “How to Design Programs” (HtDP) - Systematic problem-solving
🟡 MIT Missing Semester (shell tools, vim, command line)
🟡 “Build Systems à la Carte”
🟡 Shell and build tools mastery (make, gcc, valgrind, gdb)


Course: Systems Programming

Prerequisites: Foundations

Operating Systems Track

🟢 “Operating Systems: Three Easy Pieces”

Projects

🟢 Project: Build a shell with job control and piping
🟢 Project: Implement a simple file system

Supplementary

🟡 “Understanding the Linux Kernel”
🟡 “Modern Operating Systems” - Tanenbaum
🟡 “The Art of Unix Programming” - Raymond
🟡 “The Unix Programming Environment” - Kernighan & Pike
🟡 “Operating System Concepts”
🟡 “Linux Kernel Development” - Love


Course: Databases

Prerequisites: Foundations

Core Track

🟢 “Database System Concepts” - Silberschatz, Galvin, Gagne

Projects

🟢 Project: Build a blog or forum with CRUD operations, indexing, and transactions
🟢 Project: Implement a simple key-value store from scratch

Supplementary

🟡 “Designing Data-Intensive Applications” - Kleppmann (read first half)
🟡 SQL query optimization and database design patterns


Course: Discrete Mathematics

Prerequisites: Mathematical Foundations

Core Track

🟢 “Mathematics for Computer Science” - MIT OCW
🟢 “How to Prove It” - Velleman
🟢 Khan Academy: Linear Algebra

Why Linear Algebra here? You need discrete math and proof-writing skills first. Linear algebra makes much more sense when you understand mathematical reasoning.

Projects

🟢 Project: Complete formal proofs for fundamental algorithms
🟢 Project: Proof portfolio (prove correctness of sorting algorithms, graph algorithms)

Supplementary

🟡 “Linear Algebra Done Right” - Axler
🟡 “Concrete Mathematics” - Knuth, Patashnik, Graham
🟡 Khan Academy: Discrete Mathematics
🟡 “Discrete Mathematics and Its Applications” - Rosen
🟡 “The Art of Proof” - Beck


Course: Algorithms

Prerequisites: Discrete Mathematics, Foundations

Core Track

🟢 “Introduction to Algorithms” - Cormen, Leiserson, Rivest, Stein (CLRS)
🟢 “Introduction to the Theory of Computation” - Sipser

Projects

🟢 Project: Implement all major algorithms and data structures in C or Rust
🟢 Project: Performance analysis comparing different algorithm choices
🟢 Project: Build a simple programming language parser and interpreter
🟢 Project: Solve 50+ LeetCode/HackerRank problems (focus on understanding, not speed)

Supplementary

🟡 “Algorithms” - Sedgewick & Wayne
🟡 “Algorithm Design Manual” - Skiena
🟡 “Competitive Programming” - Halim & Halim


Course: Systems Architecture

Prerequisites: Systems Programming, Algorithms

Systems Deep Dive Track

🟢 “Computer Systems: A Programmer’s Perspective” (CS:APP)
🟢 “Computer Organization and Design” - Patterson & Hennessy

Projects

🟢 Project: Build and optimize a memory allocator
🟢 Project: Build a Simple RISC-V Emulator or Assembler
🟢 Project: Profile and optimize a real program using perf, cachegrind

Supplementary

🟡 “Computer Architecture: A Quantitative Approach” - Hennessy & Patterson
🟡 “The Art of Electronics”
🟡 “Digital Design and Computer Architecture”
🟡 “Modern Processor Design” - Shen


Course: Compilers

Prerequisites: Systems Architecture, Algorithms

Compilers Track

🟢 “Compilers: Principles, Techniques & Tools” (Dragon Book) - or -
🟢 “Engineering a Compiler” - Cooper & Torczon (more modern alternative)

Projects

🟢 Project: Build a compiler for a simple language (targeting x86 or LLVM IR)
🟢 Project: Add optimization passes to your compiler

Supplementary

🟡 “Modern Compiler Implementation in C” - Appel
🟡 LLVM tutorials and documentation


Course: Web Development

Prerequisites: Algorithms, Databases

Core Track

🟢 The Odin Project: Full Course, React Path.
🟢 “Eloquent JavaScript”

Projects

🟢 Project: Build a full-stack social media platform with authentication, real-time features
🟢 Project: Complete all exercises in both resources
🟢 Project: Deploy your application with proper CI/CD

Supplementary

🟡 “HTTP: The Definitive Guide” - David Gourley & Brian Totty
🟡 “High Performance Browser Networking” - Ilya Grigorik
🟡 “Designing Web APIs” - Brenda Jin, Saurabh Sahni, Amir Shevat
🟡 Modern CSS architecture (CSS Grid, Flexbox, CSS-in-JS)


Course: Software Testing

Prerequisites: Any of the programming courses.

Core Track

🟢 “The Art of Software Testing” - Glenford Myers
🟢 “Growing Object-Oriented Software, Guided by Tests” - Freeman & Pryce

Projects

🟢 Project: Add comprehensive test suites to all previous projects
🟢 Project: Achieve >80% code coverage on your web application
🟢 Project: Implement continuous integration for your projects

Supplementary

🟡 Property-based testing (QuickCheck-style)
🟡 Mutation testing and coverage analysis
🟡 Performance and load testing


Course: Networking

Prerequisites: Systems Programming, Algorithms

Core Track

🟢 “Computer Networking: A Top-Down Approach” - Kurose & Ross
🟢 “Hacking: The Art of Exploitation” - Erickson

Projects

🟢 Project: Build a multi-threaded HTTP server with WebSocket support
🟢 Project: Implement TCP/IP from scratch (user-space network stack)
🟢 Project: Complete all exercises and participate in CTF competitions

Supplementary

🟡 “TCP/IP Illustrated” - Stevens
🟡 “High Performance Browser Networking” - Grigorik
🟡 “The Web Application Hacker’s Handbook”
🟡 “Security Engineering” - Anderson
🟡 “Serious Cryptography” - Aumasson
🟡 “The Tangled Web” - Zalewski


Course: Distributed Systems

Prerequisites: Networking, Databases

Core Track

🟢 “Designing Data-Intensive Applications” - Kleppmann
🟢 MIT 6.824 Distributed Systems course (lectures + labs)

Projects

🟢 Project: Build a distributed key-value store with replication
🟢 Project: Implement Raft consensus algorithm
🟢 Project: Complete MIT 6.824 labs (MapReduce, Raft, KV Store, Sharded KV)

Supplementary

🟡 “Site Reliability Engineering” - Google
🟡 “Release It!: Design and Deploy Production-Ready Software”
🟡 “Building Microservices” - Newman
🟡 “Designing Distributed Systems” - Burns
🟡 Consensus algorithms deep dive (Paxos, Raft, Byzantine fault tolerance)


Course: Research Skills

Prerequisites: Multiple core courses completed (recommended before Capstone)

This course integrates reading, writing, and experimental skills needed for independent research and academic communication. These skills can be developed throughout your studies, but formalize them before your capstone project.

Core Track

🟢 “How to Read a Paper” - S. Keshav (3-pass method)
🟢 “The Craft of Research” - Booth, Colomb, Williams
🟢 “The Elements of Style” - Strunk & White
🟢 “Introduction to Probability and Statistics” (formal textbook)

Projects

🔴 Research Component: Read and summarize 20 papers across different CS domains
🔴 Research Component: Write 5 technical blog posts explaining complex topics
🔴 Research Component: Write a survey paper on a topic of interest (10-15 pages)
🔴 Research Component: Design and conduct a performance comparison study
🔴 Research Component: Replicate results from a systems or ML paper

Supplementary

🟡 “Technical Writing” - comprehensive course or textbook
🟡 Experimental design and statistical analysis
🟡 Reproducible research practices (version control for research, documentation)
🟡 Conference talks and research paper reading


Course: Capstone Project

Prerequisites: Most core courses completed, Research Skills

Major Project Requirements

🟢 Duration: 6+ months of dedicated work
🟢 Scope: Integrate knowledge from at least 3 specialization areas
🟢 Deliverables: Working system + comprehensive documentation + technical paper

Example Capstone Projects:

  • Build a distributed database with security features and web interface
  • Create a programming language with compiler, runtime, and development tools
  • Develop a machine learning framework with distributed training capabilities
  • Design and implement a new networking protocol with formal verification
  • Build a complete operating system kernel with novel scheduling algorithm
  • Create a container orchestration system (mini-Kubernetes)

Capstone Components:

🟢 Research Phase: Literature review and problem definition (4-6 weeks)
🟢 Design Phase: Architecture and implementation plan (4-6 weeks)
🟢 Implementation Phase: Core development work (12-16 weeks)
🟢 Evaluation Phase: Testing, performance analysis, comparison (4-6 weeks)
🟢 Documentation Phase: Final paper and presentation (2-4 weeks)


Specialization Tracks

Choose one or more areas for deep specialization. Complete capstone project before or during specialization.

Security Research Track

Prerequisites: Networking, Systems Programming

🟢 “The Web Application Hacker’s Handbook”

Projects

🟢 Project: Disclose a security vulnerability (responsibly)
🔴 Research Component: Contribute to a security tool or framework

Supplementary

🟡 “Security Engineering” - Anderson
🟡 “Metasploit: The Penetration Tester’s Guide”
🟡 “The Shellcoder’s Handbook”
🟡 “Practical Malware Analysis”
🟡 “The Hardware Hacker”
🟡 CVE analysis and security research
🟡 Advanced CTF participation
🟡 Formal verification for security properties


Low-Level Mastery Track

Prerequisites: Systems Programming, Systems Architecture

🟢 “Linux Kernel Development” - Love

Projects

🟢 Project: Write a kernel module
🔴 Research Component: Contribute patch to Linux kernel or similar project

Supplementary

🟡 “Understanding the Linux Kernel”
🟡 “Modern Processor Design” - Shen
🟡 “FPGA Prototyping by Examples”
🟡 “Practical Electronics for Inventors”
🟡 Real-time systems and embedded programming


Programming Languages & Formal Methods Track

Prerequisites: Compilers, Algorithms, Discrete Mathematics

🟢 “Structure and Interpretation of Computer Programs” (SICP)
🟢 “Types and Programming Languages” - Pierce

Projects

🟢 Project: Build a programming language interpreter or compiler with advanced type system
🔴 Research Component: Implement a type checker for a novel language feature

Supplementary

🟡 “Design Concepts in Programming Languages”
🟡 “Seven Languages in Seven Weeks”
🟡 “Software Foundations” (Coq-based formal verification)
🟡 Program analysis and verification tools
🟡 Domain-specific language design


AI/ML Research Track

Prerequisites: Algorithms, Discrete Mathematics, Mathematical Foundations

🟢 “Hands-On Machine Learning” - Géron
🟢 “Pattern Recognition and Machine Learning” - Bishop

Projects

🟢 Project: Train and deploy a machine learning model to production
🔴 Research Component: Reproduce results from a recent ML paper

Supplementary

🟡 “Artificial Intelligence: A Modern Approach” - Russell & Norvig
🟡 “Elements of Statistical Learning” - Hastie, Tibshirani, Friedman
🟡 “Deep Learning” - Goodfellow, Bengio, Courville
🟡 “Machine Learning Yearning” - Andrew Ng
🟡 “Mining of Massive Datasets”
🟡 FastAI or DeepLearning.ai courses
🟡 Recent conference papers (NeurIPS, ICML, ICLR)


Functional Programming Track

Prerequisites: Foundations, Algorithms

🟢 “Programming Elixir” - Thomas
🟢 “Haskell Programming from First Principles” - Allen & Moronuki

Projects

🟢 Project: Build a functional application in chosen language
🔴 Research Component: Implement a functional programming concept in imperative language

Supplementary

🟡 “Learn You a Haskell for Great Good”
🟡 Category theory for programmers
🟡 Advanced functional programming concepts
🟡 Dependent types and proof assistants


Data Science & Visualization Track

Prerequisites: Mathematical Foundations, Algorithms

🟢 “Data Science from Scratch” - Joel Grus
🟢 “Information Visualization: Perception for Design” - Colin Ware

Projects

🟢 Project: Complete data analysis pipeline with visualizations
🔴 Research Component: Design novel visualization for complex dataset

Supplementary

🟡 “The Visual Display of Quantitative Information” - Tufte
🟡 “Data Visualization: A Practical Introduction” - Healy
🟡 “The Art of R Programming”
🟡 “Python Cookbook”
🟡 Advanced statistical modeling


Development Environment & Meta-Skills

Essential Tools

🟢 Vim or Emacs mastery (essential in lower-level environments)
🟢 Advanced Git workflows (rebasing, cherry-picking, bisect)
🟢 Container technologies (Docker, Kubernetes basics)
🟢 Build systems (make, cmake, ninja)

Supplementary

🟡 Window managers (i3, tmux, tiling workflows)
🟡 Package managers and containerization
🟡 IDE configuration and plugins
🟡 Infrastructure as Code (Terraform, Ansible)


Knowledge Management

🟢 Build a second brain → (Obsidian, Notion, or GitHub)
🟢 Technical writing practice (blog posts, documentation)
🟢 Note-taking systems for research (Zettelkasten, Cornell notes)

Supplementary

🟡 Conference talks and research paper reading
🟡 Community participation and networking
🟡 “Teaching Tech Together” - Greg Wilson
🟡 Public speaking and presentation skills


Software Engineering Practices

🟢 “Clean Code” - Martin
🟢 “The Pragmatic Programmer”
🟢 “Working Effectively with Legacy Code” - Feathers

Supplementary

🟡 “Software Engineering at Google”
🟡 “The Effective Engineer”
🟡 “Mythical Man-Month”
🟡 “Extreme Programming Explained” - Kent Beck
🟡 “Agile Software Development”
🟡 “Refactoring: Improving the Design of Existing Code”


Project Portfolio Requirements

Throughout the curriculum, maintain a portfolio demonstrating:
🟢 All major projects from each course with clean, documented code
🟢 Progressive skill development across multiple programming languages
🟢 At least three significant open-source contributions
🟢 Technical writing samples and documentation
🟢 Research components with reproducible results
🟢 Capstone project with comprehensive evaluation


Assessment & Milestones

Course Completion Criteria

Each course should demonstrate practical mastery through projects and theoretical understanding through explanatory writing.

Intermediate Milestones

A realistic idea of capabilities after each major course area:

  • Mathematical Foundations: Complete mathematical foundation including calculus and statistics
  • Foundations: Write and debug C programs, understand basic computer architecture, use Git proficiently
  • Systems Programming & Databases: Understand operating system internals, design databases, implement file systems
  • Discrete Mathematics & Algorithms: Prove algorithm correctness, analyze complexity, implement fundamental data structures and algorithms
  • Systems Architecture & Compilers: Understand computer architecture deeply, build compilers, optimize low-level code
  • Web Development & Software Testing: Create full-stack web applications with comprehensive testing and deployment
  • Networking & Distributed Systems: Design and implement network protocols, build distributed systems
  • Research Skills: Read and contribute to academic literature, communicate technical ideas effectively
  • Capstone: Synthesize knowledge across domains in substantial independent project

Final Mastery Checks

Can you do these things?
🟢 Implement core algorithms and data structures from memory
🟢 Debug and optimize system-level code
🟢 Design and implement distributed systems
🟢 Read, understand, and critique research papers
🟢 Contribute meaningfully to open-source projects
🟢 Explain complex CS concepts clearly to others
🟢 Choose appropriate tools and technologies for given problems
🟢 Conduct independent research and experimentation
🟢 Write technical documentation and papers

Community Engagement

🟢 Participate in relevant online communities (Stack Overflow, GitHub, Reddit)
🟢 Attend virtual conferences and workshops
🟢 Find study partners or mentors through online platforms
🟢 Consider forming or joining a local study group


Timeline Expectations

Estimated Timeline: Each course could take anywhere between 1 - 6 months, dependant on personal availability.

Total Time: Anywhere between 1 - 4 years of dedicated study.

This represents the equivalent of a rigorous 4-year CS degree plus research experience. The self-directed nature requires exceptional discipline but produces deeper understanding than most traditional programs.


This curriculum is open source, fueled by caffeine, and designed to produce world-class computer scientists without the university price tag.