As you might read in my recent post - coding without Google - I’ve started learning to program mostly from books. In the beginning, I read them from cover to cover (assuming I could understand them!) and recreated examples. It was an excellent time! In the post, I’d like to share my list of important books that taught me the base of my knowledge. Maybe you’ve shared similar titles along your learning path?
1. C++ in 24h
I’ve seen that book many times on a shelf of my local bookstore. One day, after a discussion with my friends, we’ve bought the book. One book for three young kids. I didn’t know when I got my turn, but in the end, the book was mine and my friends sold theirs ‘shares’ to me.
It was fascinating! I could type some basic commands (in C++ of course!), create function and classes, and output messages to the console. Similar things probably could be written about any first programming book. Still, C++ in 24h was written in such way that a newbie wasn’t thrown away, could understand most of the things, and in the end progress with the learning.
Each lesson was done very well, and step-by-step one could get most of the basic concepts of C++. In chapter 19 (in the 19th hour to be correct) there was a topic of linked lists. The described problem was not only a C++ thing, but it was also an area of data structures and algorithms. The chapter was hard to get through. In the end, I’ve managed to understand lists, and I was proud of myself!
I’ve seen that the book is a bit outdated at the moment. The 5th edition is from 2011 and doesn’t cover C++11/14. Maybe a new version is being written along the way. If that appears, I would highly recommend it to any C++ beginner.
And you know what?
As it turns out of those three kids, that bought the book, two of them become programmers :)
2. Algorithms in C++
This time, I bought that book on my own! Typical books cost between 30..40 polish zloty. But Algorithms was priced double - something between 80…90zł. It was a lot of money! I spent a lot of time thinking if that book is really for me, maybe too advanced… in the end, I bought it. And I am glad I did that!
To be honest, I was frightened that I couldn’t understand the first introductory chapter. As an example, they used ‘Connectivity’ and Union-Find algorithm. But since the second chapter things get much better. Slowly I got the idea of how the core algorithms work.
I like that the code was not in pseudo-code as in Cormen, but in C++. You could copy and paste it and see how it executes. It was vital for learning.
Chapter by chapter I got a basic understanding of algorithms and data structures. I often return to that book. I am also thinking about buying the newest edition… but unfortunately, it was rewritten into Java.
3. OpenGL Superbible(s)
Cover From openglsuperbible.com/previous-editions/
You can read the review of the latest (7th) edition of the book on my blog here.
After creating some basic text/console programs, I moved to graphics programming. This choice was heavily inspired by Borland BGI Graphics and Allegro Library. I knew that OpenGL was something big at that time (and still is!) so I thought it would be a good way to improve my graphics knowledge.
Probably, I don’t have to mention that the book is excellent. Even the first version was! As with most books at that time there was a CD attached so you could see all the examples running! I wonder if I still have that CD around. Over the years, with the new editions, the CD was removed from the book, the examples were moved to site download option, and the quality of the book content got better and better.
I followed Superbible series. Today I got three books: 1st, 4th, and the 7th editions. Each version quickly caught the current version of OpenGL. You could see how OpenGL advances: from fixed pipeline to simple vertex/fragment shaders and now to fully ‘GPU side’ programming style. Maybe I wouldn’t lie if I say that the book is the standard book for learning OpenGL. There is OpenGL Programming Guide, but most of the people like Suberbible as I can imagine.
4. Game Programming Gems series
Site of the editor - Mark DeLoura - Gems series
Game programming gems was another step for me. I knew something about the graphics, but now I got interested in game engines. I could write a graphics demo, but I was curious how to make a superb graphics engine. Gems were a series of lots of related articles. I liked that. You could pick one topic and just focus on it. They were grouped in logical order, subsystems.
In some of my examples I’ve used “The Parallel Transport Frame” described in the second volume of the series. With that technique I could extrude 2d shapes along splines. That was a cool way of doing any kind of ropes or worms. Maybe that would be a good topic for a separate post.
I own four volumes: 1st, 2nd, 3rd, and 6th.
5. Tricks of the 3D Game Programming Gurus
This book was highly addictive! I bought it with the vision of creating my software renderer and engine from scratch. Andrea LaMothe created a fantastic book where everything was described from little details. When I wrote code using OpenGL I was a bit like the level above. I could make my triangle have a texture, but I wasn’t aware of the code behind texturing itself. Or even simpler things: how to render wireframe cube? Very easy in OpenGL, but do you know what’s code behind such scene?
To be honest, I wasn’t persistent enough to finish all the book. I followed like half of it. So my ‘amazing’ engine could render wireframe objects only. Then I stopped with the implementation and moved into OpenGL again (there was also many things to learn at that ‘higher’ level). Still, I tried to read the book and understand ideas behind texturing, sampling, clipping and other covered effects.
Some of the screenshots from the samples (found here)
What’s great about this book is that it’s still valid! Of course our rendering engines are very very powerful, still with the book you can learn how to code triple buffering or mipmaps. That knowledge will be relevant for many years.
6. Code Complete
Code Complete: A Practical Handbook of Software Construction, Second Edition, by Steve McConnell
At the time I bought Code Complete I was in studies/collage (3rd or fourth year), so I needed something valuable that tells me what the software development is. The book is highly respected in the IT world, so I knew I need it.
It covers lots of different aspects of making great software. It describes a good coding style, how to debug apps and even how to apply agile and improve as a programmer. Lots of areas but very well structured.
Over the years I returned to the book many times. There’s always something you can learn or recall.
7. Passionate Programmer
Programming was fun; I got my first professional experience. But I’ve noticed there’s another side: how to be a great programmer! It’s not only coding but also your attitude towards tasks and people. The book showed in an inspiring way what are the possibilities to improve yourself.
Ream my review here on my blog.
Other worth mentioning:
I’ve chosen only seven books, but I couldn’t resist mentioning some of other titles.
More OpenGL Programming
More OpenGL Game Programming, David Astle editor.
The book was a step further after reading OpenGL Superbible and other beginner-level books. It gives a lot of interesting articles that are worth implementing and are a must for advanced graphics programming.
ShaderX6: Advanced Rendering Techniques, edited by Wolfgang Engel
Thanks to probably the 6th volume of the series I was able to finish my master’s thesis! There was a separate section on shadows, so I used it for my work then.
The series is continued, but with a different name: GPU Pro series.
John Sonmez is doing a great job in the field of inspiring people (especially programmers) how to be better. His Soft Skills book touches a lot of aspects of development career, motivation, learning, blogging. It’s a good addon to Passionate Programmer book. I’ve done a review for the book if you’re interested.
Sorry for another nostalgic post :) The list was compiled for a lot of weeks, so finally I was able to release it. Of course, I didn’t include all the maths, physics, logic book that were required on studies. I listed only popular IT books.
What are your favorite books? What book was the first that taught you how to code?