Skip to content
Abstract dark green obsidian wave coiling into two smooth loops with a thin brass rim light
Open now

Python

Start with print() and finish writing typed, tested, async Python. One project grows with you the whole way.

  • 20 modules
  • 134 lessons
  • Shallows to Landfall
  • Free to learn

What you'll be able to do

  • Write clean programs that solve real everyday problems
  • Structure code with functions, classes, and modules
  • Use generators, decorators, and context managers with confidence
  • Write typed, tested code that automated tools can check
  • Use threads, processes, and async/await correctly
  • Be fully prepared to build production APIs with FastAPI

The full syllabus

20 modules, from the Shallows down. Open any module to see its lessons. Written lessons open in full, free. The rest show what they will teach until they're written.

The Shallows

Modules 0–9, 65 lessons

From zero to writing real little programs. No experience needed.

  1. , 0 of 6 lessons done
    0Getting startedWhat Python is, setting up, and your first programs.
    1. 0.1What is Python? (Reading)
    2. 0.2Installing Python and VS Code (Reading)
    3. 0.3Your first program: print() (Reading)
    4. 0.4Two ways to run Python (Reading)
    5. 0.5Comments and readable code (Reading)
    6. 0.6Checkpoint: Getting started
  2. , 0 of 7 lessons done
    1Values and variablesNaming, combining, and formatting values, and asking the user for them.
    1. 1.1Variables
    2. 1.2Numbers and arithmetic
    3. 1.3Strings
    4. 1.4Formatting with f-strings
    5. 1.5Asking the user: input()
    6. 1.6Types and conversion
    7. 1.7Project: Bill splitter
  3. , 0 of 6 lessons done
    2Making decisionsPrograms that choose what to do.
    1. 2.1True, False, and comparisons
    2. 2.2if, elif, else
    3. 2.3and, or, not
    4. 2.4Truthy and falsy
    5. 2.5match statements
    6. 2.6Project: Grade calculator
  4. , 0 of 5 lessons done
    3LoopsRepeating work without repeating code.
    1. 3.1while loops
    2. 3.2for loops and range()
    3. 3.3break, continue, and loop else
    4. 3.4Nested loops
    5. 3.5Project: Number guessing game
  5. , 0 of 9 lessons done
    4CollectionsLists, tuples, dictionaries, and sets, and how Python names really work.
    1. 4.1Lists
    2. 4.2List methods and sorting
    3. 4.3Tuples and unpacking
    4. 4.4Dictionaries
    5. 4.5Sets
    6. 4.6Looping patterns
    7. 4.7Comprehensions
    8. 4.8Mutability and references
    9. 4.9Project: Contact book
  6. , 0 of 8 lessons done
    5FunctionsBreaking programs into named, reusable pieces.
    1. 5.1Defining functions
    2. 5.2Arguments in depth
    3. 5.3Scope
    4. 5.4*args and **kwargs
    5. 5.5Functions are values
    6. 5.6Docstrings and a first look at type hints
    7. 5.7Recursion
    8. 5.8Project: Refactor with functions
  7. , 0 of 6 lessons done
    6Working with textStrings in depth, Unicode (including Amharic), and regular expressions.
    1. 6.1String methods
    2. 6.2Slicing strings
    3. 6.3Unicode and Amharic text
    4. 6.4Regular expressions: the basics
    5. 6.5Regular expressions: groups and testing
    6. 6.6Project: Text analyzer
  8. , 0 of 4 lessons done
    7Errors and debuggingReading, handling, and raising errors, and finding bugs fast.
    1. 7.1Reading a traceback
    2. 7.2try, except, else, finally
    3. 7.3Raising your own errors
    4. 7.4Debugging like a pro
  9. , 0 of 9 lessons done
    8Files, modules, and your environmentSaving data, organizing code, and using other people's code.
    1. 8.1Reading and writing files
    2. 8.2Paths with pathlib
    3. 8.3CSV files
    4. 8.4JSON
    5. 8.5Modules and imports
    6. 8.6A tour of the standard library
    7. 8.7Command-line programs
    8. 8.8Packages and virtual environments
    9. 8.9Project: Birr Ledger v1
  10. , 0 of 5 lessons done
    9TestingChecking your code automatically, with tests chosen to catch bugs.
    1. 9.1Why test?
    2. 9.2pytest basics
    3. 9.3Fixtures and parametrize
    4. 9.4Thinking in edge cases
    5. 9.5Project: Test Birr Ledger

Currents

Modules 10–14, 37 lessons

