I'm a book learner. When I first learned to program, it was through books. Those books are now long gone, lost in the great purges (that time I was technically homeless for a month).
When I started to get back into programming I had very little money, so I did what everyone tells you to do, and cobbled together knowledge from online sources. A bit of stackoverflow here, a few things in the official iOS docs over there (remember, I started out wanting to make a notes app for iPhone). It was a start and it worked out pretty well for a few years. Then I wanted to get into games programming and relearn C++.
The thing is, I could've continued on the cobbling path. It's true what they say: Anything you want to learn can be found on the internet. But for me the operating word in that sentence is not "anything", but "found". You have to look for it. Find the right set of tutorials. Hope that that they don't omit crucial information, or just rehash things you've already learned. Or that you can find a written tutorial instead of a series of youtube videos. It's time consuming to learn everything from the internet. Books are a shortcut to knowledge, if you can afford them. (You could also earn a degree of some sort, I guess.)
I just finished working my way through Accelerated C++ by Andrew Koenig and Barbara E.Moo and really liked it. It took me a while (I do have a day job), but I did almost every exercise. They are very well balanced; you feel like you've accomplished something after each chapter. (I wrote a damn string class, which reminded my why no one should ever have to write a string class.) The authors guide you through the language in a way that lets you build programs right from the start. I really appreciated that approach. From page one you feel like you can make something worthwhile instead of a thing that prints out "Hello, World.", followed by a lecture on basic addition. It's definitely not a book for complete beginners, you should have some understanding of the fundamentals of programming. I can recommend it if you're coming from another language and need to get up to speed on C++. I feel more confident in the language that I started with years ago, but forgot a lot about in the intervening years. I will definitely continue with C++; I have Effective C+
- and Effective Modern C++ (both by Scott Meyers) next on my list. (I've actually had them on my shelf for a long time before I started reading Accelerated C++, because why do things in the right order?)
Of course that's only the language side of things. Games are a special kind of program, and they need a special setup. I am stubborn and want to learn basic things, so instead of picking up Unity, I went to a lower level. I looked at a few OpenGL wrappers, because OpenGL is notoriously verbose and hard to handle. Seriously, my number one tip for people wanting to start out writing their own engine it's that you don't start out at the OpenGL level. It will literally turn you off from games programming. I know it did that to me, I've been trying to get into this for over a year before I landed on SFML, which I've been using to make everything so far.
The book I used to teach myself the framework is SFML Game Development by Jan Haller, Vongelious Hansson, and Artur Moreira. First up a warning: The book is hard to read at times, because the authors are not native speakers and it shows. There is some questionable grammer, and you have to read a few paragraphs twice to parse the meaning. But once you get past the idiosyncrasies, you will find an amazing overview on how to make a simple game. It teaches you the game loop, introduces some clever abstractions and does it all in a very logical manner. This one also starts out doing real work from the start, an approach that helps keeping you interested. It never made me feel like I'm not good enough; instead, it made me feel empowered to create my own games. I would recommend this book to anyone who has a base understanding of C++, and is willing to put in the work to write a game from start to finish. I'm interested in making my own engine, so this was the perfect introduction for me. If you just want to make a game, if you have a specific idea in mind, or just want to make a few prototypes, you're probably better served with Unity, or GameMaker.