I was asked this recently in private mail by someone heading off to University / College. For people choosing between a Computer Science/Software Engineering course vs. a Game Design / Game Development course, I’d said:
If you love games, you’ll do both anyway; one you’ll learn in lectures, the other you’ll self-teach. Which will you find easier to self-teach (given no-one is prodding you), and which will you need the extra benefit of having a formal course/teaching/teachers? (usually: people find it easier to self-teach “designing and making my own game experiments”. Usually, people find formal Computer Science / Maths is ‘hard’, and they need the help of a formal course)
Gross generalization: Most game-developers in the indie community are programmers; most of them are programmer-centric when looking at the world. I’m a programmer, but I’ve done approx 40% of my career in project-management and studio management (and even a tiny bit of publishing) over the years.
There’s one interesting point I want to clarify a little: By “indie community” I mean “focussing on the places filled with people who actually ship games”. Most game designers who want to make their own stuff have to learn programming, even if they’re 100% non-programmers, since it’s the only way to get “your” vision launched. Even the ones that started-off as pure artists often end up being highly technical (whether they admit that to themselves or not).
So … this is not a popular view, but I think it’s more accurate than most: by the time you finish a 3-4 year course starting “today” … C++ won’t be the game-dev language people care about. Already, for entry-level jobs most studios are more interested in “how good are you at Unity? How good’s your C#?”. That trend will only continue/increase.
More importantly, you eventually need to decide to focus on “making cool games that are uniquely fun” or “solving interesting programming problems using clever source code”.
… ideally: you should have an idea in the shower this morning, write some sketches during this morning’s University lectures, and while eating lunch at your laptop have a prototype running by 2pm. Send to friends this afternoon, and by the time you go to bed, you’ve added 3 more features and pushed an update to your friends, who are already commenting on it by email.
If you prefer the latter: you need to understand programming more deeply, and what matters about the language is probably “how much control does it give you over how the code is executed?” (for which the ultimate option is “assembler”, but the second-best is “C++” and C++ is cross-platform where assembler is not)
… ideally: you should be thinking up complex tech that has the “WOW!” factor when you make a tech-demo to show it off. You spend a week thinking around a difficult problem – or something that’s not a problem, but is “too slow to do on today’s hardware” (for instance). A while later, you feel you have a good plan for tackling it, and spend a weekend making an experiment. The weekend after, you take the bits that worked, refactor them, re-write the bits that didn’t, use some more programming tricks, optimize bits, try a new algorithm. A week after that, you write a tech-demo that shows visually/aurally/performance/networking (client and server interacting) the “thing that was impossible or too slow for people to try doing before”. You push it out to HackerNews and get a lot of coders tearing it to pieces (in a positive way) trying to understand what you did and how, and trying to reproduce it.