· book recs · 6 min read
Tech Books you have to read, to be a better Software Engineer
Nobody becomes great overnight, it takes years to gain the knowledge and experience to be at the top in your field. These books would help you get there faster.
There is no other profession where continuous learning is part of your day-to-day job. As Software Engineers, we are expected to read, experiment with new technologies, and generally try to accumulate as much knowledge as possible.
Here are some of the best tech books I read recently that I believe will make everyone a better Software Engineer:
- System Design Interview — An Insider’s Guide
- Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People
- The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change
- Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy
- Algorithms to Live By: The Computer Science of Human Decisions
- System Design Interview — An Insider’s Guide
System Design Interview Book
System Design Interview — An Insider’s Guide by Alex Xu sells itself as a book you should use to prepare for interviews, but it is so much more than that.
Each chapter from the book is a high-level system design challenge, like how to build a Facebook News Feed or Youtube, etc, and it tells you what questions to ask and how to think about the problem.
This book threads the line between expert and novice. He explains a lot of things really really well, and if you are a beginner to them, you can learn a lot of new concepts.
The book also briefly mentions complex topics and then glosses over them which is to be expected for a book preparing you for interviews.
I really loved the chapter about rate limiters and different ways you can build them, but also on how to accomplish consistent hashing.
While the book focuses on System Design Challenges, high-level implementation, and how to deep dive into your solution, it also teaches a lot of basic concepts you need to know in today’s Distributed System World.
While the book itself is an oversimplification of how the actual System does work, it gives you a basic view of what you need to learn and what concepts you need to deep dive into to be a better Software Engineer.
Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People
Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People by Aditya Y. Bhargava is a really good book into basic Computer Science information.
The book does not go in-depth about algorithms or try to teach you how they work, so if you are already a Software Engineer, the concepts in this book are not going to feel new to you, but what this book gives you with its illustrations is a way to understand these algorithms in a different way that you were though in a typical CS classroom.
By reading this book, you can learn how to explain divide and conquer, graph-based solutions, greedy algorithms, and dynamic programming to an outside audience, like product managers or Junior engineers.
And if you do not know these concepts, maybe you studied at a Bootcamp or are a self-thought Programmer, it’s a very good way to get into the wonderful world of Algorithms.
Although I recommend as a follow-up reading, the holy grail book: Algorithms by Robert Sedgewick, Kevin Wayne
In conclusion, I think this book is an amazing introduction to the world of algorithms but also a good opportunity for Senior Engineers to develop an understanding that can be passed along to their mentees.
The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change
The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change by Camille Fournier is more than the title says.
The book talks about the different paths that a Software Engineer can take, either by focusing on the technical side and advancing toward a Staff / Principal Engineering role or to take the people route and become an Engineering Manager.
I personally believe you have a third option of becoming a Developer Advocate, Speaker or Content Creator.
More importantly, it highlights the parts that you have to take advantage of before you make your career decision. Like mentoring junior engineers or understanding what your own manager has to go through.
If you are early in your career, for sure you would find this book incredibly useful, as it walks you through from the individual contributor role all the way up to the CTO role. It gives you a birds-eye view of the entire process and helps you avoid classic mistakes in the Tech Industry.
As a follow-up read, I also recommend The Staff Engineer’s Path: A Guide For Individual Contributors Navigating Growth and Change by Tanya Reilly which covers the more technical landscape that you have to navigate for this career choice.
Learning Domain-Driven Design
Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy by Vladik Khononov is not like the other books on this list.
It is a tech-heavy book that focuses on team management but also implementation details. The book would teach you how to break down your domains based on the importance of the domain: Core, Support, or Generic.
How to apply architecture practices to keep your domain bounded, and more importantly how to communicate effectively with other domains owned by different teams.
The book contains a lot of examples of how to implement these patterns, and when it’s critical you use them.
There are also a lot of mistakes that were made by the author and directions on how to avoid these mistakes. It goes into detail about different testing practices and how to conduct and implement an Event Sourcing Practice.
While the book’s audience is more backend oriented, personally I felt that I, a Frontend Engineer, learned a lot. Especially about Event Driven communication or how to implement a Saga Pattern.
But my absolute favorite moment was when the author responded to one of my tweets and answered a couple of my questions.
Algorithms to Live By: The Computer Science of Human Decisions
by Brian Christian and Tom Griffiths was published in 2016, and I am ashamed to have heard about it just this year.
This book is life-changing and I cannot recommend it enough. It is also recommended by my friend, Fotis Adamakis, in his article. He is the person who gifted me this book and I am forever thankful.
The book highlights how algorithms can positively influence our lives and help us make better decisions based on facts and data.
My biggest takeaway was to apply the Shortest Process Time to my tasks:
Say you have two projects, one takes 4 days for Client A and one takes 1 day for Client B.
If you do the big project first and the small one second the total waiting time for your clients is 9 days, Client A waits 4 days for his project, and Client B waits 4 days until you pick up his project and 1 day for it to finish.
Doing it in reverse, the total waiting time for your clients is 6 days. Optimizing for your client’s happiness while for you it is still one week of work will steadily improve your portfolio of clients.