Software, technology, sysadmin war stories, and more. Feed
Tuesday, June 19, 2012

My "retro design" approach got me in trouble

Way back in the dark ages, I took a programming class which had been split into two semesters. Our first semester focused on LOGO and a programming environment which was supposedly like LISP. I don't remember a bunch of the finer points beyond declaring functions with things like "TO xxx". I can't even remember how to assign a value to a variable, for instance.

Anyway, since this was LOGO, it meant we had the (in)famous "turtle graphics" stuff going on at the same time. This is where you had a little triangle centered on your screen and could give it rudimentary commands: forward, back, rotate left, rotate right, pen up, pen down, and so on. There were also provisions to "repeat" sequences some number of times, and those could also be nested for some amusing results.

We were set up in pairs and turned loose on assignments. By this point, I had already been writing dumb programs for my own amusement and utilities for other people for a couple of years, so it was no big thing. It was more a matter of connecting the existing concepts in my head to the way this particular language worked. None of the lessons were particularly demanding, so I tended to just go off and start writing.

This is where I got in trouble with my teacher. You see, she wanted us to follow a strict flow with these things. First, we all sit down at the center tables away from the computers. Second, she explains whatever it is we are supposed to do and hands out the lesson on paper. Third, we were to design it on that green engineering grid paper. Only then, fourth, could we take our designs to the computers and start working on the actual code.

I figured this was unnecessary. For the kinds of trivialities we were presented, most of the time a solution would just pop into my head, and I knew approximately what it would take to do it. These simple programs were like a series of known quantities that I had to plug together in a certain way, and once it made sense in my head, I'd let the computer in on my little plan by typing it in.

At some point, I just started going straight to the machine once she gave us an assignment. I'd key it in, and then once that was done, I'd turn around and make my design sheet based on what had been coded. I would have skipped the design sheet entirely, but it was a required part of our assignments and couldn't be omitted without losing some serious points.

This actually worked for a little while. Then, one day, my computer teacher must have been keeping a close eye on me, since she noticed that I had no design and was just plinking away at the keyboard. Then she probably saw me drawing the design flowchart afterward and figured it all out.

I actually got in trouble for this. It wasn't anything particularly bad per se, but rather more of a warning. I was to stop "retro-designing" immediately lest she take it out on my grades. Naturally, I complained, but ultimately complied. After all, it's just school, and school ends.

I still think of that class when working on projects today. For my purposes, there is not one standard way to design something. Some projects come about by way of a chat session with a friend and details are batted back and forth until it seems sensible. Then someone goes off and tries it and reports back. Repeat until you're happy. This also works with conversations in real life.

Other times, I clear off my whiteboard and start drawing circles, lines, and labels, like for an automaton. If not that, I might draw state transition tables with inputs mapped to outputs. A variant of this would be scribbling similar things but in my dead-tree notebook.

All of these evolved as responses to actual needs I had while working on one thing or another. I don't have any hard and fast rules about when to use any particular method. One thing is clear, though: I never draw those old-school "data processing" type rectangles, ovals, and diamonds we were doing in that LOGO class. For all of the things which might be the answer, for some reason, those never work for me.

Epilogue: if you have a hankering to play with turtle graphics after decades of letting those skills atrophy, allow me to help. If you have Python installed, try "import turtle" and then "turtle.fd(90)". The result may surprise you.