December 5-11, 2016 is Computer Science Education Week, and thus also the main Hour of Code week.
Hour of Code used to be pretty straightforward, back in the day. You just got access to the computer and then
That was it. Everything else was up to the student.
Ok, it was a little more complicated than that. In actual fact, there was an entire ecosystem in the 1980s that supported entry into computer programming (unfortunately mostly for boys, since one of the main routes was through games that were primarily played by boys - for more see When Women Stopped Coding).
There were basically three computer worlds:
- computers you had access to outside the home, typically through school
- your home computer (Commodore or Atari or TI or Tandy)
- video games in the arcade
And there were a few paths into programming:
- exiting out of running computer games or other code, and looking at the code and modifying it to see what would happen
- trying out commands just to see what would happen, just to get your computer to do something
- typing in code from magazines and books
- being inspired by arcade games to try to code some kind of game
Alas, just like we let the blogging ecosystem fade away, it seems we have let the coding entry-level ecosystem fade away. The extraordinary thing is even companies where most of the coders learned in the above way, by e.g. writing BASIC on their home Commodore 64, there is no support for this kind of entry path into coding.
David Brin wrote about this issue a decade ago, in 2006, in Why Johnny can't code.
Since then, quite frankly, things have gotten worse. In 2006 at least people were still sitting in front of desktop computers. Now we have smartphones and tablets that put us even farther away from direct interaction with code.
A typical elementary school student request in 2016 is to how to make mods with Minecraft. This is hugely exciting, in that kids are now re-engaged with the concept of coding. But the ecosystem to support them quite frankly sucks.
In 2016, the main options are:
- using one of the grab-an-instruction-block toy coding abstraction environments, e.g. Scratch or Apple's Swift Playgrounds
- getting a task-specific learning to code book, e.g. Minecraft Modding with Forge or Adventures in Minecraft
- trying to find a simple (shall we say, basic?) coding language that actually runs on a modern computer
- Raspberry Pi type things
So here are some issues.
Blockland
I just don't buy the idea that dragging around code blocks is a good way to enter into programming or to understand deeply how computers work. No one actually programs by dragging around code blocks, we all type in commands. Plus which the nature of the code block oriented training tends to be highly structured, step-by-step rather than discovery oriented. Quite frankly, it doesn't look like much fun to me.
Plus which, you're working too many layers away from the actual code. When I played games and then exited out, I could see the actual BASIC code. If you're doing Hour of Code Minecraft, you see this.
This is a lie on multiple levels. First of all, this isn't actually Minecraft, it's a kind of Minescratch, some layers of JavaScript with maybe some kind of server backend. The blocks you are moving around on the screen are not the code. They're not even close to the code. You can go through the entire coding exercise without ever seeing the actual code that is running the coding environment. For anything other than some maybe-benefits of getting some CS concepts, this is useless at teaching about coding.
Bookland
Moving to "intro to coding" books on the other hand takes you from one extreme (blockland) to another (bookland). There are at least two problems with bookland.
First, since we no longer have a simple baseline computing environment and language, every book starts with "downloading and installing". Page after page of downloading and installing. You must get this specific version of this thing, and that specific version of that, and then do this step and this step and on and on. And oh by the way if you're reading the book more than a few months after it was published, all of those versions are obsolete and none of the code works on the new versions. It takes the entire first chapter of Minecraft Modding to get to the part where you can in theory start coding. It takes 30 pages of Adventures in Minecraft before you can write code.
So we've frontloaded one of the most tedious parts of computing, setting up a working coding environment, into the beginning of every code adventure. What kid is going to wait the hours it takes to set up all of that?
Secondly, because there's no baseline environment, there isn't even consensus on where you start, there's no shared common experience. Minecraft Modding wants you to write Java in Eclipse for Forge. Adventures in Minecraft wants you to write Python in IDLE for Bukkit + RaspberryJuice. And these are the easy, entry-level books for kids.
Codeland
I just want to have a command-line prompt where the kid can type in some text and make something happen. But since the big tech providers killed all their entry-level coding options, it's a muddle of half-abandoned side projects that may or may not install on your current computer and may or may not have any kind of support.
Yes, Apple has Xcode, but learning to code using Xcode is like learning about space physics by playing Kerbal Space Program. Yes, you can do it, but you have to learn layer upon layer upon layer of things just to even get the rocket on the launch pad.
BASIC
In response to David Brin's article, in 2008 Small Basic was released. For Windows only of course. But nevertheless with a fairly extensive support presence. And it was last updated in 2015 and there are still blog posts, so it's not dead yet. And it has a Turtle command so you can do Logo-like things with it. One can of course debate whether TextWindow.WriteLine(“Hello”) is actually BASIC at all, but nevertheless.
On the Mac side, it looks like maybe Chipmunk Basic.
PureBasic (which I have never used) also looks like it might be an option. Lots of platforms supported.
Back in the day I used to use True BASIC a lot (on the Amiga). It is now Windows only.
Logo
I like the idea of the immediacy of Logo.
For Logo, the situation is pretty muddy, with lots of different implementations and not many updates. UCB, MSW, FMS, aUCB, Terrapin, ACS...
On the Mac side, ACSlogo hasn't been updated since 2011. Other than that it looks like basically Terrapin Logo.
There are more options on the Windows side.
Pi Land
Raspberry Pi, or custom environments like Kano, or wall-climbing robots... maybe?
But purchasing them and setting them up is a barrier. It's a lot easier when the computer you program on is your actual main computer.
What Could Be Done - Emulation and Built-in Languages
1. Provide legal, out-of-the-box emulated environments of classic computers on Windows and Mac
There is no reason that every Windows and Mac computer, and for that matter every smartphone and tablet, couldn't come with full emulations of the major 80s computers.
There is VICE but I don't know its legal status or ease-of-use.
Maybe this is super-easy to do through the Internet Archive's Software Collection. It's not clear to me.
2. Provide entry-level computer languages on all Windows and Mac computers
BASIC and Logo would be a start. Python maybe.
What Could Be Done - Minecraft
1. Make the Minecraft command line more powerful
An easy entry point for learning to program in Minecraft would be through the Minecraft command line. If it had simple programming capabilities, it could become the new BASIC prompt.
2. Fix the Minecraft mod ecosystem mess
Right now trying to do anything with Minecraft mods is a mess. The mods are Minecraft-version dependent. This means you have to have the right combination of the Minecraft version, the Forge version and the mod version. There is no easy way to switch between different profiles when it comes to mods; it won't remember which mods go with which version. Plus which, instead of being in a central place with a central community, the mods are all scattered all over the place, with downloads from dodgy popup-ad websites. And the mods are not maintained, so the compatible version is never the one you would want it to be.
3. Have many easy pre-packaged Minecraft mod coding entry points
Mods in BASIC. Mods in Python. Mods in Java. Just make it easy to set the environment up in one package, without having to firewall off every special combination of versions and support tools. Standards build ecosystems. Right now there is only complicated fragmentation.
Solving this could be a huge, easy win for Microsoft, generating both goodwill and a pipeline of future programmers; I don't understand why they don't fix this.
Readings
- Why Johnny can’t code by David Brin in Salon - September 14, 2006
- Forward 40: What Became of the LOGO Programming Language? by Aaron Rowe in Wired - October 15, 2007
- How are students learning programming in a post-Basic world? by Lamont Wood in ComputerWorld - June 23, 2011
- Midnight programming, 1979 vs. 2011 by Lamont Wood in ComputerWorld - June 23, 2011
- Fifty Years of BASIC, the Programming Language That Made Computers Personal in Time - April 29, 2014
- Can a Wall-Climbing Robot Teach Your Kid to Code? by Chris Berdik in Slate - June 22, 2016
Previously:
December 11, 2014 Hour of Code 2014
Comments