This is a short list of 4 programming textbooks, that really shaped me, as I entered into the software developing world. This not a list of books I'm urging anyone to read, they are just books that really taught me a lot, or got my mind churning. They are ordered in the chronological order in which I read them. You can find most of these books on Amazon. Or Thriftbooks if you're willing to buy an older edition.
1. Beginning C++ Through Game Programming - Michael Dawson
This book is special to me, because it was the first programming textbook, that I ever read cover to cover. I had watched Youtube videos, on C++. I understood the syntax, and I knew what pointers were. I had heard of Object Oriented Programming, and had read the definitions of polymorphism and inheritance. But, this book was my first foray into actually using these things. This book walks you through the process of building multiple terminal(console) based video games, ranging from tic-tac-toe, to blackjack. Obviously, the book uses C++, and in my opinion, it did a good job of teaching things, like how to use pointers, and how to use the best parts of C++'s standard library. I had a lot of fun reading this book when I was 18, and even though it's been four years since I read it, I will still flip through my copy, when I need a refresher on C++ syntax. The Kool-aid stains on the side of my copy just add character.
There have been four editions of this book, I own the second. You can find copies of older editions, for just a few dollars, and I think it's worth owning, if you are new to programming or C++. I actually would recommend people give this one a try.
2. Android Game Programming by Example - John Horton
Oh look, another game programming book. I read this book nearly a year after the previous entry in this list. Unfortunately, it probably isn't as good as the Dawson's book. But, I enjoyed reading it at the time. As the title suggests, it teaches how to write video games for Android devices. If you thought I had fun making terminal based games with C++, you have no idea how much fun I had making graphical games, that ran on my phone. Plus, I got to use Java, which was my favorite programming language for several years.(It still would be, if Kotlin wasn't around).
I must admit though, that while I enjoyed this book, I did not finish it. This book walks you through creating 3 video games, I only made the first 2. The reason I didn't finish this book, is partially due to one if it's strengths, and weaknesses. The book was a little too low level for me. It teaches how to create games, using Android's native canvas library. This was ok for a game like Flappy Bird, but gets a little tedious for other projects. I was about halfway through this book, when I discovered LibGDX, a game framework, that lets you make desktop, web, and mobile games, from one Java codebase. I finished making the second game this book teaches, and then stopped reading it. LibGDX was just way more appealing to me.
I'm still happy I read this book though. I learned a lot about how a game is structured from this book. I learned about how a game loop works, and how to think about things like render ordering. Also, at the time I remember really liking Horton's writing. I hadn't read a lot of textbooks at the time though, so it's possible his writing isn't as good as I remember it being. This is a Packt book, and a lot of them aren't masterpieces. That also means, if you want to checkout this book, you should buy it on Packt, not Amazon. Here is a link, https://www.packtpub.com/game-development/android-game-programming-example
I actually got this book from a daily freebie on Packt several years ago, so maybe you'll get it that way if you're lucky. I don't know if I can recommend this book though. I haven't read it in awhile, and I'm not sure how well it aged. I just know I have good memories reading it.
3. Clean Code - Uncle Bob Martin
Read this book. Just do it. You know you have to.
I actually feel like I'm cheating a little bit by putting this book on any list, because everyone has read it, and everyone talks about. But, if you haven't read it. Read it. It's important. I recently found a piece of advice online, saying you don't even need to read it cover to cover. You can just skim through it, and read the important chapters. Which, I will take this opportunity to admit, I kind of did.
I haven't read this whole book. Yet. I read about 9 chapters, page by page, and then stopped. I've gone back to it for reference from time to time though, and I have read a few of the chapters I skipped on my first read through.
I actually find this to be an entertaining read though. It was also rather helpful to me. I am basically a 100% self taught developer, and that led to some frustrations about where I was skill-wise, in this field. I was writing code everyday, and I was making things happen. I had games with characters running around on screen, and android apps I could actually use on my phone. But, I didn't know if I was good at what I was doing. Clean Code was like a mentor in textbook form. Clean Code is a book about best practices, and as I was reading these best practices, I would think about the way coded, and read the code I wrote, and the book made me realize, some of my code was pretty good. And a lot of it, was, not. Man, I wrote(and still occasionally write) some bad code. But, the book also helped me fix a lot of it. This was a huge confidence booster. I recommend this book.
Go read it.
4. Data Structures & Algorithms In Java - Robert Lafore
This is the book I read most recently. I completed the Google Foobar challenge in 2017, and then ended up interviewing with them in 2018. This is the first book I read, while I was studying for my interviews. Again, the title of this book is self explanatory(as they all have been, textbooks are weird like that), but to spell it out, this book is about everything from arrays to weighted graphs. This book served as my first formal reference, on some of the less commonly used data structures, like linked lists, and red-black trees. It also helped solidify my knowledge of things like stacks and hash tables. It also goes over things like recursion, and algorithms. Quite a few algorithms, all kinds of sorting algorithms, and a good explanation of Dijsktra's algorithm.
I found the pacing of this book to be pretty good, and I enjoyed reading it. I also picked up a book with the same title, by Michael T. Goodrich, and Roberto Tamassia, and I much preferred the one on this list.
This is another book, that I'm not sure if I can recommend or not though. I learned a lot from it. But, it's also old. It was released in 1998(I was one year old for most of '98). I believe better books have been released since. I also don't know if this is a comprehensive enough text. While studying for Google, I supplemented this book with Algorithms in Java by Robert Sedgewick, and 'The Algorithm Design Manual' by Steve Skiena. That being said, I think this book is a good primer in it's titular areas, and you can pick it up for a few bucks on thriftbooks, so you kind of can't go wrong.
And that's my list. If I could only recommend you read one of these books, it'd be Clean Code, because, well, obviously. Just read Clean Code.