Why Scratch and “intro languages” are still relevant in teaching kids programming

This is in response to another Medium post I read today. I want to explore some views expressed in the post that I disagree with.

Like the author in the original post, I too am a highschool student. However, I feel like our first experiences with “programming” are very different. I started with Scratch, as opposed to Alice, and I had no prior programming experience (unlike the original author).


The Scratch I used when I was younger.

I have a very limited (yet negative) experience with Alice, so I can’t comment too much on it. I remember being subjected to a lot of terminology that I didn’t experience with Scratch — all I wanted to do was make a game. Its dated design and persistence on forcing object-oriented programming onto me was what dissuaded me from using it (despite its cool, 3D appeal).

However, I first used Scratch when I was 9 and I thought it was great. Scratch is great for teaching kids to program because it understands that kids just want to be creative and share their creativity; most kids don’t want to learn about writing syntactically correct code. Think of it this way — would a kid be more excited about writing their own story, or all the types of sentence structures they could use when writing it? Maybe they’d be more excited about the specifics when they become more experienced, but for now, I’m fairly confident that they’d be excited in just having the ability to write a story and for others to read it.

Despite not forcing kids to write out “real code”, Scratch does a good job of delivering a basic knowledge of programming and logic. It introduces them to the concept of conditional statements and control flow. It helps them to think logically, to be able to put across their vision in a sequence of instructions, without the worry of putting a space in the wrong place, or not indenting their code properly.

This is what makes Scratch so popular — it teaches the logic associated with programming rather than the syntactic rules of any specific programming languages. At the time of writing, there are 23,557,047 projects shared on Scratch; I’d say it’s pretty darn popular.

That’s also another great thing about Scratch — its community. You are free to look inside another project, to see the blocks and the scripts that drive it — it encourages learning and sharing; you can even “remix” a project (like forking a repository on GitHub). There’s even a large and active community forum for help with Scratch, as well as many resources for educators wanting to teach Scratch. It’s insanely easy to get started with Scratch.


The “metaphorical ceiling”

The level of abstraction is so high that you can’t see how programming could be fun and useful. Making a snowman turn, while may at first be more exciting, gets boring after the second/third/fourth time. The metaphorical ceiling is too low. Compare that to say using some Social Media API with Python and frankly it is quite apparent how programming can be made entertaining.

This is an excerpt from the original post, and it’s definitely a topic that’s not clear-cut. My personal take on it is that Scratch needs the metaphorical ceiling. During my time using Scratch, some of the things I learned about include velocity, collision detection and the aforementioned “logic of programming”. I didn’t get bored of Scratch until a few years later, as there was always something new to learn from looking at other projects:

An implementation of Geometry Dash in Scratch 2.0 (play here)

However, it is undeniable there is a low metaphorical ceiling with Scratch. In Scratch 1.4, the version I used, you couldn’t make HTTP calls, perform file I/O or create your own blocks without modification of the application (In Scratch 2.0 this all gets easier with ScratchX, however). I think the low metaphorical ceiling can actually be a good thing.

The main advantage of the low ceiling is that the limitations encourage kids to begin moving on from Scratch to harder things. Kids at least now have a basic understanding of how their programs flow and how conditional statements work, so the transition to a “real” programming language isn’t too hard.

The level of abstraction is there so kids don’t have to worry about the constraints of real programming languages.

they don’t show what “real” programming is like… almost seems dishonest… an unrealistic view of programming

I can agree with this statement. I understand that the jump from Scratch to a language such as Python/JavaScript might feel big, but I think it’s important to note that this gap would be much larger — and so act as much more of a deterrent — if you had never used Scratch or anything similar before.

I’m not saying it’s impossible to go straight into Python or JavaScript without having used Scratch or another programming language prior, I’m just saying that Scratch helps you to think logically, use subprograms appropriately, and how to use conditional statements effectively; this definitely makes the leap into “real” programming less alien.

So while you could argue that Scratch confines kids and puts a “glass ceiling over kids and their creativity”, I think that Scratch is a tool that uses high levels of abstraction so that kids can express their creativity without the constraints set by “real” programming languages. It acts as a prelude to their programming future, and probably makes them more likely to pursue a career in programming due to such a good first experience; it might be more difficult to encourage a kid to get into programming if they start by having to worry about syntax and data types right off the bat.


What about “intro languages”?

I realise that I’ve talked extensively on Scratch in this post, however it is an important topic.

I think introductory languages — Python and/or JavaScript, for example — are essential for moving on from Scratch; I suppose you could even start with them if you wish to do so, as they’re not too dissimilar to Scratch for basic things (e.g. iteration). They also provide exposure to some larger concepts, such as classes, “real” functions with parameters, effective design patterns, and asynchronous code.

At the end of the day, even though they’re so-called “introductory languages”, this doesn’t demean their real-world value. They’re both used extensively in the real-world — see here and here if you don’t believe me.


Summary

The main point I’m trying to make is that Scratch is still relevant as a prelude into programming. It might not be necessary for all children, but I think it’s invaluable in terms of what kids can learn from it. It has a large, supportive community that can help with problems you encounter, which is less daunting than finding help for issues with “real world” programming languages.

Python and JavaScript are great first programming languages, even if you haven’t used Scratch before. You can write “real” code and do just about anything with them.