Recommend an intro programming language for 11 year old to make games
September 18, 2020 8:25 AM   Subscribe

What's the language that my son should be learning now that is robust, can be learned by an 11 year old, will grow with him, can be picked up relatively easily and, importantly, that he can make games with, specifically 3D ones?

My son wants to design and make games. He's 11, and has learned Scratch since he was 5 or something, has dabbled in other things, and is currently suffering through learning the Lua scripting language in Roblox. I feel like Lua in Roblox isn't quite a real language, because it's really just scripting on top of an engine, and he's not doing ground up programming. The syntax is obfuscated and it's seems to be mostly modifying internal variables and functions within the Roblox engine. He's super frustrated trying to learn it.

He wants to make videogames when he grows up. He's wanted to do this since he was 3, and is serious about it. He's primarily interested in design, but wants to learn how to make a game do what's in his mind. In other words, he's used Mario Maker, Roblox, Minecraft, etc., to design worlds for years and years and years, but really wants to get under the hood to program. And Lua seems almost counter productive in it's syntax and how it's functioning in Roblox.

What language would be best? He really ultimately wants to make 3D games. But I also want to make sure that he really understands programming, systematically. When I was a kid, I learned BASIC, which really helped me understand how to think like a programmer (even with the limitations, like line numbers, goto statements, lack of object orientation, etc.).

I think it probably needs to be an actual language, and not just scripting. Should he be learning Unity or Unreal? What's the learning curve on those? How does the programming in them work?

In a perfect world, he'd like to be making things that people can actually play, not just something he's messing around with and stays on his computer.
posted by MythMaker to Computers & Internet (21 answers total) 9 users marked this as a favorite
Python is most definitely a real language, possibly with PyGame to do some of the heavy lifting.
posted by Alensin at 8:32 AM on September 18, 2020 [2 favorites]

I have no idea what 11-year-olds are capable of these days, but you can download a version of Unity that comes with tutorials on how to make a few different games. Unity is what powers a lot of 3D video games, so it's definitely a good thing to learn.
posted by jonathanhughes at 8:35 AM on September 18, 2020 [2 favorites]

I'd say Unity, Unreal, or Godot are all engines that are worth looking at. I have made a significant part of my career out of non-gaming applications of Unity, but the others are pretty similar (I just don't know them in detail).

I'm not sure how approachable any of them would be to an 11-year-old, but Unity, at least, lets you ignore many of the complexities of 3d graphics and just write code for behaviors which I think could be a benefit if he's interested in game design. The underlying 3d engine is still there and you can still get access to it (even as far as writing native plugins in C/C++ to get deep into the guts, if you want).

Python is probably a friendlier language than C#/C++, so the PyGame option may bear consideration too, but I don't think PyGame has any equivalent to Unity's visual scene editor, and I'm not sure how difficult it is to scaffold a basic 3d world, which may be a consideration depending on how frustrated he's likely to get with all the boilerplate you need before you can move things around on-screen. On the other hand, if he gets really into all the engine details, congratulations you just might have a graphics/tools programmer on your hands!
posted by Alterscape at 9:07 AM on September 18, 2020 [1 favorite]

Godot is an alternative game engine that maybe has a less steep learning curve than Unity or Unreal. I can't honestly say that I know very much about it so maybe someone else can provide more details but I've seen people talking about it positively.

It's open source with a very permissive license so anything your son ends up making with it, he'll own completely. It seems like it's main languages are C# and C++ but there are other options with, I assume, varying levels of support. Their features page says that Python is one of the scripting choices and their own scripting lanuage GDScript is Python-like.

Small download, works on all major OSes.
posted by Mister_Sleight_of_Hand at 9:09 AM on September 18, 2020 [2 favorites]

He's probably not quite ready for a modern engine like Unreal/Unity but he's close. Scripting Roblox in Lua is actually fairly similar to major parts of making "real" games. Real games (and engines like Unreal) often have semi-clunky written or visual scripting languages that are used by half-programmers to design how things will interact with each other. Lua is kind of weird, but I think the experience there will be helpful to making real games later. A 35 year-old friend of mine is currently making his livelihood writing Roblox Lua scripts. So I don't see a reason to stop working on that, unless he feels like he's bored, but it needs to be complimented with something else.

Lua/game scripting in general is very "top-down" so I would have him work with something bottom-up as well. A lot of game programming comes down to caring about details and optimizing, so something close to assembly/C is good to learn next. I might try out pico-8 next as you can absolutely make an entire game by yourself in a system like that, and the programming is a more bottom-up style. When I was 12 I wrote games in a fairly similar system (ZZT/Megazeux) and I think it prepared me well for the next steps.

