# Prerequisites for Fundamental Programming Courses in cs-self-learning: A Complete Guide

> Discover the prerequisites for fundamental programming courses in cs-self-learning. Learn what foundational knowledge is needed to start your programming journey effectively.

- Repository: [Yinmin Zhong/cs-self-learning](https://github.com/PKUFlyingPig/cs-self-learning)
- Tags: how-to-guide
- Published: 2026-03-02

---

**Most fundamental programming courses in the cs-self-learning repository require no prior experience, though intermediate tracks like CS106B/X expect CS50 or equivalent, and advanced C++ courses recommend proficiency in another language first.**

The **cs-self-learning** repository curated by PKUFlyingPig organizes all introductory programming courses under the `docs/编程入门` directory. Each course’s markdown file contains a specific "Prerequisites" bullet that defines exactly what knowledge you need before enrolling, making it straightforward to plan your self-study curriculum.

## C and C++ Prerequisites

The C and C++ track offers a progression from absolute beginner to advanced systems programming, with varying entry requirements documented in the `docs/编程入门/cpp/` folder.

**CS50 – Introduction to Computer Science (C)** in `docs/编程入门/C/CS50.en.md` lists *None* as prerequisites, making it the recommended starting point for beginners. Similarly, **AUT1400 – C++ Foundations** (University of Toronto) in `docs/编程入门/cpp/AUT1400.en.md` requires no prior knowledge.

For intermediate learners, **CS106B / CS106X – Intermediate C++** in `docs/编程入门/cpp/CS106B_CS106X.en.md` explicitly requires *CS50 / CS106A / CS61A or equivalent* according to line 6 of the source file. **CS106L – Advanced C++ Programming** in `docs/编程入门/cpp/CS106L.en.md` states it is *better if you are already proficient in a programming language*, targeting developers looking to deepen their C++ expertise.

## Python Entry Points

Python courses in `docs/编程入门/Python/` universally accept beginners with no prior coding experience.

- **MIT6.100L – Computational Thinking**: *None* (`docs/编程入门/Python/MIT6.100L.en.md`)
- **CS61A – Structure and Interpretation of Computer Programs**: *None* (`docs/编程入门/Python/CS61A.en.md`)
- **CS50P – Python for Everybody**: *No prerequisites* (`docs/编程入门/Python/CS50P.en.md`)

The **MIT-Missing-Semester** self-guided Python curriculum in `docs/编程入门/MIT-Missing-Semester.en.md` also lists *None*, serving as a practical tool supplement for any programming track.

## Rust and Systems Programming Prerequisites

The Rust courses in `docs/编程入门/Rust/` assume varying levels of systems knowledge:

- **cs220 – Rust for Beginners**: Requires *Any programming language* (`docs/编程入门/Rust/cs220.en.md`)
- **CS110L – Low-level Rust**: Requires *basic knowledge about programming and computer system* (`docs/编程入门/Rust/CS110L.en.md`)
- **cs431 – Systems Programming with Rust**: Requires *Basic Understanding of Concurrency and Rust Programming* (`docs/编程入门/Rust/cs431.en.md`)

This creates a clear progression: start with cs220 if you know any language, then move to CS110L for systems concepts, and finally cs431 for advanced concurrency.

## Java and Functional Programming

**MIT 6.092 – Introduction to Java Programming** in `docs/编程入门/Java/MIT 6.092.en.md` requires *None*, making it accessible to absolute beginners.

For functional programming in `docs/编程入门/Functional/`:
- **Haskell-MOOC**: *None* (`docs/编程入门/Functional/Haskell-MOOC.en.md`)
- **CS3110 – Functional Data Structures (OCaml)**: Requires *basic knowledge about imperative programming, such as C, Python, Java* (`docs/编程入门/Functional/CS3110.en.md`)

## How to Verify Prerequisites Programmatically

You can extract prerequisite information directly from the repository source files using a simple regex parser. Each course file stores its requirement on a line starting with `- Prerequisites:`.

```python
import re
import pathlib

def get_prereq(md_path: pathlib.Path) -> str:
    """Return the first line that starts with '- Prerequisites:'."""
    pattern = re.compile(r'^\s*-\s*Prerequisites:\s*(.*)', re.IGNORECASE)
    for line in md_path.read_text(encoding='utf-8').splitlines():
        m = pattern.search(line)
        if m:
            return m.group(1).strip()
    return "Not specified"

# Example usage:

course_file = pathlib.Path('docs/编程入门/Python/CS50P.en.md')
print(f"CS50P prerequisite → {get_prereq(course_file)}")

```

Running this script against [`CS50P.en.md`](https://github.com/PKUFlyingPig/cs-self-learning/blob/main/CS50P.en.md) outputs:

```

CS50P prerequisite → No prerequisites

```

You can loop over all files in `docs/编程入门` to automatically generate a complete prerequisite matrix for your study plan.

## Summary

- **True beginner courses** (CS50, MIT6.100L, AUT1400, CS50P, MIT 6.092) require *no prior knowledge* according to their source files in `docs/编程入门/`.
- **Intermediate C++** (CS106B/CS106X) requires completion of CS50, CS106A, CS61A, or equivalent experience.
- **Advanced C++** (CS106L) recommends proficiency in at least one other programming language before starting.
- **Rust progression** moves from "any language" (cs220) → "basic systems knowledge" (CS110L) → "concurrency + Rust" (cs431).
- **Functional programming** splits between beginner-friendly Haskell and advanced OCaml requiring imperative programming background.

## Frequently Asked Questions

### Do I need to know math or another programming language before starting CS50?

No. According to `docs/编程入门/C/CS50.en.md`, CS50 lists *None* as prerequisites. The course is designed for absolute beginners with no prior programming or computer science background.

### Can I take CS106B if I only know Python?

Yes, provided you completed an introductory course equivalent to CS50, CS106A, or CS61A. The prerequisite listed in `docs/编程入门/cpp/CS106B_CS106X.en.md` specifies these equivalents, meaning Python knowledge from CS50P or CS61A satisfies the requirement.

### What is the correct order for learning Rust in this curriculum?

Start with **cs220** (requires any programming language), then proceed to **CS110L** (requires basic programming and computer systems knowledge), and finally take **cs431** (requires basic understanding of concurrency and Rust). This sequence respects the dependency chain found in the `docs/编程入门/Rust/` directory.

### Are there any prerequisites for the Missing Semester course?

No. `docs/编程入门/MIT-Missing-Semester.en.md` lists *None* as prerequisites. The course teaches essential tools like Git, Vim, and command-line usage that complement any of the fundamental programming courses.