My 11 year old has expressed interest in learning to program. His primary inspiration is games. I would assume this is common, although not how I got started. I’d like any thoughts, suggestions, or resources anyone may have. Thanks.
I second neatze; I started around your son’s age by modding games (Morrowind). My younger brother got into Roblox, which is still popular.
My main driver was creating stories and cool new stuff for other people (Dad, brother, forum users) and getting feedback. Playing with your friends in a world you spent a month to build is an incredible experience.
> When I was 11 years old I learnt to program starting with text based games in Turbo C++ or something.
I suspect those of us who grew up during the era when the games you wanted to play as a kid were Colossal Cave, Pong, Zork, and Space Invaders - had it _so_ much easier than kds today. The path for an 11 year old to get from from telling the computer:
10 PRINT "HELLO WORLD!"
20 GOTO 10
to a playable/fun game, for me, was not an inconceivable journey at the time.
These days, I wonder if expectations of Minecraft/Roblox/Fortnite/CallOfDuty/CyberPunk2077 (or whatever 11 year old kids are playing these days) have made the path from "Hey, I can make this computer print out some text" to "I could make my own computer game" much less straighforward or conceivable?
As a kid in the late 70s/early 80s, I wrote text adventures (as a tangled pile of global variables, if statements, and gotos) in Basic on computers like TRS80s, BBC Micros, AppleIIs, and an OsbourneII (a CPM/Z80 "portable"). I worked out that printing characters at the right place on screen fast enough could let me write "text mode" ascii-art versions of games like Pong, Lunar Lander, and Space Invaders. The performance of Basic led me to learn to write the inside event loop in assembler (On the AppleII you'd POKE all your event loop assembler into a block of memory, then CALL to it from Basic to run your game code instead of the Basic interpreter.) LoRes graphics, HiRes graphics, sprites and sprite collisions - stuff lie that was all an understandable and achievable learning path for a curious enough kid, where the "triple a" games of the time (Sabotage! Olympic Decathalon! Choplifter! LodeRunner!) were all things that an 11/12 year old with sufficient hubris and way too much time on his hands could "understand" how they worked, and imagine making it myself.
If "learning to program games" means to an 11 year old in 2021 "I want to write my own version of Cyberpunk 2077", I have absolutely no clue how Id even _start_ to help them along that path... What are the spepping stones between a hand-me-down laptop or phone, where a kid could start and imagine themselves ending up at something like the game they want to play???
My 12 years old nephew is doing a lot of game development activities in GDevelop and he also have grasped Unity3D going through self-paced YouTube tuts. May be you could guide your child to get started in these.
I would definitely recommend getting started in something like Scratch, covering the basics of if/else, for loops, arrays.
And then moving into Loved2D or Pico8, both lua based with tons of tutorials and other games you can play/edit.
Whatever you end up doing though thee most import things are...
+ Having a clear goal
+ Clear and immediate feedback
+ Balancing the difficulty with skill level, not difficult enough and we get bored, too difficult and we get stuck.
Thinking back to myself when I was younger.. I think I would have valued being presented some options and being allowed to choose. So for example, explain Python and Java and why they are different. Let your child come up with a reason for choosing one. We might think Python is more fun but they might not.
I got into programming when I was 11 because I wanted to mod my favorite video game. Lucky for me there were multiple communities that helped me get started
Perhaps see if there are modding communities for his favorite video game(s)?
Grab an iPad and install Swift Playgrounds. Has you move a character to grab gems n stuff. Reminds me of my first programming language, Logo, though you are using Swift.
I would start the person off with easy level Leetcode questions, and some basic level Agile methodology for project planning (let him play around with Jira, see how he plans things, but start getting him used to tracking his hours and breaking down tasks (maybe start with having him enter and breakdown his daily homework into tasks via Jira or any other agile tool)).
Start getting him used to weekly code reviews/schoolwork reviews, and try to plan at least one day out of the week to get to know your son over lunch, this will help him develop the much needed social/culture fit cues. The social get together is different from the weekly 1:1, which is more about his perspective and goals. It’s never too early to start with this stuff.
If you know another parent that has a child with design and communication talent, set up some play dates so they can both collaborate on building what will hopefully one day be a great Calendar app that sends out notifications (in real time). Plus it’s a great opp to pickup that much needed well roundedness to engage with product development workflows.
This is all very important because aside from the tuition you will pay for college (if for some ungodly reason this child doesn’t pick comp sci), you will have to shell out a solid 17k for a bootcamp to save your child’s career 15 years from now. If you just start the kid early enough, you save 17k, or what will probably be 30k by then. Now that I think about it, have a bootcamp-emergency-fund that you contribute to starting right now might be good in case the kid goes through a phase and blows 4 years majoring in Media Studies.
The leetcode is the most important thing here, because even if you do all the right things I just mentioned above, no Leetcode skills means no job.
Remember, this kid has exactly 11 years to go from high school -> college -> straight to a 200k salary at a FAANG, he’s not gonna have a lot of time to have a naturally paced career where you work your way up to those places. So if you think I’m joking about any of this, I’m not. You’ve got 10 years to pull this off, best of luck.
P.S:
Forget about the video game programming part though, that job doesn’t pay well.
Or you could steer him into a more sane career path, and nip all of this shit in the butt. Can’t go wrong with something in Medical.
Give the kid a secondhand Thinkpad running OpenBSD, teach him basic shell, and tell him about the man command. He ought to be able to figure the rest out on his own.
Honestly, as someone who has grown up in the world of JS and interpreted languages, It's really important to teach them the fundamentals like filesystems, the command line, and especially harder, compiled languages, rather than JS or Python. I would recommend a good solid foundation like Java (especially if they like Minecraft).
I think the initial language doesn't matter all that much as long as you can get interest in programming and have some structure to break you of any bad habits after you first start. I taught my self to program with GW Basic and goto statements in the early 2000's. At that point it was already a horribly antiquated technology but it ran on my braille notetaker so the learning curve to get started was super low. With in a year or two of getting started I was in a C++ class using normal computers which broke me of all the bad habits I had taught myself.
Yeah, I'm just using Java as an example because there's a clear goal (almost every 11 year old plays Minecraft, if they can program plugins for it, they will be the most popular kid in class), and because its hard enough so that they're forced to learn good practices.
Indeed. They can be fun and consider what your child’s interest is, his aptitude, as well as the language’s popularity so that it will benefit them in the future.
May be something like this: https://www.learntomod.com/features.html
It might worth to look into robotics platforms such as: https://www.amazon.com/Raspberry-Pi-Robot-Kit/s?k=Raspberry+...