From reading Big-O notation and measuring complexity for real, through arrays, search, sorting, stacks, queues, hash tables, trees, heaps, graph traversal, dynamic programming, greedy algorithms and string algorithms, to how to approach a problem at all. Twenty lessons that take you to the point where you can look at your own code and say why it is slow. No third-party libraries. Every piece of code and result shown was produced by actually running Python 3.14.2.
The 20 lessons are grouped into seven chapters. Chapter 1 (lessons 1 and 2) is the heart of the course; every lesson after it uses the measuring tools you build there, so starting from lesson 1 is the best way.
Note: this is not a competitive programming course. It is written about making real production code faster.
Note: the samples run inside the browser (no third-party libraries). For the larger measurements, use your own python3.
The two lessons at the heart of this course. How to look at complexity in Big-O terms, and how to measure it yourself. You come away with one tool: double n and watch how the time grows.
You get clear on how a Python list is laid out internally, then write linear and binary search. You also pick up the judgement of choosing a method based on how many times you will search.
Three hand-written O(n^2) sorts, merge sort, quicksort, and the built-in Timsort. Between them, every axis of comparison comes out: worst case, stability and the constant factor.
Stacks, queues, linked lists, hash tables, trees and heaps. The single most effective change in real code — turning an in over a list into a set (1,058x) — is here.
Using a rail map, you write breadth-first search and Dijkstra's algorithm. With depth-first search you also run into Python's recursion stopping at a depth of 1,000.
Dynamic programming and greedy algorithms: never compute the same thing twice, and take the best option in front of you. The second is faster, but not always correct.
The two string patterns (two pointers and the sliding window), and the procedure for solving a problem at all. You leave with a reference sheet.
Once you have finished all 20 lessons, it is time to apply your new judgement to real code. Firm up how you write it in Python for Beginners, work with data in Python & Machine Learning for Beginners, or re-examine both complexity and raw speed in Go for Beginners — any of them continues where this course leaves off. Membership unlocks every course.