As a computer science teacher, I sometimes found myself with a student totally uninterested in programming. However I always had a secret in my back pocket that no kid could resist falling for.
I would ask the student to name a website. Often they say a news source, such as BuzzFeed or The New York Times. I’d then go to that website, pop open the Chrome developer tools, and make some silly modifications to the site, such as changing the colors and sizes, but most importantly, changing the text to say funny things that including that student’s name.
Sometimes the student would be so disengaged that they wouldn’t even watch me make the changes. It just made for an even bigger reveal.
“How’d you do that?”
They can’t take their eyes of the screen.
“Is it like that for everyone now?”
I laugh at that question every time. “No I didn’t just hack the New York Time’s website to put your name on the front page. It’s just like that for this computer.”
“Oh… Could you hack the New York Times?”
And I’ve got them. For the next few hours, the student is eager to learn how to modify the content of live website that they use. In particular, they love to copy and paste content from one site to another.
While they aren’t so happy they only they can see their changes, they are devastated to learn that their changes will disappear even for them if they refresh the page.
“Wait, then what’s the point?”
Before I lose them again, I have a small window in which to introduce them to HTML programming or Squarespace, depending on their level of maturity. And if luck is on my side and I execute this maneuver flawlessly, we’ll have them hooked.
This is one of my favorite CS teacher tricks. But it’s a shame that (1) students require 1:1 teacher attention to benefit from it, and (2) it needs to be executed flawlessly to distract students from the annoying bits (that it’s a very temporary hack).
What would it look like if our software so readily lent itself to modification by end-users? Would it be possible for users to make changes that they can keep? How about sharing your modifications with a friend? Or what about publishing your modification to a broader audience of thousands? I fear we might never be able to pull our children away from their computers in such a world.
A majority of the photons that hit our eyes come from software user interfaces. While software is quite malleable for programmers, for most users the software they use is a rigid as the physical matter in the real world. But what if we gave all people the power to modify the digital worlds they live in? It would be a game changer. For one, you wouldn’t have to teach programming, any more than you have to teach kids Minecraft. Students would choose to learn bits and pieces here, making small modifications now and again, wanting the modifications of their friends, and on and on. Live, end-user modify-ability is the key towards full software literacy in this world, as well as a world of infinitely customizable, always improving, open-source software.
Platforms like YouTube, Twitter, and Blogging are blurring the distinction between creators and producers. The exciting thing about eroding this line for the creation of software is that software is the very thing that is causing this line to be eroded in all the other fields. People, especially disengaged people, respond to power, the ability to affect the world around them. Let’s give people more power over their software.
I know what you’re thinking. “Ok, I agree this is a beautiful vision, but how do we get from here to there. I can think of 17 reasons why this will never work.”
Stay tuned. I have a few ideas on how we can get there. Spoiler alert: interpreted functional (reactive) programming with live visualizations.