Preparing for a Computer Science Degree (Part 2): Should I Learn C++?

This is part two of the series How to Prepare for a CS Degree.

Introduction

As an adviser to prospective and accepted students, I often get a questions about how a high school student can best prepare for a college education in Computer Science, Software Engineering, or related programming degree.

Today’s question is:

Should I learn C++ before getting to college?

Question

Dear Mr. Pile,

Would you be able to recommend a book for my 9th grade [son/daughter] on game programming in C++? I thank you so very much in advance.

Cheers,
[Parent’s Name]

My Answer

Dear [Parent’s Name],

Are you sure that its “Programming in C++” that you’re looking for? That is not the advice I would give to most students wanting to learn game development on their own, especially while still in high school.

There are a number of reasons:

  • C++ is a complicated and nuanced programming language. It take a lot of work to get anything that looks like a game and can be quite frustrating. C++ is the longest path to game development. It requires significant knowledge in a variety of areas beyond just programming.
  • While C++ is a very powerful programming language, that power makes it very easy to make a mess of things. It’s like giving someone who is just learning to drive the keys to an 18 wheeler. If your goal is to move a few boxes across town, then you’re better off starting with a minivan.
  • My experience has been that those college freshman who arrive at college and are self-taught C++ have to spend just as much time “unlearning” bad habits as those who come in with no knowledge of C++

What would I suggest instead? The first question I would have is what are your [son/daughter]’s goals? Do they just want to try their hand at making games? Do they have any experience either programming or making games? Do they know for sure they wants to be a programmer? Is there a particular type of game that they want to make?

There are great tools for making games that do a lot of the basic programming work for you. These game engines include GameMaker, Construct2, Unity3D, Cocos2D, and many others. Many of the games on the market today use these game engines.

There are also great programming languages designed for learning to program. These include Python, Java, HTML5/JavaScript, C#, Processing, and Ruby. Any of these languages allow budding programmers to learn the concepts of programming without the frustrations of C++, and without picking up bad habits. In addition, these are all powerful languages that are used in various game and non-game industries, making the process of learning any of these a worthwhile endeavor.

While there are books like “Beginning C++ Game Programming” by Michael Dawson, there are none that I would actually recommend for all the reasons stated above. It’s something that we teach in college, but it takes 2 years before the students are making the same kind of games that can be created in 2 weeks using a game engine.

On the other hand, if you’re sure you’re looking for “C++ Game Programming”, then I’d suggest the following series of books:

C++ How To Program (9th Edition) by Deitel
Game Engine Architecture by Jason Gregory
Real-time Rendering by Akenine-Moller, Haines, and Hoffman

These are fairly dense, but they do a great job of introducing the most important topics and skills.

Leave a Reply