Writing Python the way experienced developers do: objects, iteration, decorators, context managers, and types.

  1. , coming soon
    10Object-oriented PythonModeling things with classes, and making your objects feel built-in.
    1. 10.1Classes and objectsSoon
    2. 10.2__init__ and attributesSoon
    3. 10.3MethodsSoon
    4. 10.4PropertiesSoon
    5. 10.5Inheritance and super()Soon
    6. 10.6Composition over inheritanceSoon
    7. 10.7The Python data modelSoon
    8. 10.8Interfaces with ABCsSoon
    9. 10.9Project: Birr Ledger v2Soon
  2. , coming soon
    11Iterators and generatorsWhat for really does, and producing values lazily.
    1. 11.1Iterables and iteratorsSoon
    2. 11.2Writing an iterator classSoon
    3. 11.3Generators and yieldSoon
    4. 11.4Generator expressionsSoon
    5. 11.5yield from and pipelinesSoon
    6. 11.6itertools essentialsSoon
    7. 11.7Project: Stream a huge CSVSoon
  3. , coming soon
    12Closures and decoratorsFunctions that wrap other functions. It's the idea behind @app.get in FastAPI.
    1. 12.1ClosuresSoon
    2. 12.2Decorators from scratchSoon
    3. 12.3Doing it right with functools.wrapsSoon
    4. 12.4Decorators with argumentsSoon
    5. 12.5Decorators on classes and methodsSoon
    6. 12.6The functools toolkitSoon
    7. 12.7Project: Timing, logging, and retrySoon
  4. , coming soon
    13Context managersGuaranteed setup and cleanup with with.
    1. 13.1What with really doesSoon
    2. 13.2Writing a context manager classSoon
    3. 13.3contextlib shortcutsSoon
    4. 13.4Project: A timer and safe savingSoon
  5. , coming soon
    14Type hints and data modelingTypes that tools can check, and data models that validate themselves.
    1. 14.1Why type hints?Soon
    2. 14.2Annotating variables and functionsSoon
    3. 14.3None, unions, and OptionalSoon
    4. 14.4Literal, Enum, and TypedDictSoon
    5. 14.5GenericsSoon
    6. 14.6Protocols and duck typingSoon
    7. 14.7Running a type checkerSoon
    8. 14.8DataclassesSoon
    9. 14.9Validation with PydanticSoon
    10. 14.10Project: Birr Ledger v3Soon

Deep Water

Modules 15–18, 27 lessons

Concurrency, async, Python's object model, and professional practice.

  1. , coming soon
    15ConcurrencyDoing several things at once, and choosing the right tool for it.
    1. 15.1Concurrency vs parallelismSoon
    2. 15.2The GIL, honestlySoon
    3. 15.3ThreadsSoon
    4. 15.4ProcessesSoon
    5. 15.5Choosing a modelSoon
    6. 15.6Project: Parallel downloaderSoon
  2. , coming soon
    16Async Pythonasync and await from the ground up, and how FastAPI handles many requests at once.
    1. 16.1The event loop mental modelSoon
    2. 16.2async and awaitSoon
    3. 16.3Running tasks togetherSoon
    4. 16.4Timeouts and cancellationSoon
    5. 16.5Async iterators and context managersSoon
    6. 16.6Async HTTP with httpxSoon
    7. 16.7Async pitfallsSoon
    8. 16.8Project: Live exchange ratesSoon
  3. , coming soon
    17Python's object modelHow attributes, properties, and classes really work underneath.
    1. 17.1How attribute lookup worksSoon
    2. 17.2DescriptorsSoon
    3. 17.3__slots__Soon
    4. 17.4Callable objectsSoon
    5. 17.5Customizing class creationSoon
  4. , coming soon
    18Professional PythonThe tools and habits of working Python developers.
    1. 18.1Structuring a real projectSoon
    2. 18.2Dependencies with uvSoon
    3. 18.3Linting and formatting with RuffSoon
    4. 18.4LoggingSoon
    5. 18.5Configuration and secretsSoon
    6. 18.6Git essentialsSoon
    7. 18.7Measuring performanceSoon
    8. 18.8Project: Birr Ledger as a packageSoon

Landfall

Module 19, 5 lessons

Crossing from Python to the web. Ends where the FastAPI course begins.

  1. , coming soon
    19Python meets the webHTTP, JSON, and APIs. The last step before FastAPI.
    1. 19.1How HTTP worksSoon
    2. 19.2JSON and REST APIsSoon
    3. 19.3Calling APIs from PythonSoon
    4. 19.4Your first API with FastAPISoon
    5. 19.5Capstone: Birr Ledger, complete (Project)Soon

The project that grows with you

Birr Ledger

A personal expense tracker that grows from a simple script into a typed, tested, async-capable package ready to become an API.

  1. Module 8v1. CLI script storing expenses in JSON
  2. Module 9Tested. Automated pytest test suite
  3. Module 10v2. Object-oriented design with Expense and Ledger classes
  4. Module 12Decorated. Timing and retry decorators
  5. Module 13Context. Atomic saves and safe file handling
  6. Module 14v3. Fully typed with dataclasses and Pydantic models
  7. Module 16Async. Concurrent live exchange rates fetching
  8. Module 18Package. Installable, linted, logged CLI package
  9. Module 19Capstone. Ready for the FastAPI course

Who it's for

  • Complete beginners writing their first code
  • Learners who know some Python but want to fill gaps and write idiomatic code
  • Information Systems and Computer Science students preparing for backend or AI work

What you need

  • A computer (Windows, macOS, or Linux) to install Python for later modules
  • No prior coding experience needed; early lessons run directly in your browser

Want to go further?

The Python lessons here are free, and they stay free. If you'd like more, you can join the paid Python course in Telegram. You pay there, by Telebirr or CBE.

What the paid course adds

  • The full video course, explained in more detail
  • Live learning sessions
  • The private community group
  • Direct help from the instructor

Questions

All questions
Can I take this course on my phone?

Yes to start. The lessons and interactive code runner work directly in modern mobile browsers. For later modules with local virtual environments and testing, a laptop or desktop computer is recommended.

Do I need any previous coding experience?

No. The course starts from absolute zero in Module 0 and explains every foundational concept step by step.

Is the Python course free?

Yes. Every Python lesson on this website is free, and new ones are free when they're written. If you'd like video lessons, live sessions, and the community group, you can also join the paid Python course in Telegram.