Summary
I found a great article tonight that I think outlines some great approach to making programming more learnable that could and should be leveraged by Codea to make it even easier to use and encourage broader adoption of Codea as a teaching tool. I’ve recently started to teach my 7 yr old daughter to code and have been thinking a lot about such things lately and its an area that many people could benefit from.
Please check out the following article and give feedback on what you think!
http://worrydream.com/LearnableProgramming/
Details
I’m a long time programmer who started to learn programming at the ripe age of 8 years old with a Commodore 64 back around 1982. I’ve started to teach my very bright 7 year old daughter how to program and so far she and I are having a blast working together using Codea to make a game she’s titled “Super Kitty Girl!”.
I’ve been thinking a lot about how to teach programming so I can help my daughter learn the ropes as I did so long ago. Unfortunately, its next to impossible for her to learn the same way I learned because modern computers are so incredibly powerful that there are few constraints on what you can do. Back then, on a C64, I had 16 colors to work with. I had 8 sprites. I had 3 audio channels.
I couldn’t be endlessly distracted much by the game art, or music, or 3D projection modes. It was pretty easy to focus because of the constraints. There was enough to learn without modern day distractions and the bar being set so very very high especially for game programming. Thankfully, simpler games are making a resurgence via mobile platforms. Angry Birds could have been done on a C64, a NES, an Amiga, a SNES, etc. The mechanics of some of these mobile games are very clean and lovely, something that isn’t a supreme technical challenge, but has been very well executed by those companies by leveraging good developers and artists to make a polished game.
I believe its an incredible challenge for new programmers to know what to focus on in a way that sets them up for success, so I’ve been thinking hard about how to approach the issue with my daughter and other new coders. Codea is one of the best applications I’ve found so far when it comes to teaching my daughter how to program. Touch and gravity inputs make it fairly trivial to map cause and effect. First thing we did was map gravity / tilt sensors to moving a sprite around. Its very simple and intuitive and offers a fine degree of control. I’m teaching her about geometry, coordinate systems, that the little sprites have “personal space” (collision boxes), functions, code commenting, etc.
(We’re also reading the book Lauren Ipsum right now, introductory CS material for kids, that reads like Alice in Wonderland and is pretty funny)
All this in mind, I came across a fantastic article tonight posted on Hacker News that is directly relevant to reaching goals of making modern programming easier to learn and there are several suggestions directly applicable to Codea itself:
http://worrydream.com/LearnableProgramming/
There are many concepts that could be applied from this article, but I think the low hanging fruit are the “Make meaning transparent” and “Explain in context” sections. I, an expert programmer, definitely find it cumbersome to go into help to look up the parameters for all of the functions, so having something even just tell me the name of the parameter would be helpful for jogging memory or helping me figure out how to use the method for the first time. My daughter has no mental model for navigating help / documentation systems, so she has a very challenging time finding the right help - even I do sometimes.
I think Codea is an awesome tool, I’ve been impressed by the progress so far and I think there is room for it to get even better. I hope our discussions and support can help drive that forward. In the meantime, please take a look at the article on Learnable Programming and give feedback on your impressions.
-Xavian