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.