In the early 90's, when I first got the coding itch, there weren't many options for a curious kid. We had a family computer running Win 3.1 with QBasic on it. It's easy to get started with (hence the name), but not very easy to get excited about. The web of the early 90's cost a premium and was mostly mailing lists, so not much collaboration to be had for a kid either. It didn't matter though, little of what I learned was personally appealing - I was more interested in video games and music than input prompts and.. more input prompts. 🥱 💤
- Knowing how to program is awesome.
The computer is a tool, but it's also a medium for bringing ideas to life. If they're someone else's ideas, or your ideas for solving other people's problem, you can even get paid for it. Like a kid in a candy shop.
- Learning how to program, even a little, is an advantage.
Not everyone's an author, statistician, or bus driver... but writing, basic math, and driving are essentials. There's no need for everyone to program professionally either, but knowing a little makes things easier.
- Solving for a specific problem is the best way to stay motivated.
The times in life when we learn the most is when we have a clear goal, or idea, or problem that's personally relevant - and let nothing stand in our way of achieving, sharing, or solving it.
Around the same time I was hacking out my little site on geocities, Mitchell Resnick and the Lifelong Kindergarten group at MIT were dreaming up ways to make programming more accessible to the masses, eventually creating Lego MindStorms. He realized the same thing most of us eventually do - having a "why" is just as (maybe more?) important than a "what". If you're not trying to build or fix anything, a bag of tools is kinda meaningless.
In the early 2000's, Mitchell, John Maeda of MIT, and Yasmin Kafai of UCLA had another idea - something to integrate programming into art and media, the way MindStorms integrated it into legos. Backed by Intel and the NSF, they spent a few years creating Scratch, focusing on accessibility (available on every platform and device), collaboration (share creations and ideas easily), and a building block design reminscent of legos. The end goal was to introduce programming to the masses.
Indeed, our primary goal is not to prepare people for careers as professional programmers but to nurture a new generation of creative, systematic thinkers comfortable using programming to express their ideas.
Despite that, the design and implementation in Scratch teaches some concepts most casual users wouldn't even be aware of, aside from the obvious stuff like loops and
You can create your own "blocks" that accept parameters and contain other blocks, just like methods and parameters. You can run multiple blocks concurrently, so it introduces users to threading. And like Sonic Pi, it supports "live coding". Users can modify their code on the fly, without needing to wait for compilation.
Or if you just want to get started using it, read more here, find a tutorial, or jump right in (there's an offline version too). If you want to learn more, check out these articles and papers. They're all a little older, but they go indepth into what the goals were and how they were going to achieve them. I found them interesting.. but then that probably says something about me. 😏
- Scratch: A Sneak Preview
- Creative Coding: Programming for Personal Expression
- Creating from Scratch | MIT News
- Scratch: Programming for All
- The Scratch Programming Language and Environment
As far as I'm concerned, the amazing thing is not that they created a platform for learning how to program. There are plenty of sites for that. What's impressive is that they made it so appealing, by showing people that it's not necessarily a thing in and of itself, but about bringing ideas to life, and sharing them, and collaborating and learning and thinking logically.
It can be a medium of expression, like writing or singing or painting or woodworking. The world doesn't need everyone to be a professional developer, but the computer's a tool worth knowing - not just how to consume it, but how to bend and shape it too.