47-Session Curriculum

Sessions must be completed in order. Each layer unlocks only after the previous layer's final quiz scores ≥ 80%. A session is not complete until the commit is made and reviewed. Every session builds the same running project: the Country Explorer.

All sessions are open. Browse any session from the Sessions page. Layer gate quizzes remain recommended self-checks before advancing the lab track.
Active Layer 0 — Python Basics

A true starting point for anyone new to programming: running code, naming values, branching, and repeating. Every later session assumes these are second nature.

# Title Core Concept Project Milestone Status
01 Hello, World & Variables Running Code, Variables, and Types A file called hello.py. Available
02 Operators, Strings & Type Conversion Operators, Strings, and Explicit Conversion A file called operators.py. Available
03 Conditionals Branching with if / elif / else A file called conditionals.py. Available
04 Loops (Layer gate) Repeating Actions with for and while A file called loops.py. Gate
Layer 0 Gate: Recommended self-check score ≥ 80% on the Layer 0 review quiz before starting Layer 1 labs.
Open Layer 1 — Python Foundations

Before we build anything, we must be fluent in the core data structures and control flow that every later session relies on: dictionaries, lists, functions, and error handling.

# Title Core Concept Project Milestone Status
05 Dictionaries Python Dictionaries A file called country.py that demonstrates every dictionary concept from this session. Nothing more. Available
06 Lists and Iteration Python Lists and Iteration A file called countries.py that builds on Session 05's single dictionary. Available
07 List Comprehensions List Comprehensions A file called filters.py operating on the country list from Session 06. Available
08 Functions and Lambda Functions and Lambda A file called functions_lab.py. Available
09 Unpacking and *args/**kwargs Unpacking and *args / **kwargs A file called unpacking_lab.py. Available
10 Modules and Imports Modules and Imports Two files: country_data.py (the module) and explorer.py (imports and uses it). Available
11 Errors and Exceptions (Layer gate) Errors and Exceptions A file called errors_lab.py. Gate
Layer 1 Gate: Recommended self-check score ≥ 80% on the Layer 1 review quiz before starting Layer 2 labs.
Open Layer 2 — Object-Oriented Basics

We start modelling real things as classes. Every concept here maps to something in Layer 1 — a class is just a structured way of grouping the dictionaries and functions you already know.

# Title Core Concept Project Milestone Status
12 What Classes Are and Why Why Classes Exist A file called country_class.py. Available
13 Class Anatomy — __init__ and Attributes __init__ and Instance Attributes A file called country_init.py. Available
14 Instance Methods Instance Methods A file called country_methods.py. Available
15 Passing Data via the Constructor Constructor Arguments as an Explicit Contract A file called construction_lab.py. Available
16 Composition — Objects Containing Objects Composition A file called explorer_composed.py. Available
17 Conditional Logic in Methods Conditional Logic in Methods A file called conditional_lab.py, building on Session 16's CountryExplorer. Available
18 Building Lists of Objects Building Object Lists from Raw Data A file called build_list_lab.py. Available
19 Object Identity and Equality (Layer gate) Identity vs Equality A file called identity_lab.py. Gate
Layer 2 Gate: Recommended self-check score ≥ 80% on the Layer 2 review quiz before starting Layer 3 labs.
Open Layer 3 — State & Interactivity

State is data that changes over time. We learn to track it safely on objects, take input from a user, and compute values instead of duplicating them.

# Title Core Concept Project Milestone Status
20 What Is State in a Program? State A file called state_concept.py — mostly comments and small demonstrations, not new functionality. Available
21 Updating State via Methods Controlled State Updates A file called controlled_state.py. Available
22 Handling User Input Reading and Validating User Input A file called input_lab.py. Available
23 Tracing State Changes Tracing State Changes A file called tracing_lab.py. Available
24 Validating Input Thorough Input Validation Two files: validators.py and an updated menu.py. Available
25 Passing State Between Functions State Ownership Between Functions A file called state_passing_lab.py. Available
26 Computed Properties (Layer gate) Computed Properties A file called computed_lab.py. Gate
Layer 3 Gate: Recommended self-check score ≥ 80% on the Layer 3 review quiz before starting Layer 4 labs.
Open Layer 4 — Mock Data

Real teams build against fake data before a real data source exists. We design data contracts and a data-access layer independent of where the data actually comes from.

# Title Core Concept Project Milestone Status
27 Why Mock Data Matters Why Mock Data Matters A file called mock_countries.py and a small script that uses it. Available
28 Building a Data Access Layer A Data Access Layer A file called repository_lab.py. Available
29 Working with JSON Files Reading and Writing JSON A file called json_lab.py, plus a generated countries.json. Available
30 Designing Data Contracts (Layer gate) Data Contracts with Type Hints and Dataclasses A file called contracts_lab.py. Gate
Layer 4 Gate: Recommended self-check score ≥ 80% on the Layer 4 review quiz before starting Layer 5 labs.
Open Layer 5 — Testing

Testing is introduced gradually alongside the code it tests, using pytest. We test behavior — what a function or class does — not implementation details.

# Title Core Concept Project Milestone Status
31 Why We Test and What to Test Why We Test A file called manual_tests.py — using bare assert statements, the same tool pytest builds on. Available
32 Setting Up pytest pytest Fundamentals A file called country.py (the real module) and tests/test_country.py. Available
33 Testing Functions and Return Values Testing Return Values Systematically A file called tests/test_return_values.py, building on Session 32's country.py. Available
34 Testing Classes and State Changes Testing State Changes Extends country.py and adds tests/test_state_changes.py. Available
35 Testing the Data Layer with Mocks (Layer gate) Testing the Data Layer in Isolation A file called tests/test_repository.py, extending country.py with CountryRepository and validate_country_record if not already present. Gate
Layer 5 Gate: Recommended self-check score ≥ 80% on the Layer 5 review quiz before starting Layer 6 labs.
Open Layer 6 — Architecture

With the foundations in place, we learn to structure a Python project for long-term maintainability: package layout, reusable modules, and recognizing tight coupling.

# Title Core Concept Project Milestone Status
36 Package and Folder Organization Modules vs Packages A new package directory country_explorer/ replacing the flat country.py. Available
37 Reusable Functions and Modules Extracting Reusable Logic A new module country_explorer/formatting.py plus tests/test_formatting.py. Available
38 Building Utility Modules Utility Modules A new module country_explorer/search.py plus tests/test_search.py. Available
39 The Prop Drilling Problem Experiencing the Prop Drilling Problem A file called prop_drilling_lab.py. Available
40 Architecture Review (Layer gate) Conducting an Architecture Review A file called ARCHITECTURE.md at the project root. Gate
Layer 6 Gate: Recommended self-check score ≥ 80% on the Layer 6 review quiz before starting Layer 7 labs.
Open Layer 7 — Real World

Only now do we touch the filesystem and a real network API. By this point we have the vocabulary to understand exactly what changed and why it matters.

# Title Core Concept Project Milestone Status
41 File I/O Deep Dive Robust File Handling A file called file_io_lab.py, extending the country_explorer package. Available
42 Calling a Real API with requests Calling a Real API A file called real_api_lab.py. Available
43 Handling Errors and Edge Cases Gracefully Robust Network Error Handling A file called robust_loading_lab.py. Available
44 Capstone Review (Layer gate) The Complete Country Explorer — End to End A final update to ARCHITECTURE.md, plus a verification pass across the whole project. Gate
Layer 7 Gate: Recommended self-check score ≥ 80% on the Layer 7 review quiz before starting Layer 8 labs.
Open Layer 8 — Beyond the Fundamentals

Optional, bonus sessions beyond the core curriculum: decorators, generators and context managers, and packaging/virtual environments — closing the remaining gaps to a genuinely intermediate level.

# Title Core Concept Project Milestone Status
45 Decorators Decorators — the General Mechanism A file called decorators_lab.py. Available
46 Generators, Iterators & Context Managers Iterators, Generators, and Context Managers A file called generators_lab.py. Available
47 Packaging & Virtual Environments (Layer gate) Isolating and Sharing a Python Project A virtual environment and a requirements.txt file. Gate
Curriculum complete: This is the final layer. The core curriculum (Layers 1-7) ends at its own capstone; this layer is optional, bonus material beyond it.

Dependency Ordering

Each row depends on everything above it. Nothing skips a level.

Basics: print/vars → Operators/Strings → Conditionals → Loops
                  ↓
              Dictionaries → Lists → Comprehensions → Functions/Lambda → Unpacking/*args
  → Modules/Imports → Errors/Exceptions
                  ↓
              Classes → Attributes → Methods → Constructors → Composition
              → Conditionals → Object Lists → Identity/Equality
                        ↓
                    State → Controlled Updates → User Input → Tracing
                    → Validation → State Passing → Computed Properties
                                  ↓
                              Mock Data → Data Layer → JSON Files → Data Contracts
                                        ↓
                                    Testing → pytest → Return Values → State Tests → Data Layer Tests
                                              ↓
                                         Packages → Reusable Modules → Utilities → Prop Drilling → Architecture Review
                                                        ↓
                                                   File I/O → Real API → Robust Errors → Capstone
                                                                  ↓
                                                        (optional) Decorators → Generators/Context
                                                                  Managers → Packaging/venv