Monday, December 10, 2007

Tinkering with code

About a year and a half ago Noah began expressing a persistent desire to learn computer programming. I'd taken some Basic and TurboPascal courses in the past, and done a fair bit of programming back in the 1980's. What Noah wanted to do (make games and in the process come to understand the logic of computer code) was so far removed from the sorts of course-like approaches to line-by-line coding that I had experience with that I didn't quite know where to start.

I found Logo for Microsoft Windows and a free e-book for kids to go along with it. That didn't turn his crank. The book was too cutesy and slow-paced, and the limitations of the programming language were way below what he wanted to be able to do. Next we looked at a number of more robust programming languages. We downloaded demos of things like DarkBasic, which would allow him to build games from scratch using code. The problem here was that the tutorials required going through laborious course-like steps to learn the commands and syntax. This was not, it seems, how he wanted to learn. He didn't want to spend an afternoon reading tutorials so that he could learn how to code a purple square and make it rotate 270 degrees clockwise on the screen. We then looked at a number of game-programming environments. Things like Stagecast Creator or GameMaker, which allow users to create games using a drag-and-drop interface, without the necessity of learning a programming language. A couple of these looked pretty promising, and Noah spent some time tinkering around, trying to decide whether he liked them enough to buy the full version. Apparently he didn't ... most of his interest ran out before the demos did. He reverted to game play on the computer.

There were so many demos and trial versions of so many programs I honestly can't remember most of the names. To him the ones that used drag and drop modules felt like cheating -- they weren't real code, even if they were fun for a while. But the computer languages were too far removed from game play to be motivating for him. He wasn't ready to start at ground level and work his way incrementally up through systematically learning syntax and recursion procedures. I couldn't really find the right approach for him. I had sort of resigned myself to the fact that he needed to be older, to have the self-discipline to take on a course-like approach to learning a language over weeks or months, and then maybe he'd be able to start to get at what he wanted.

The funny thing is that he found his own path a month or two later. He got intrigued with a couple of computer games that had "development modules", in essence places where he could take apart bits of a fully developed computer game and tweak them to modify things. Gradually he learned enough by deconstructing and reconstructing that he could build his own modules. The first such program was very simple, Owen Piette's WXSand. He build up a huge system of alternate elements that he could create unusual scenarios with. Among the next was Clonk Endeavour (much more complex, and this sent him off to do some graphics work in PaintShopPro). And then on to things like Lugaru, RigidChips, HTML and installing his own Linux-based web message board system.

Oddly enough, this deconstructive tinkering is exactly how, 13 years ago, I taught myself HTML. I used the View>>Source option on my web-brower's menu to figure out how other people had built web features that I wanted to know how to construct and I copied & pasted and modified and guessed and tweaked. I guess Noah takes after me in the 'tinkering' department.

3 comments:

  1. Thanks for sharing all your homeschooling thoughts and insights!

    I was going to suggest the tinkering approach while I was reading this, until, of course, Noah figured out that part himself. :)

    I taught myself HTML, Visual Basic and C++, among others, by tinkering. If I had a goal, I would look under the hood of similar programs and figure out how they worked.

    I have found goal-based learning a much better technique then rote memorization or drills.

    I think this can be applied with all learning possibilities.

    Take care!

    ReplyDelete
  2. I just happened on your blog (from a post about Suzuki) and I haven't stopped reading it! You have a fascinating life, and I can't wait to read more.

    ReplyDelete
  3. Having been a programmer for 10 years, I have to admit I thought that tinkering was the only way to learn programming. Sure, I did do some courses at the beginning, but what programmer ever writes a program themselves from scratch. You find something similar, and mess with it.

    ReplyDelete

This blog is moving to archive-only status. Please consider posting comments instead at the active version of the blog at nurturedbylove.ca/blog

Note: only a member of this blog may post a comment.