Prerequisites for Fundamental Programming Courses in cs-self-learning: A Complete Guide
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:.
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 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.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →