There is a large gap between books that teach Python and books that teach programming using Python, and Downey has been on the right side of it for about twenty years. Think Python is not a syntax reference. It is a book about how to break a problem into pieces, how to reason about what your code is doing, and how to find out why it is not doing that. The Python is the vehicle.
That framing shows up in small decisions throughout. Debugging gets its own treatment, repeatedly, rather than being an appendix. Functions arrive early and are motivated properly. There are chapters that are essentially about how to think about a problem before you type, which almost no beginner material bothers with because it does not demo well.
The result is a book that produces people who can work things out, rather than people who can recall the syntax for a list comprehension and freeze when the error message is unfamiliar. The third edition is what moved this up my list. Downey rewrote it around the reality that a beginner in 2026 has a language model available and will use it, and rather than pretending otherwise or issuing warnings about cheating, he treats it as part of the environment and teaches you how to use it well. There is material on writing effective prompts, on checking what you are given rather than pasting it, on using a model to explain an error message rather than to produce the fix.
This is the correct response to the situation and I have seen very few other beginner texts manage it. Most either ignore models entirely, which makes the book feel dated on arrival, or gesture at them with vague warnings. Downey actually teaches the skill. The delivery format is the other improvement.
The book is now written as Jupyter notebooks that open directly in Colab, which means a complete beginner can read a paragraph, run the code below it, change it, and see what breaks, all without installing anything. The single biggest cause of people abandoning programming in week one is environment setup, and this removes it completely. What it does not do is make the book exciting. Downey's prose is clean, precise and quite dry.
He is a professor and it reads like one, and if you need enthusiasm to keep going you may find yourself drifting. This is a real limitation for a subset of learners and worth being honest about. The other limitation is scope, and it is deliberate. You will finish this book able to program and knowing nothing about how software actually gets built.
There is no packaging, no virtual environments, no version control, no project structure, no libraries beyond the standard ones. There is essentially no data work, which matters given that most people learning Python now are learning it to do data or AI work. Think Python is a foundation and it ends where the foundation ends, so you will need a second resource immediately afterwards. My usual suggestion is Automate the Boring Stuff if you want practical scripting, or a data oriented course if that is the goal.
The exercises are good and there is no grading, which is the standard trade with free books. Downey provides solutions, and the honest advice is to fight with an exercise for considerably longer than feels comfortable before opening them, because the struggle is where the learning is. Nothing in this format enforces that for you. My 4.6 puts this near the top of the free beginner material.
It costs nothing, it teaches the right things in the right order, it has been revised thoughtfully rather than reprinted, and it treats the reader as capable of thinking. The deductions are for the dryness and the narrow scope, neither of which is really a flaw so much as a decision about what kind of book this is.