Writing

Feed Software, technology, sysadmin war stories, and more.

Wednesday, April 4, 2018

Where I started might not be useful to you

Every now and then, people ask what books or other materials I would recommend, and ask for info on what might have helped me along the way. While I've written a little about this before, it was a long time ago and maybe I can tell it a little differently and hopefully be of more assistance.

I can tell you some of my history with this stuff, but realize that nearly all of the books will be out-of-print and/or for things that nobody wants to use any more because it's ancient. Basically, if you could warp back to 1980 or so, you could follow a similar path, but I don't know how much utility this will necessarily give you in 2018.

Still, let's start with the specifics and then see if we can extract some general observations from it.

VIC-20 manual

First off, there was the Commodore VIC-20, and with it, the owner's manual. It may not look like much from the picture, but it's quite a nice thing to read. Inside, there are great bits of example code showing you how to do colors, sounds, text-based graphic characters, and other simple things from "immediate mode" -- not inside an actual program yet.

That is, they'd give you a command like "POKE 36879, 1", and you could just run it all by itself. It didn't have to be inside a program with line numbers and "RUN" and all of this. You could just experiment, and if things went wrong, a quick two-key poke of RUN/STOP + RESTORE would probably get you back on track. If things went really sideways to where that wouldn't work, a power cycle would cure all ills. Nothing persisted past that.

This book also taught a few things about loops and timing and using them to delay execution for a little while. The machine was fast enough to where just doing display hacks in a tight loop would give you a blur. They taught you how to do "FOR T = 1 TO 1000: NEXT T" to make it pause a little before going on.

There are a lot of little general-case things to take away from this.

First, it was trivial to start this thing up. It became operational essentially immediately. Even if you had to let the TV set warm up, the whole thing should be ready in under 10 seconds. It would instantly be obvious if something was not right.

Second, you couldn't hurt it by screwing around on the keyboard. (This is a VIC, not a PET, so no killer POKEs.) You might make terrible screeching sounds through the TV speaker and put up color schemes that would make you want to retch, but the hardware itself would be unaffected.

Third, if you did make a mistake, you could get back to a sane state fairly quickly, and usually without having to ditch your in-memory code (if any). If you really screwed up the box, well, yes, you did have to power-cycle it, but even that was quick.

Fourth, if you really wanted to, you could save stuff to a disk or tape, but you didn't have to. The stuff used for learning was simple enough to just keep in a notebook or scrawl in the margins of the manuals when you were getting started.

Fifth, you could take that notebook with you to places away from the computer, and scribble down your ideas for stuff to try next time. You could be in class, on a bus, or just sitting under (or in!) a nice shady tree, coming up with stuff to try next.

Sixth, the essentials you learned were enough to make some useful utilities to solve small problems for people you cared about if you were so inclined. Want a countdown timer so you can take a nap and be alerted after 90 minutes? No problem. Want the machine to play white noise to mask other sounds, and then switch to an alert noise after that time? No big deal.

Trouble is, that was 35 years ago. What sort of thing fulfills those principles today?

Just about any computer you can buy today is going to have some kind of non-trivial boot time. It probably will require a whole ecosystem of crazy things to make it work. It will be fragile. You can break it easily. If you play around on it, you might expose your personal data online, or otherwise create a situation where bad people can come in and destroy your stuff and/or use it to attack others.

I don't know what the equivalent would be. Even a Raspberry Pi has a lot of stuff which can go horribly wrong and require someone with Actual Linux Skills (tm) to fix it if you run the wrong commands. Also, it doesn't exactly boot instantly. It still has to Do Stuff to get running, leaving you to sit there and twiddle your thumbs.

I suppose you could come up with some simple machine which plugged into your TV and let you experiment with a handful of primitives to get a feel for starting out. There's another problem, though: it's 2018, and it would have to compete with all of the other Shiny that can be found everywhere else in the world. I'm guessing it wouldn't be particularly appealing to the kids today, because they expect much much more.

Of course, I'm also assuming these principles are useful and meaningful. They might have been at one point, but do they still apply today?


April 6, 2018: This post has an update.