After doing some fake assembly/c programming, I think he would be ready to work with real engines. I know Unreal the best and would recommend it if he really takes to lower-level programming, but he would need to learn proper C++ first. Unreal doesn't have a "middle" language like Python so everything is either in C++ or the high level visual scripting language. I haven't used Godot or Unity but I believe they're fairly similar in complexity and have several different options for scripting.
posted by JZig at 9:33 AM on September 18, 2020 [1 favorite]

Seconding something like pico-8 as a stepping stone towards Unity/Unreal. Especially as it provides a built in method for getting it out there in the world for other people to play.
posted by mrgoldenbrown at 9:43 AM on September 18, 2020 [1 favorite]

I would avoid PICO-8—it's a very limited (by design) 2D engine which uses Lua. It seems like the opposite of what you're looking for.

Unity is definitely an option. Lots of real 3D games are written in it. It might give him a similar feeling of "scripting on top of an engine", though.

This advice is incredibly out of date, but I was around that age when I went through the "NeHe" OpenGL tutorials. It was really satisfying to see graphics rendered by my own C++ code. Maybe there are similar tutorials using Direct3D (if you're on Windows) or Metal (if you're on the Mac)?
posted by panic at 10:28 AM on September 18, 2020

Microsoft MakeCode Arcade is good, but maybe a bit too simple. It can be programmed like Scratch, but also in JavaScript. Large user community, and games can be shared and even transferred to a few handheld devices like Adafruit's PyGamer.
posted by scruss at 10:35 AM on September 18, 2020

GameMaker is a pretty good game engine to work with. You can trial it for free, and there are lots of tutorials and assets both free and paid for it.

It might be good to get him a mentor, because if he's frustrated learning programming that probably means he's having trouble finding answers to his questions. Maybe get him on an age appropriate forum or IRC channel so he has people to bounce ideas off of. I learned programming by laboring alone with an Apple II, and boy would I have loved someone to show me some of the ropes.
posted by signsofrain at 10:35 AM on September 18, 2020 [2 favorites]

I can sympathize with your desire for your son to learn "ground-up" programming, but making anything even vaguely resembling what your son most likely has in mind when he thinks of a 3D game, using a ground-up approach, is a huge ask. I have been programming, on and off, for forty years and it's not something I would contemplate doing.

If making 3D games is his jam, then in 2020 that truly is best done using an engine. That's why engines exist. Engines are best thought of as domain-specific languages for 3D programming.

And Lua is a real language. Small, but tidy and feature-complete. Lua is as good a first language as any, and if that's what the engine he's currently working with uses for glue, then it's a completely reasonable thing to stick with.

It would do no harm to pick up a bit of Javascript and Python as well, to gain some insight into how the concepts learned in Lua translate into those languages. None of these languages will disappear any time soon, and nothing he learns to do in any of them will ever be a waste.

If he's currently super frustrated, your best bet is not to find him a "better" language or a "better" engine, but to get him into contact with folks who have more expertise with the platform he's currently using. Being shown the ropes by somebody more experienced has always been the fastest way to gain competence at programming, and if he's struggling on his own then that's probably what he needs right now.
posted by flabdablet at 10:55 AM on September 18, 2020 [4 favorites]

Response by poster: A couple of you suggest finding a mentor. Any suggestions where I might be able to find one?
posted by MythMaker at 11:27 AM on September 18, 2020

For a bit of variety, Swift may be of interest. The syntax is a bit like Python, but it runs faster and comes with richer, built-in support for computer graphics and game development.

It can help to walk through a short class that demonstrates a simple project. Here is a free tutorial on making a 2D Tetris-like game with Swift. Udemy has a class on this, as well.
posted by They sucked his brains out! at 11:39 AM on September 18, 2020

Professional game programmer here! It sounds like your son is running into some of the common challenges that people encounter when they want to start making games.

In the professional game development, what he's trying to do is usually divided up into three or more separate roles:
  1. Game design - Inventing and tweaking game mechanics, features, and systems the players interact with. A lot of the work is tuning stats, timing, feel, etc. to make the game something enjoyable to play.
  2. Gameplay programming - Writing the code/scripts/data to drive the stuff dreamed up by the designer. This could be programming the movement of the players, how weapons work, or implementing AI for NPCs, or anything else to make the gameplay work.
  3. Game engine programming - Writes the lowest level code to handle all the different subsystems needed to make a game work: player input, graphics rendering, sounds, physics, UI layout, networking, etc. There's a heavy focus on writing fast code that usually interfaces with the hardware/OS at a deep level.
This is in addition to the armies of artists, animators, sound designers, composers, testers, managers, etc. that go into making a modern 3D game.

