So you decided to learn Programming?
I know the first thing you probably did was to go to Google and search for the best programming books.
I would do the same.
But there is a problem.
There is a ton of programming books out there, covering different topics and different programming languages.
With all the options, it’s so easy to get confused and never get started.
In this article, I am going to share with you my favorite books in an attempt to help you make a decision that suits you the best.
My philosophy is simple.
First, all the books I recommend here are books that I have read myself and they are highly acclaimed by the community.
Second, I am going to keep this list as small as possible without compromising on generality.
But before we get started, I want to mention that these books are only related to the topic of Programming.
Programming is just one topic out of many in the field of Computer Science.
If you also want to view my recommended list for CS books, then check out this article.
Let’s get started.
- First: Programming Languages
- Second: Software Engineering Craft
- Third: Data Structures and Algorithms
First: Programming Languages
In this section, I will cover books that are related to fundamental programming concepts and specific programming languages.
I chose the most widely used programming languages in the industry that are NOT domain-specific.
1. Programming Concepts
Structure and Interpretation of Computer Programs (also known in the industry as SICP) is a classical book that teaches you the fundamentals of Programming.
This textbook was taught as an introductory course to Programming at MIT.
And even though this book uses Scheme as the programming language of choice to illustrate programming concepts, it is not a book about the Scheme programming language.
You should rather think of this book as a generic programming book that happens to use Scheme to illustrate some programming concepts.
Having this mindset is crucial if you want to get the best out of this book.
With that said, should you start out your programming learning journey with this book?
I personally prefer you don’t start with SICP, I suggest you learn one or two concrete programming languages first before you jump into this book.
But don’t get me wrong, this book is a must-read.
One more thing before I forget, all the MIT video lectures (from 1986) are available online, for free, by the authors of the book themselves!
I went through most of them while I was studying SICP and they were absolutely amazing.
Python is a widely-used programming language and I don’t see it slowing down any time soon.
If anything, it is going to grow even bigger.
Python is also one of the easiest languages to start with.
Based on your level, here is a list of Python books that I recommend.
Python Crash Course
If you are an absolute beginner, I recommend you give Python Crash Course a try.
The reason why I recommend this book is because it is project-based.
In other words, it is not boring :). For absolute beginners, the last thing you want to start with is a dry book that is not interesting enough for you to keep going.
The downside of this book is that it not comprehensive. You will get up and running fast, but it won’t teach you everything there is about Python that you need to learn.
Unlike Python Crash Course, Learning Python is a very comprehensive book that goes into much more detail about the Python programming language.
It doesn’t take the project-based approach that Python Crash Course takes as it adopts a more traditional way of teaching the language.
If you are a beginner, you won’t go wrong with getting both books and going through both of them.
Fluent Python: this one is definitely not for the faint-hearted.
After you become very comfortable in your Python programming skills, and you want to step up your game and take your skills to the next level, this book is the ultimate book for advanced Python programmers. Period.
Java is another language that is heavily used in the industry.
Case in point: Hadoop, Spark, Kafka, and ElasticSearch are all widely used distributed systems that are written entirely in Java.
I personally learned Java from the famous Core series.
Core Java is an excellent book about Java fundamentals.
It teaches you the basics of the Java Programming Language with lots of illustrating examples and code samples.
Core Java Advanced
Core Java Advanced is a complimentary book to the previous one.
It covers some advanced topics that are not covered in Core Java.
Effective Java is a must-have book for every Java programmer.
This book is not about the ins of the language itself but rather about best practices for writing professional high-quality code.
The book offers roughly 80 best practices to follow for making your code cleaner, easier to read, and more idiomatic.
I love C++
Mainly because this was the first programming language that I learned in college 🙂
However, it is very uncommon these days for college students to start programming with C++.
The reason for that is C++ is a, relatively, harder programming language to learn compared to, say, Python or Java.
And in fact, I agree that it’s a much better strategy to start with Python or Java.
However, C++ is still widely used and very important especially if you’re interested in low-level kernel programming, or programming embedded systems.
Case in point: Windows, Mac OS, Linux are all written in C++ (and C)
As for my favorite book, I really like C++ Primer. It is well written and fairly comprehensive.
Go is the new coolest kid in town.
The language was completely designed by Google and is growing at a very fast pace.
It’s already being used in popular open-source projects.
Case in point: Kubernetes, Docker, and Consul are all written in Go.
There aren’t many books out there about go, but the one I own and recommend is The Go Programming Language by Donavan and Kernighan.
Second: Software Engineering Craft
The books listed in this section are somewhat different.
They are not about learning a specific programming language.
They are actually geared more towards teaching the craft and art of software engineering.
In other words, these books cover topics that you would only come across through your professional and industrial experience.
So the topics covered here are not typically taught in school and could save you years of learning through trial and error.
Let’s go through this list of my favorite books one by one and see what topics they cover and why they are important.
1. Code Complete
Code Complete is not something you read in one sitting.
This book is a comprehensive guide you’ll keep coming back to.
In my opinion, the best time to read this book is before you start your first internship or job.
For example, the book covers everything from laying the foundation for software development, creating and improving high-quality software, to potential issues that may arise during software development and how to avoid them.
2. The Pragmatic Programmer
The Pragmatic Programmer is one of the sacred books for programmers.
While the book brushes on a lot of concepts, it digs deep into timeless software development practices that most programmers (should) use.
A no-nonsense piece that appeals to everyone’s common sense, it’s impressive in its subtle guilt-inducing, applicable solutions, and advice.
Before you know it, you’ll be a converted believer and a pragmatic programmer.
3. Clean Code
Clean Code offers an easily understandable insight into software development and code cleaning.
This book provides valuable information and step-by-step explanations of writing, cleaning, and refactoring code.
It not only explains why writing clean code is vital, but it also gives plenty of practical examples.
Shunning the theory, code cleaning shows you how to solve real issues that many programmers have stumbled upon before you.
So save yourself years of trial and error, and learn from other programmers’ mistakes.
Third: Data Structures and Algorithms
A wise man once said:
To be a good programmer, you need to either:
- Code professionally for 10 years
- Code professionally for 2 years and learn algorithms
I am honestly having a hard time remembering who exactly said this quote so if you know, please leave a comment below with the name of the person so I can credit him 🙂
These words are very true though. Understanding data structures and algorithms at a deeper level is what differentiates solid programmers from average joe coders.
1. Introduction to Algorithms (CLRS)
When it comes to algorithms and data structures, there isn’t really much debate about the best book that covers the subject.
It is unequivocally Introduction to Algorithms.
If you want to sound cool and use the lingo of the craft, you can call it CLRS.
This abbreviation is commonly used and it refers to the authors of the book (Cormen, Leiserson, Rivest, and Stein).
2. Data structure and Algorithms in Java
CLRS is written in a language-neutral way. Most of the code in the book is mostly pseudo-code.
If you want to learn data structures and algorithms in Java, then I recommend you also get Data structure and Algorithms in Java.
Even though I don’t really do much Java these days, I have this book and it was fun to read and understand.
I’d still say this book is a good companion to CLRS but it is not, by any means, meant to be a replacement.
- The Python Learning Path (From Beginner to Mastery)
- Learn Computer Science (From Zero to Hero)
- Coding Interview Preparation Guide
- The Programmer’s Guide to Stock Market Investing
- How to Start Your Programming Blog?
Are you Beginning your Programming Career?
I provide my best content for beginners in the newsletter.
- Python tips for beginners, intermediate, and advanced levels.
- CS Career tips and advice.
- Special discounts on my premium courses when they launch.
And so much more…