Skip to main content

The Core Books Every Developer Should Own

Updated 5 min readMarkdown
Part of seriesReading List

When I was stuck in the mid-level plateau, not knowing what I didn't know, I looked for reading lists. What were the books every software developer needed to read? The answer wasn't quite as clear cut as I was hoping.

Some recommendations were already dated, some focused on specific tech stacks, some were very prescriptive about ways of working, and some seemed to live in a fantasy world where compromises never existed.

Still, I managed to find some gems that I think stand the test of time. They teach the skills and knowledge that carry across tech stacks, and improve not just your code, but you as a developer. These are the core books I think every developer should own, regardless of specialisation.

This won't just be a list: for each one I'll explain why I recommend it, how best to use it, and what you can hope to take away.

Clean Code (Robert C. Martin) 1st Edition

If you've looked at any other reading lists, you've probably seen this one. I include it too, but maybe not for the reason you'd expect.

With creative writing or art, you need to know the rules before you can understand when it's right to break them. Clean Code gives you a lot of rules, and very quickly you'll find code that breaks them.

Flutter has plenty of examples. Some of its built-in widgets take 15 to 20 parameters, which goes against Clean Code's advice to keep parameter lists short. I realised that a lot of its advice is better taken as a warning sign than a hard rule. A long parameter list isn't automatically wrong, but it's a good prompt to ask whether your function or component is doing too much.

That's the real value of the book: not the rules, but the intent behind them. Every guideline exists to make code easier to read for everyone working in it.

How to use it: read it cover to cover, focusing on the why behind each guideline, then dip back in whenever you need a refresher.

Refactoring (Martin Fowler) 2nd Edition

In my last post, I talked about how much more you learn from brownfield work than from building something new. Refactoring is the book you want when you've just been dropped in an unfamiliar codebase.

For me, the biggest value was in the principles, and the "code smells". A big part of refactoring is understanding why and when to do it, understanding the risks and the pros and cons. Deciding whether a change is worth making, not just how to do it.

"Code smells" made me a better code reviewer. I often found myself looking at a piece of code, and feeling something wasn't quite right, but didn't know how to explain it. Refactoring gave me the vocabulary.

How to use it: read the first few chapters cover to cover, since that's where the principles and smells are, then use the catalogue of refactorings as a reference for the how.

Head First Design Patterns (Eric Freeman et. al) 1st Edition

I'll keep this one brief, as I've talked before about its impact on me.

The Head First series is specifically designed to make learning as easy as possible, and design patterns are worth learning early. Once you know the core patterns, you'll start recognising them in the code you read, and seeing the problems that they were designed to solve. And once you've grasped the core patterns, it becomes easier to see the more specific patterns that live in your domain.

But similarly to Clean Code, it's important to understand when forcing a pattern just adds complexity and confusion.

How to use it: read it early, then come back to a pattern when you come across it in the wild.

The Pragmatic Programmer (David Thomas & Andrew Hunt) 20th Anniversary Edition

By the time I read The Pragmatic Programmer, I'd already learned a lot of its lessons the hard way. But having my approach and attitude validated gave me the confidence to voice my opinions, and stick to my guns when it mattered.

I'd already learned that the perfect code doesn't exist, that compromises and technical debt are a normal part of being a developer. The philosophy section taught me to recognise when something is good enough, about taking responsibility for your code, and leaving things better than you found them.

It's less about following guidelines and more about how to think like an engineer in practice.

How to use it: read it cover to cover, then revisit it every few years. It lands differently when you've lived the lessons rather than just read about them.

Code Complete (Steve McConnell) 2nd Edition

If there's only one book on your shelf, it should be this one. Every topic you can think of is covered, from defining the problem to testing the solution.

For me, one of the most valuable parts was the section on debugging. It was never taught in my degree course, and it goes further than the debugging section in The Pragmatic Programmer. It isn't about specific tools, it's about the approach, the thinking: how to narrow down a problem, form a theory, confirm it, and fix the issue without creating new bugs along the way.

How to use it: keep it nearby and dip in by topic when you need it.

Each of these books changed something about how I work, and I hope you get as much value from them as I have. These are just my core picks. If you're looking to specialise, there's still lots of valuable reading material. Want to learn about UI/UX, soft skills? Stay tuned.

What would you add to this list? Any hidden gems I've missed?

About the author

  • I'm a senior frontend and mobile developer with a decade of experience building things that work - and occasionally fixing things that don't.

No comments yet. Be the first to comment.

Reading List

Part 1 of 1

The books I keep coming back to, grouped by theme. For each one, I explain why I recommend it, how best to use it, and what you can hope to take away. Starting with the core books every developer should own, with more themes to follow.