Johnny BASIC programming environment and programming guide.
In 2006 David Brin wrote an article called "Why Johnny can't code" about their being no easy way to get kids hooked on programming.
He lamented that our programming tools are too hard to install and get working, and once they are working, the distance between a new project and seeing something working is massive - for a new programmer, it takes days just learning about picky syntax rules. The languages themselves take a lot of code to really do anything. And you also need to install libraries to do anything fun.
He recalls BASIC on the home computers of his youth, where all you had to do was turn on the power, and you could immediately start typing in statements to execute, or a new program listing to run.
The closest modern analogue is Python, which typically needs to be downloaded and installed. But it doesn't come with any exciting built-in capabilities, like drawing graphics and making sounds! Where's the good stuff? New programmers also get tripped up by the indentation rules. And "how to run my program." (Often, the answer is "use the shell" - the what now?!)
Which brings us to this project. David Brin actually created quite a stir at the time, with even Microsoft coming out with Small Basic in answer to the article.
However, I think many respondents missed David's more salient points:
- an easy way for kids to get hooked on programming (learnable, sticky)
- turn-key usable by any junior high school student (accessible)
- you could follow along on paper for a few iterations, verifying that the dot on the screen was moving by the sheer power of mathematics, alone (how computers work)
Some of these points have also been addressed by Bret Victor who wrote a fantastic whitepaper about "Learnable Programming" with these relevant points:
- programming is a way of thinking (that we learn) not just syntax
- people understand what they can see (we need to see the steps)
The article points out that the answer to the question "how can we get people to understand programming?" may actually be "make programming more learnable" (we're focusing on the wrong side of the problem.)
It turns out I'm not yet clear on my own goal here:
- learning "how computers work" (low level stuff,) vs
- learning to think about problems like a programmer (decomposition, abstraction)
This project begain with the first of these in mind. The old 80s BASICS were simple and close to the machine by necessity. This makes them good for learning about how computers work.