When I started to earn a stable revenue I started to buy books every month. Soon I was in the highest tier of the fidelity program of the biggest Hungarian bookselling chain, so I bought even more. I had to get rid of staff in my room to be able to store the books. Soon it was not enough and I needed a new shelf, my dad crafted one for me.
When I moved into my own flat I had much more space for books, but I started to fill up that space too.
I could read a lot those years while commuting alone, and I always had a book with me. This only changed when I started to commute with my wife, but I sometimes read on the metro the way home next to her, just to calm down. For me, reading books helps to calm down if I am stressed out. Even if it is a technical book.
Ryan Holiday says that if you want to read more, don’t think about it as an activity. Consider it as something natural. Like eating and breathing. I completely agree with him. I find time every day to read. Nowadays I don’t commute, but before going to bed or right after getting up or during lunch I am sure that anyone can find some time.
Recently I realised that people started to ask me about books, they ask me what I read, and if we talk about any subject, I think about what books I have read about it and what I would recommend.
This gave me the idea of this blog post. If you are a junior developer and you want to make the next step in your career, you don’t only need to spend some more years in your daily job (most probably that won’t help), but you rather have to push yourself, you have to exercise and you also have to learn.
So I came with a list of 8 books that you should definitely read:
Code Complete by Steve McConnell
One of my managers suggested to read this book when I was junior and I took a good use of his advice. This book is one of the widely known must-reads of software development. It doesn’t just encourage people to continue past the code and fix approach, but it gives a lot of techniques how to write readable and maintanable code through a lot of examples. Probably I would start again with this book.
The Software Craftsman: Professionalism, Pragmatism, Pride by Sandro Mancuso
This book is very different from the previous one. It doesn’t focus on how to write good code but gives you a totally another way to look at your profession. Not at your job, at your profession. Software developers are highly educated people exercising a very difficult profession, but still many of us treat themselves as production line workers without a respect to our profession. Yes, I have used the word profession more than a handful of times in this paragraph. Many developers do not practice professionalism and do not aim for excellence (don’t mix excellence with perfectionism!). This book will teach you how to embrace a powerful mindset that will help you to achieve levels in your career you never thought of. I think this is not just a must read for any developer, but for non-technical managers too.
Clean Code: A Handbook of Agile Software Craftsmanship
A book by Uncle Bob Martin sharing how to distinguish bad code from good code and how to transform one into the other. Please, you should transform bad code to good code, not the other way around. This book has a big focus on how to format your code for maximum readability and how to put unit testing and TDD into place.
Growing Object-Oriented Software, Guided by Tests by Steve Freeman
Speaking of unit testing and TDD, this book can be the obvious next step. It guides the reader through the principles of Test Driven Object Oriented Design through the steps of building a bidding application.
The Clean Coder by Uncle Bob Martin
This book of Uncle Bob is less technical, again this book is more about the human aspects of being a professional programmer. Technical people tend to say that ah, we don’t need that, but still, we don’t just interact with machines, but mainly with people. The better we deal with people including ourselves, the faster we progress in our career.
Refactoring - Improving the Design of Existing Code by Martin Fowler
A lot - if not most - of the developers prefer to work on new greenfield projects to old code. This is partly because old code can be crappy and because they don’t know how to deal with old crappy code (old code doesn’t necessarily mean shitty code by the way!). Still, if we have a glance at our career or on daily work, we’ll spend most of our time maintaining code and hunting bugs introduced by that bastard - that bastard can be you! This book will help you how to deal with old code, how to improve it be refactoring it.
Working Effectively with Legacy Code by Michael Feathers
As I’ve just said, we spend most of our times on maintaining old code. Unfortunately, that old code will not have enough tests if any. If you are a professional and you don’t want to assist to the rot of that code base, you’ll have to learn how to actually leave the code base cleaner than you found it. This book will help you a lot in getting that knowledge. Don’t just read it once, but keep that book close to you when you work on a nasty bugfix.
The Complete Software Developer’s Career Guide by John Sonmez
For today let’s finish with a not-so-much technical book. This one is a terse 800 pages of essentials that you have to know to navigate through your career as a software developer. Should you be at whatever stage of your professional life you can find some important information in this book. In the worst case, you will think about things you already had some ideas about, but now you will actually organize that piece of an idea into knowledge. Don’t forget, as a developer just as a human being it is extremely important how you interact with others and that you can learn fast. A dense, but still an enjoyable read.
All right, if you read these 8 books in half a year or year and try to practice the information you read and turn into knowledge you will progress much faster in your career than the rest who make the majority, those who never read any books or just a few in a year.
Feel free to leave some comments about the books you’d suggest.