Designing Dictionaries

Just about every school of Computing Science in the known universe has a course in first or second year called something like “data structures” that exposes students to several (sometimes many) techniques for organizing data in ways more complex than a simple sequence. There’s often a fat textbook with dozens of them, of which an instructor selects the two or three most important and a smattering of others.

The things is, most of those structures are special implementations of the abstract idea of a “dictionary”: given one of these, find one of those. Given a name, find a telephone number. Given a street address, find the GPS coordinates. Most of the ways of doing this have already been programmed hundreds of times, so some students wonder “why should I bother learning all this, when I can just reuse what somebody else has done?” They especially ask this if you’re showing them a particularly tricky piece of code from one of the cleverer dictionaries.

So how should we teach this material? Back in the late 1980’s, I thought about that question a lot, and came up with an answer I liked: Software design is about making deliberate choices among alternatives, and this is an ideal course for driving that home.

Continue reading “Designing Dictionaries”

Cities, Civilizations, and Combat

When I read geek culture websites, computer games are a recurring topic. Unfortunately I feel rather left out, because I’m not fond of most of the front-runners. My reactions are too slow for first-person shooters, and I definitely need a pause button on most real-time strategy games. Even when I slowed Starcraft down to its slowest rate, large battles past the first few scenarios were too much for me. I could probably get into some of the CRPGs, but for now my one MMO (Lord of the Rings Online) satisfies that part of my interest. I get frustrated quickly with the puzzle solving in the adventure games I’ve tried; simple stuff is fun, but they seem to rapidly get obscure and involve putting together clues of objects from widely separated parts of the game.

My long-term favourite classes of games are turn-based strategy games like Civilization (I-IV; never tried V) and city-builder games like Zeus/Poseidon , Pharaoh/Cleopatra , and Emperor, all of which are quite old at this point. I’ve played through the Zeus/Poseidon scenarios twice (about 6 years apart), am trying the Cleopatra scenarios again, but haven’t finished Emperor. In the four versions of Civilization, I had a lot of fun at the lower levels of difficulty, but I’m a “builder” who just wants to peacefully grow my civilization, and at higher levels you have to be able to fight wars. Those aren’t fun for me. The same is true of other 4x games like Galactic Civilizations II: fun until there’s a war, then unfun.

There’s an obvious conclusion. I don’t like combat, and most popular games have lots of it. The small amount in the city-builders is OK, but there hasn’t been a new city-builder in a very long time. Now there’s the latest SimCity, but it’s an always-online game, and I’m not happy about that technology.

I suspect I’m a very small part of the market for computer games, but there ought to be someone out there who’s got an idea for a game that fits my build-stuff, low-combat, low-speed-input requirements. If you know of something, let me know.

Beauty and the Beast

Beauty and the Beast is a family favourite TV show at our house — one of three shows (along with Elementary and Dr. Who) that we all get together to watch. As of this writing it’s not clear if it will be renewed for next year; the TV reviewer in our local newspaper called it “on the bubble” a couple of weeks ago, and as of last week the Cancellation Bear said much the same thing. One of the things in its favour according to both sources is that its home network, the CW, likely can’t get enough replacements to let it cancel every poorly-rated show. Our Canadian carrier, Showcase, is constrained by what the CW chooses to do.

My wife and I started watching it once we found out it was based on the 1987-90 TV series of the same name, the first two seasons of which are among our all-time favourites (we do not speak of the third season, just like some people refuse to acknowledge the existence of The Matrix sequels ). Two of our three kids are still in town, were willing to watch the first episode with us, and decided it was worth the trouble of coordinating four different schedules.

We quickly realized it wasn’t going to be a whole lot like the older one. Only a few elements are carried over. There’s a career woman named Catherine Chandler and a “beast” named Vincent with super-strength who always shows up when she needs protecting; he has to hide his nature from the world, and they have a slowly-evolving romantic relationship. After that, not much is in common. She’s a kickass cop instead of an assistant district attorney. Vincent is only beastly some of the time and a hunk the rest of the time; Ron Perlman’s character had permanent leonine facial features and claw-like nails. The new Vincent is hiding from the secretive military organization that made him what he is; the old Vincent’s origin was never made completely clear, and he had to hide because people couldn’t accept someone who looked like a lion-man. The new show has a lot of police procedure; the old had a whole underground community hiding from the rest of the world.

I suspect the differences put off some fans of the old show; apparently the new show lost a lot of its initial audience after the first couple of weeks. We decided we liked it once we started treating it as its own thing instead of a nostalgia trip; if we’d never seen the original, I think we’d still have watched the new one. It occurs to me that might be a good life lesson: if something, or someone, doesn’t match your preconceptions or meet your expectations, try to appreciate it for what it is instead of criticizing it for what it isn’t. I imagine that’s the way a lot of geeks wish the rest of the world would deal with us.

All-or-nothing thinking

Recently my Internet contact +Keith J Davies announced he was going to try the A-Z challenge in April; it was the first time I’d heard of it, and I commented that at my usual rate of posting it would be the end of the decade before I could write 26 posts. Actually, at 13 posts since April 15, 2011, not including this one, it would be April 2015, but I wasn’t in a geekish enough mood to calculate before I commented.

I thought about it overnight and decided to try. I could have chosen just to make this announcement (calling the post “A-Z Challenge” or “April” perhaps) but then I realized I could talk about why I don’t blog much. It’s not so much that I have nothing to say as that I’m hampered by all-or-nothing thinking.

Continue reading “All-or-nothing thinking”

George Takei’s geek taxonomy

Last November failblog posted George Takei’s description of the hierarchy of geekdom:

  • Geek: Understands, creates, and fixes Really Cool Stuff.
  • Nerd: Understands and collects Really Cool Stuff.
  • Dork: Confused by Really Cool Stuff.

Personally I think he got Geek and Nerd reversed, since most geek websites I visit are primarily about popular culture rather than creating and fixing things — but lots of people use “geek” and “nerd” nearly interchangeably. But the main thing that occurred to me is that he left out one more category — one we no longer have a word for:

  • [?]: creates Really Cool Stuff by cleverly combining things nobody else would have thought to put together.

We used to have a word, but in popular parlance it came to have a much narrower and almost entirely negative meaning.

That word is “hacker.”

Continue reading “George Takei’s geek taxonomy”