English | 简体中文
Personal learning repository for systematically studying computer science fundamentals based on the Teach Yourself Computer Science curriculum.
This repository organizes learning materials across 9 core computer science subjects. Each module provides structured guidance including prerequisites, recommended resources, and practice exercises.
1. Programming
Foundational programming concepts, recursion, abstraction, and computational thinking.
Key Resources: Structure and Interpretation of Computer Programs (SICP), Brian Harvey's CS 61A
Understanding computer systems from logic gates to processor design.
Key Resources: Computer Systems: A Programmer's Perspective, Nand2Tetris
Essential algorithms, data structures, and complexity analysis for efficient problem-solving.
Key Resources: The Algorithm Design Manual by Steven Skiena, LeetCode practice
Discrete mathematics foundations including logic, combinatorics, probability, and graph theory.
Key Resources: MIT Mathematics for Computer Science, MIT 6.042J lectures
How operating systems manage resources, processes, memory, and file systems.
Key Resources: Operating Systems: Three Easy Pieces, Berkeley CS 162
Internet architecture, protocols, and networked system communication.
Key Resources: Computer Networking: A Top-Down Approach, Stanford CS 144
7. Databases
Database systems, SQL, transaction processing, and data modeling.
Key Resources: Readings in Database Systems (Red Book), Berkeley CS 186
Programming language design, parsing, and compiler implementation.
Key Resources: Crafting Interpreters, Alex Aiken's Compilers Course
Designing fault-tolerant systems across multiple machines.
Key Resources: Designing Data-Intensive Applications, MIT 6.824
├── modules/ # Learning modules for each subject
│ ├── programming/
│ ├── computer-architecture/
│ ├── algorithms-and-data-structures/
│ ├── mathematics-for-cs/
│ ├── operating-systems/
│ ├── computer-networking/
│ ├── databases/
│ ├── languages-and-compilers/
│ └── distributed-systems/
│
├── resources/ # Centralized learning resources
│ ├── books/ # Textbooks organized by subject
│ ├── videos/ # Video lecture references
│ └── exercises/ # Practice problems and projects
│
└── openspec/ # Project specifications and change management
- Start with Prerequisites: Review each module's prerequisites before beginning
- Follow Your Path: Subjects can be studied in various orders, though suggested sequencing is:
- Begin with Programming and Mathematics for CS
- Computer Architecture before Operating Systems
- Networking and Operating Systems before Distributed Systems
- Add Resources: Place learning materials in appropriate
resources/subdirectories - Track Progress: Use module checklists to monitor completion
- Take Notes: Each module README includes space for personal study notes
Estimated Time: 100-200 hours per subject for thorough understanding
Study Strategy:
- Combine textbook reading with video lectures for reinforcement
- Complete practice exercises and projects for each subject
- Revisit favorite topics throughout career for deeper mastery
Original curriculum: Teach Yourself Computer Science