That being said, in the world of hobbyist or indie game development, one person is often going to do the roles of designer and gameplay programmer, and rely on a third-party engine like Unity, Unreal, or Godot. Those three are really dominating the game development world right now, and they are all really great, with tradeoffs. By the way, all of these (and most modern game engines) implementing a scripting language on top of the core engine written in C++. Scripting is "real" programming and while C++ is use by game engines for its speed, its not a great language to learn at first, so there's nothing wrong with starting with lua or javascript.

Writing a game and engine from scratch, while a really really good learning exercise, is a lot harder than most people assume. I think it really depends on your son's personality as to the best approach. Is he going to be excited if he can get a triangle moving around on a black background over the course of a few weeks? Writing an engine from scratch might work for him. If he really needs the 3D graphics and animations to be motivated, Unity is probably a better option. Unreal is probably a bit too complex for an 11 year old.

Finally, I like to suggest starting with 2D and then moving to 3D is he's willing to do that. The math used in 2D games is usually as complex as basic algebra and geometry, with some trig sprinkled in. For 3D games, you start requiring vector math and some linear algebra for common tasks like collision detection and movement/rotation in 3D space. It's a big ask for someone his age.

Feel free to memail me if you have questions!
posted by arcolz at 12:17 PM on September 18, 2020 [7 favorites]

Came here to suggest Unity too.

As far as finding a mentor goes - maybe see if there is a CoderDojo in your area? Although I suppose they must all be online currently...
posted by atlantica at 12:39 PM on September 18, 2020

If you want a game engine that is easy to learn/use, and keeps design front and center, I suggest RPG Maker. It's more for platformers, not 3D though. There are scripting options, so he can write actual code. And it has a pretty robust community to go to for help. It's often on sale on Steam.

Agree with Game Maker as a good option for a kid his age. And Unity is probably what he'll need to get into eventually.

Languages would be Python, C, and C++. But coding from scratch without an engine can be super boring.

(I teach programming to game design majors.)

On preview, CodeNinjas would be another option.
posted by SuperSquirrel at 5:23 PM on September 18, 2020 [1 favorite]

It would be helpful to know where his frustration is coming from, too. For example, given that he's already proficient in Scratch, then using Alice to start making 3D stuff might let him leverage a bunch of Scratch skills to make rapid progress, or might strike him as similarly "kiddy" and not really under-the-hood enough even though the main purpose of Alice is providing a way to ease kids into thinking in Java, which absolutely counts as a real programming language.
posted by flabdablet at 8:10 PM on September 18, 2020

I wasn't a whole lot older than your son when I taught myself C to write my first (non-text-based) computer game for a school project (one that I'd selected). It was a super simple game involving moving a paddle across the bottom of the screen to keep a balloon bouncing in the air, and it was a whole lot of work but I learned a tremendous amount by doing it. I soon moved on to other languages that are easier to work with, but that early experience learning to deal with fairly low-level constructs like pointers and memory allocation was extremely valuable for everything that came after. I don't necessarily think that C is the best choice for your son to tackle if what he wants to do is make 3D games, but if he's motivated to learn basic programming concepts and skills I don't think that making simple 2D games in C or C++ is at all beyond the ability of an 11 year old. It might be that by pursuing both comparatively low-level programming for simple games alongside scripting and programming for a more sophisticated game engine for the 3D games that he really wants to make, he can get the best of both worlds, having the satisfaction of creating the kinds of games he wants to create while also feeling like he's learning to really understand how the system works under the hood.

Another good option for getting strong low-level programming skills might be to make more "physical" games using either the Arduino or RaspberryPi platforms. Arduino in particular is quite nice for learning basic programming skills, as it's programmed in C++ (or C) and its very limited memory and processing power provide the kind of constraints that help you learn how to make efficient use of what you have. An Arduino with LCD and joystick shields makes a pretty nice platform for creating portable 8-bit games from scratch.

I don't have a lot of experience with modern game engines, but I have explored the Godot engine some. (In my case as a possible tool for behavioral research.) It seems quite impressive in terms of making it relatively simple to get a 3D or 2D game up and running quite quickly, but it also exposes pretty much everything for programmatic manipulation using a Python-like programming language called GDScript. However, games or components of games can also be programmed using C++, meaning someone learning to program games could explore both relatively high-level and lower-level programming within the same basic system. I don't know if this is functionality also offered by Unity or other similar game engines, but that seems like a possible advantage for your son.
posted by biogeo at 9:40 PM on September 18, 2020

