Below, you will find a list of some of my most favorite books. I used two criterion for including a book in this list:
- I have read the entire book, cover to cover
- I enjoyed reading the book, learned a lot from it or both
Computer Science
Databases & Distributed Systems
-
Designing Data-Intensive Applications
- Martin Kleppmann
While the title suggests that you might be reading about large scale data intensive systems, this is not really the case. It is more about how databases and distributed systems work and it serves both as an excellent explanation as well as a reference. I recommend this if you have been building enterprise applications and have a few years of experience under your belt. Excellent book.
Artificial Intelligence (AI)
-
Grokking Deep Learning
- Andrew W. Trask
An amazing book if you want to start your journey in the world of AI, machine learning and neural networks. Uses Python to build everything from scratch.
Algorithms & Data Structures
-
Cracking the Coding Interview
- Gayle Mcdowell
Absolute classic and still relevant today.
Development & Operations (DevOps)
-
Release It, 2nd Edition
- Michael T. Nygard
Great book about overall software development lifecycle and looking at it from the lens of operations.
Software Architecture
-
Domain Driven Design Made Functional
- Scott Wlaschin
Teaches DDD using F# and functional programming. While the focus is on how to build systems and model them using a functional language, it still serves as a great introduction to DDD.
-
Clean Code
- Robert C. Martin
It is a good read, especially early on in your career. It helps one understand how to structure code for readability and maintainability. Later on, you will decide for your self what works for you and what doesn't.
-
Dependency Injection Principles, Practices, and Patterns
- Steven van Deursen and Mark Seemann
I read the original one by Mark Seemann (probably the first software book I ever read) and it was a great introduction to DI. I must say DI wasn't the learning "thing" that I got out of this book. It was more about how to structure your code and how to think about dependencies. It is a great book and I highly recommend it.
Mathematics
As you can see, I enjoy "reading" math books (although I read them like a novel and i don't do the exercises, highly, highly not recommended), even ones that don't or aren't relevant, yet, to software engineering! There are a few reasons for that:
- Probably a deep sense of imposter syndrome!
- Mathematics & Logic are the foundations of computer science and every other science for that matter
- Keeps the brain a bit sharp
- Zen garden of beautiful ideas
Don't let the title fool you. This is not a poetic book. It is one that tries to show you the different beautiful sides of Mathematics. Ones you probably weren't exposed to in school. It is not really teach you any concrete mathematics that you will use tomorrow, but it shows you what it is like to be a mathematician. The reason I love this book is that it takes you on a whirlwind tour in the different landscapes of mathematics. It shows how the different pieces of the puzzle fit together, and the author has an amazing talent in explaining very complex and esoteric concepts very intuitively. I wish "actual" math books were so approachable and intuitive.
This can serve as either a refresher or an introduction to the world of mathematics.
Pure Math
-
Book of Proof, 3rd Edition
- Richard Hammack
First of all, this book is free. Secondly, it is an excellent introduction to set theory, logic and proof writing. It has a ton of examples and the author explains everything intuitively.
-
A Friendly Introduction to Abstract Algebra
- Ryota Matsuura
An excellent book that introduces you to the world of Abstract Algebra. It is written in proof style but still very approachable and intuitive with lots of examples.
Group Theory
-
Visual Group Theory
- Nathan Carter
I discovered Group theory when I was studying Linear Algebra. It turned out to be the workhorse of modern mathematics and this is by far the best introduction you can have.
Linear Algebra
Linear Algebra is used everywhere. No matter what engineering or scientific discipline you plan to go through, Linear Algebra will be there, guaranteed.-
Linear Algebra, 4th Edition
- Jim Hefferon
This is a great introduction to Linear Algebra. It is free and it is written in a very intuitive way. It is a great book if you want to understand the concepts of Linear Algebra and not just memorize formulas. Professor Hefferon has a full accompanying video course, free on YouTube, that you can follow along while reading through the book. He has also provided answers for every single exercise in the book. Hands down the best course I have taken on the subject.
Probability & Statistics
-
Think Stats, 2nd Edition
- Allen B. Downey
Allen introduces a lot mathematical concepts using a computational approach with hands-on Python code, and, all of his books are free. This is a great and practical book.
Philosophy
This is a great introduction to the world of philosophy. The main areas of philosophy are covered and the author does a great job in explaining the different schools of thought and the main ideas in each. It is a great starting point if you want to dive deeper into philosophy.