What you'll learn
- See the whole journey in one picture, from the first
printto a deployed package - Recognize which habits, not which facts, made the difference
- Know exactly what to do next week
- Hear a proper thank you
Concept
Ninety-two lessons ago you installed Python and printed a line of text. Since then you have learned a language, then how to organize code into objects and modules, then how professionals write it, with types, tests, and lazy pipelines, and finally how it is shipped: packaged, configured, containerized, checked on every push. The distance between lesson 2 and lesson 90 is the distance between someone who can write Python and someone a team can rely on. You covered it one small idea at a time, which is the only way anyone ever does.

The facts will fade and come back when you need them; help() and the documentation are always there. What stays are the habits, and they are what this course was really teaching. Read the error message from the bottom. Measure before you optimize. Never build a command or a query from untrusted text. Keep the library free of the shell around it. Write the test before you trust the code. Pin the versions. Name the thing after what it means. Commit small and explain why. Configure from outside. Log, do not print. Read other people's code every week.
| Habit | Lesson where it took root |
|---|---|
| read tracebacks bottom-up | Reading error messages |
| one concept per function, one job per class | Functions; Composition and object design |
| test the behavior, mock the boundary | Testing with pytest; Mocking and testing side effects |
| measure, then fix the order of growth | Algorithmic complexity; Profiling |
| never let data become code | Databases with sqlite3; Security essentials |
| configuration and secrets outside code | Configuration and secrets |
| lock, lint, type-check, test, on every push | Project structure; Code quality and CI |
| finish small things, then reflect | every project lesson; How to keep practicing |
You also built four things you can show: a quiz game, a file organizer, a typed and tested library, and a packaged, containerized command with CI. They are proof, and they are a template. The next project starts from the capstone's shell and is about the problem, not the plumbing.
Next week has three tasks and you already know them. Start the first project on the path you chose in lesson 91. Write your learning_log.md line after each session. Send the scope document to one real person. Everything else follows from those, at the pace of a lesson a day, which is how you got here.

Thank you for spending this time with the course. Teaching is the last stage of learning, and building these lessons taught me the language again. You did the harder part: you typed every example, ran into every error, and kept going. That persistence is the actual skill, and it is now yours. Go build something, then tell someone about it.
Code
Where you started, and where you ended, in the same file. The first block is lesson 2's program; the second is a compressed version of what the capstone can do. Both are real Python; the gap between them is you.
# then_and_now.py
print("Hello, world!")
# --- ninety lessons later ---
import json
import logging
from dataclasses import dataclass
from datetime import date
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s")
log = logging.getLogger("expenses")
@dataclass(frozen=True, order=True)
class Expense:
day: date
category: str
amount: float
def report(expenses: list[Expense]) -> str:
by_category: dict[str, float] = {}
for e in sorted(expenses):
by_category[e.category] = round(by_category.get(e.category, 0) + e.amount, 2)
log.info("reported %d expenses", len(expenses))
return json.dumps({"total": round(sum(e.amount for e in expenses), 2), "by_category": by_category})
print(report([Expense(date(2026, 9, 1), "rent", 950), Expense(date(2026, 9, 2), "food", 12.5)]))
Hello, world!
INFO reported 2 expenses
{"total": 962.5, "by_category": {"rent": 950, "food": 12.5}}The course by the numbers, computed rather than claimed: what you actually worked through.
# by_the_numbers.py
levels = {"Fundamentals": 21, "Beginner": 28, "Advanced": 22, "Expert": 19, "Closing": 4}
projects = ["quiz game", "file organizer", "typed tested library", "production package (capstone)"]
minutes = 854
print("lessons:", sum(levels.values()), "|", ", ".join(f"{k} {v}" for k, v in levels.items()))
print("projects built:", len(projects), "->", "; ".join(projects))
print(f"video: about {minutes // 60} hours {minutes % 60} minutes; typing and exercises: many more")
print("next step: one lesson-sized session, tomorrow")
lessons: 94 | Fundamentals 21, Beginner 28, Advanced 22, Expert 19, Closing 4
projects built: 4 -> quiz game; file organizer; typed tested library; production package (capstone)
video: about 14 hours 14 minutes; typing and exercises: many more
next step: one lesson-sized session, tomorrowTry it yourself
Open the folder where you did the first exercise and run hello.py once more. Then open the capstone and run its test suite. Write one paragraph in your learning log about what changed between those two commands, and schedule tomorrow's session.
Common mistakes
- Stopping. The course ends; the practice does not, and the first week after a course is when it is easiest to let it slide.
- Starting the next course instead of the next project. You have enough to build; build.
- Forgetting how far you came. Keep
hello.py; on a hard day, run it.
What's next
- Four levels, ninety-four lessons, four projects: from
printto a deployed, tested, packaged command. - The habits outlast the facts: read errors, measure, test, isolate the library, keep data out of code, configure outside, commit small.
- This week: start the project, log the session, send the scope. Thank you, and see you in the next course.
That is the end of Python: Beginner to Production. Thank you for learning with Hexcursion Studio.