in General

What I Learned Teaching Programming to 14-Year Olds

Yesterday I volunteered at CodeDay Phoenix as a mentor.  The goal of the event was to take young kids (mostly middle school and early high school) and give them an opportunity to code something in 24 hours.

As a mentor, my job was to “walk around and help where I could.”

The first group I walked up to was creating a tool to help you come up with something to do for the day.  The idea was that it would take your current location, your preference on whether you wanted to eat, play, build, or socialize for that day, look up some locations in a local database and then make a suggested schedule. It was actually kind of a cool concept!

They built it in Python, and it was a command-line program.  Also, they weren’t sure how to get your current location from python, so they decided not to implement that.  They wanted images to display in the terminal somehow, and didn’t believe me when I said that this wasn’t possible.

A part of me felt bad for defining their bounds of possibility.  Indeed, I googled “display images in terminal” and found that there are already projects that do this!  I realized that part of educating yourself about what’s possible means setting subconscious boundaries on what isn’t.  It goes to show that not having learned something yet can sometimes be an asset!

The next group I went to was building a — I’ll say it in adult-speak — modification for the Minecraft video game which will alter how the game functions for anyone who installs said modification.  Or, as the kids said, it “we’re building a minecraft mod.”

What especially blew me away here was that these kids were thrilled to program in Java using Eclipse.  Huh?  Why are 14-year olds super eager to learn a technology that is mostly popular in the enterprise?

It turns out Minecraft is written in Java, Eclipse is a free IDE, and so the Minecraft community has built all its documentation around Eclipse.  The kids were running into some challenges, but I felt bad I couldn’t help them much.  Java?  No problem.  Minecraft modding.  Uh, I need to ramp up.

The kids spent about 10 minutes with me to show me around Minecraft, get it installed, setup Forge, install my first mod, and then I started going through tutorials on how to build a mod. Given my experience as a software engineer, learning wouldn’t have been an issue, but suddenly I found myself with my headphones on sitting privately learning.

Me sitting privately learning Minecraft modding seemed like a bad way to share my experience with the kids, so I put that down, started engaging with them, and started showing them about how to debug in Java.  Speaking of possibility, they just didn’t realize this was possible.

Overall, it was a fun and enlightening experience.  Here’s what I took away from it:

  • This is a generation growing up with a mature Internet.  They are going to create some seriously cool shit when they are older.
  • There were a bunch of kids who didn’t know how to code, but the ones that did were young and had learned either on their own or in high school.  By the time they’re 21, they’ll have 7 years of experience coding.
  • If you want to get the next generation excited about a technology, build a cool game and ecosystem and use that technology as the on-ramp to working in it.  Minecraft definitely did not do this deliberately, but suddenly Java is a hot among a bunch of kids.
  • I also observed some kids teaching themselves HTML/CSS using CodeAcademy.com.  They were just going through the lessons one by one and having a blast.  It made me realize that the barriers to entry for coding keep dropping.  I think that’s a good thing.