Books still have one clear advantage over videos and tutorials: they are edited. A good technical book has a deliberate order, and someone has thought hard about what comes before what.
Match the book to your stage#
Absolute beginner#
Look for books that teach one language from zero with lots of small exercises. Signs of a good one: exercises at the end of every chapter, a project built up across the book, and plain language rather than formal definitions.
Check the publication date. Anything using Python 2 syntax (print "hello" without brackets) or pre-2015 JavaScript is out of date enough to confuse you.
Past the basics#
Once you can build small things, the most useful category is books about writing code that other people can read — naming, structure, and when to break things up. This is where most self-taught programmers have the biggest gap, and it is a gap that shows immediately in a code review.
Understanding how computers work#
Books on how a computer actually executes your code, how memory works, and how networks move data. Not urgent, and genuinely worth reading once the day-to-day is comfortable — they turn a lot of “magic” into mechanism.
Practical reference#
Cookbook-style books full of “how do I do X” recipes. Best bought after you have a project, so you have something to look things up for.
How to choose one#
- Read a sample chapter. Every retailer offers one. If the writing does not suit you in ten pages, it will not suit you in four hundred.
- Check the date and the version. Programming books age quickly.
- Look for exercises. A book you only read teaches much less than a book you work through.
- Prefer one book at a time. Three half-read books is a common and unproductive state.
Free alternatives worth knowing about#
Plenty of high-quality programming books are available free and legally from their authors or publishers, and official language documentation is often better written than paid material. There is no need to spend money to learn to code — see the ordered free paths in start here.
Free pathFollow the free learning path instead