Response by poster: So, to answer the question about where his frustration is coming from. So, he is very capable of the modelling, building out worlds, making obstacle courses, conceptually designing games, that kind of thing. Heck, he has literally, since he was tiny, drawn out level designs or built out game levels around the house, now he's working out grids of probabilities of getting different pets from eggs in a systematic way. But he wants to make games that are similar to other Roblox games he plays. He wants to make pets that come from eggs and follow the player around. Things like that. But, when he works with scripts that he finds either shared in Roblox Studio or through Googling, they either don't work, are super buggy, or how they work is completely obfuscated.

Even just googling around now for examples of Lua scripts, so much of them just appear to me to be setting internal variables inside of Roblox, that I would have to spend hours or days googling even to know they exist. He wants his game to be able to save user data after someone leaves and comes back. The existing scripts don't work, and the ways that it's asking for bits of things to be on the server side and bits of things to be on the user side, etc., are kind of obscure.

Look, I understand that modern game engines have a different user experience than my experience as a kid programming BASIC, but I could start from nothing, build routines, if/then statements, read/data - I UNDERSTOOD what the processes were that I was doing.

I'm trying to help him, but the Lua scripts keep referring to variables inside of Roblox itself, and, honestly, very little of it looks like programming the ways that I think of programming. And for some of the functions, I don't know why they aren't built in. The ability to save game data, for example, why is that something that an 11 year old has to build from scratch inside a 13 year-old game engine?

Clearly, my son thinks something like Scratch is for babies. But, it's foundationally actual programming (in some ways it reminds me of Logo, but it's still programming.) He gets loops and if/then, and all of that kind of stuff. The Lua scripts aren't that. If it were that, I think he'd have no problem. I also don't want to have him go down a path that requires deep memorization of obscure bits of Roblox's internal workings if that learning isn't transferable down the road.

I don't know if that helps. I really appreciate everyone's recommendations.
posted by MythMaker at 10:24 AM on September 19, 2020

I could start from nothing, build routines, if/then statements, read/data - I UNDERSTOOD what the processes were that I was doing.

I got my start with Commodore PET BASIC so I'm feeling you. And I've often said that I count myself very, very lucky to have got interested in programming when that was the state of the art; it's as if I were just getting interested in cars when the Model T was what a car was, and having learned that in depth it's been a solid foundation for learning and growing with the tech as it developed.

The thing about today is that the expectations of what a game is supposed to be are so, so much bigger. When I was a kid Hunt The Wumpus was a thing, and I could and did program it myself and enjoyed playing it. Can you really imagine a kid today who has played The Sims bothering with something as easily coded as Hunt The Wumpus?

Today's devices and studio-produced games are so far in advance of the Apple II and what ran on it, and documented so much more sparsely, that even with Google's help they're simply not knowable in the level of detail that we had with our first machines. That's a genuine loss, and a large part of the motivation behind the creation of what eventually became Temple OS - a huge one-man project that deliberately chooses not to exercise almost all of the advanced capabilities of the machines it runs on for the sake of giving the programmer/user full control over the rest.

Today's machines make a far stronger distinction between programmer and end user than those of my youth did, and provide essentially zero opportunity for a kid in a bedroom to emerge as a 21st century Nasir Gebelli.

So don't sweat the fact that learning Roblox's internal workings won't be directly transferrable to anything he does later on. What will be transferrable is the dogged persistence needed for figuring out how to make any canned framework do something useful in the face of sketchy specs and inadequate documentation, which is like 80% of the skillset of working programmers today.
posted by flabdablet at 11:57 AM on September 19, 2020 [4 favorites]

Alice might be a good option to work in 3D without necessarily going down the rabbit hole of modern game engines. It's an educational language/environment a bit like Scratch but more advanced.

One other idea, a bit out of left field, is to look at Smalltalk/Squeak. The researchers who made Scratch actually originally wrote it in Squeak, and you can how it's implemented and look at the source (which might be a bit on the advanced side).

Also, Python is would be a really good language to learn. If he's interested in 3D graphics (the technical side, at least), he could use numpy/pyqtgraph/matplotlib to work with basic linear algebra and transformations.

Python is the central glue language that is used in many, many fields, and learning this substrate could give him a good foundation to use computation as a tool to other creative ends. Python could be a good environment to just play around with computers and to just experiment.
posted by pknodle at 6:35 PM on September 19, 2020

Oh yeah, and a few good resources for learning Python:

- Head First Python, a good introductory book.

- PyCharm a good IDE that might make getting started easier.

- Here is a good video that explains how to get up and running with Python

- Here is a tutorial on turtle graphics in Python. This lets you program a little turtle to move around and draw shapes. This is good that you can get started and start playing pretty quickly. (Basically Logo if you remember that from back in the day...)
posted by pknodle at 8:07 PM on September 19, 2020

« Older "Glass apples" which you can see through   |   How Can I Make An Audio Recording Of My Musical? Newer »
This thread is closed to new comments.