Recently the eight year old has become very interested in learning Linux and programming. His goal, he said, is to build his own operating system by the time he’s eleven. A very noble undertaking.
The problem is trying to figure out how to teach him what he needs to know to reach his goal. Fortunately there has recently been an upsurge in books and online resources for kids to learn programming, UNfortunately there doesn’t seem to be the same sort of thing for learning Linux.
I installed Ubermix on his computer, which is a modified version of Ubuntu for kids with a bunch of educational games and programming environments/activities to learn Python and some Turtle-like languages. One of the coolest things about this distro is that it has the ability to wipe the OS partition and leave the Home and User Changes partitions alone. This means that if he screws up the OS, I can have it back up and running in less than 5 minutes, and he still keeps the important stuff.
While he was watching me set stuff up he learned what “sudo” did and how to invoke commands with it. I also showed him how to install programs that didn’t come with his machine with apt-get and some other admin stuff. I wasn’t really sure how much he was absorbing, but I figured getting him the exposure was a good way to start.
Within a few hours of installation his Firefox profile got corrupted for some reason and wouldn’t open. I had installed Chrome on there as well so I told him to just use that until I could get around to fixing Firefox for him. Not content with that, he decided to try fixing it on his own. He opened up Terminal and typed “sudo open firefox” and it launched just fine. Interestingly, if you just type “sudo firefox” it opens, but then you can’t use your Terminal session for anything else until you exit Firefox. I didn’t even know the “open” subcommand existed, and it was certainly not something I taught him. That satisfied him for a bit, and he went about discovering things he could do with his new OS. He figured out how to set his wallpaper, create icons for his favorite programs, rename stuff; he was having all kinds of fun. This kept him happy for a few days.
Today he was playing around and goes “Hey, dad, look what I can do” I walked over and he double-clicked an icon on his desktop and it opened Firefox without an error. I said “Oh, how’d you fix the profile error?” “I didn’t. Look.” He had discovered that if you right-click on the desktop, there was an option “Create a new launcher here…” that allows you to create a shortcut that launched a terminal command of your choosing. So he named it “Firefox” and typed “sudo open firefox” and saved it. Bam, there was his shortcut for Firefox, he didn’t even need to open Terminal anymore.
I was seriously impressed, especially considering *I* didn’t even know how to do that. A lightbulb went on: I don’t necessarily need to give him a formal education on something, I just need to give him a way to explore it on his own. Sure, learning programming is something you actually have to study, you can’t just mess around in an IDE and learn, you need to know syntax and code structure. But learning an operating system? Just let them play, they’ll figure it out. He knows if he gets stuck he can Google it or ask me.
As parents sometimes we get wrapped up in the HOW of teaching our kids something, but honestly I didn’t have books on Windows 3.1/95 when I was a kid. I clicked around until the computer did what I wanted it to. But I was so focused on him learning it “the right way” that I forgot the simplicity of exploration. I’ll be returning the 3 or 4 Linux books I got him to read from the library; they’re not written for kids anyways, and he’ll probably learn just as much on his own and with the Internet as they’ll teach him anyways. I’ll be holding onto the Python for Kids book, though.