On programming, kids, and game development

As many parents of boys can tell you, the dream careers of “Fireman” and “Astronaut” have long since been supplanted by “Video game programmer” (and “Lego designer”, but that’s another article…). Pretty regularly I hear from other parents that their son has an aspiration to learn programming so that he can make video games, and my own boys are no exception. This isn’t an entirely bad thing.

Kids want to make games because they understand games, and for many of them games are the most compelling thing they do on a computer. It’s not a bad way to get started in computer programming; frankly, anything that motivates you to write code is a good way to get started in programming. If that thing is games, so be it; if it’s a loan amortization calculator, that works too. Far be it from me to discourage any aspiring programmer from coding whatever gets his or her brain ticking.

Even so, there are three morsels of food-for-thought that young people and their encouraging parents should chew on when a child sets his (or her) sights on a career in video game design.

Modern game development is much more than programming

When I was kid hacking BASIC programs on my TI99/4a, it only took around 20 lines of code to make something that started to look like the games we played on the TI. Graphics were just primitive monochromatic 8×8 bitmaps; sounds were just electronic bleeps and blops; programs were single-threaded procedural affairs with primitive logic.

Modern games are mind-bogglingly complex by comparison. True, a kid can load up Scratch and bang together something that probably resembles the games on Mom’s iPhone; but if your child is like any of mine, he’s probably envisioning creating his own version of MineCraft, Wii sports, or something else well beyond the scope of a few father & son weekends.

It’s not just that the programming is complex, it’s that the process requires skills that go beyond just programming: graphic design, 3D modeling, sound design, animation, physics simulation, etc. The games most kids are used to playing these days aren’t made by a “lone hacker” working at home like they often were in the 80’s; they’re made by studios full of professionals talented in a variety of disciplines.

This has a few implications.

First, trying to produce a modern commercial-quality game on your own can be an overwhelming and discouraging experience. If your child has the idea (as mine often get) that he’s going to produce his own version of “insert-his-favorite-Wii/PlayStation/XBox/PC-game-here” on a Saturday afternoon with a few dozen lines of Python, he’s in for a major reality check.

Second, it may be that what your child really wants to learn is something related to game creation but not programming. Maybe creating digital art, 3D animations, or an electronic soundtrack is more interesting to him than debugging game engine code. These skills and more go into creating games, and have wider application as well.

Programming is pretty much programming

Suppose you’re a baseball fan. Suppose you also want to get into woodworking. Does it necessarily follow that you’ll enjoy making baseball bats? Probably not. I mean a baseball bat isn’t exactly the most interesting woodworking project: slap a log on a lathe, carve the shape, and apply some finish. On the other hand, bookshelves might be a lot more fun to make, even if you aren’t much into reading.

The same idea applies to programming; making games isn’t the same experience as playing games, and programming is essentially programming whether you’re developing a game engine or a human resources database. The real enjoyment of programming comes from solving logical problems, organizing a task into discrete steps, finding more elegant ways to accomplish things, and just watching something fun or useful come together from your fingertips. If you actually find enjoyment in those things, chances are you’ll find that enjoyment in creating any kind of program. True, some coding tasks can be real chores, but I’ve found that level of tedium involved in a programming project has little relation to the type of thing being created.

The point here is not to get stuck on the idea that making games is somehow “more fun” than other types of programming just because you’re making games. Programming is programming, you either like it or you don’t.

Coding isn’t just making a product

We live in an “apps” world today, where people increasingly see computers as devices to run little shrink-wrapped programs that perform very specific, predetermined tasks; unless “there’s an app for that”, then it can’t be done. It’s easy for people to get the idea that the purpose of programming is to create some kind of end product like a game, utility, or web application. I’ve known a few people (including adults) who got discouraged learning to program because they set out to create some big, ambitious application, then gave up on coding altogether when they realized it was beyond their nascent skills (see point 1 above); I’ve seen others give up because they couldn’t think of a program they wanted to write!

I realized not long ago that, by far, most of the coding I do has nothing to do with creating programs, per se. More often, I’m automating something on my computer, doing interactive analysis of data, or converting data from one format to another. Many of these tasks result in one-off scripts, or just throw-away code in an interpreter shell rather than an actual “program”.

Programming skills give one the ability to communicate with a computer on a linguistic level; a task that might otherwise require tedious, repetitious manual work (click, click, click, click…), or some obscure (and expensive) piece of specialty software, can be done quickly and efficiently with a few lines of Python, Perl, or shell script when you know how to code.

And let’s face it: going forward, we need people who can interact with a computer like this. Whether or not you decide to become a software developer or computer scientist, the ability to operate a computer at a more sophisticated level than “point and click” is valuable across a wide range of careers.

So we shouldn’t write video games?

As I said before, there’s nothing wrong with a child wanting to create games; if that motivates them to learn a bit of programming, good! Just be prepared to suggest a different outlet when attempting to recreate Skylanders becomes discouraging. There are other fun ways kids can put coding skills to use:

  • writing levels or extensions for existing games1
  • robotics2
  • microcontroller programming3
  • building an interactive web page4
  • writing software to help with schoolwork5
  • making music with code 6
  • scripting tedious computer-maintenance tasks

If you have some more ideas please share. And good luck to young programmers everywhere!

Footnotes:

1

Of course, the game needs a level editor or extension API. Minetest, an open-source MineCraft-type game, allows you to create new game elements through lua scripting. My kids have learned a lot from modifying other people’s extensions and creating their own.

2

e.g., Lego Mindstorms, if you can afford it.

3

The Arduino is a great way to introduce kids to both programming and electronics; very inexpensive, and not as difficult as you might think!

4

Check out Mozilla’s Thimble.

5

My son put his Python skills to work to make a simple Latin->English dictionary.

6

Have a look at PureData or CSound.

Leave a Reply

Your email address will not be published. Required fields are marked *