Red Thunder

Yippee! John Varley has a new book coming out, in March 2003, called Red Thunder. A while back, he’d mentioned a possible work called Iron Mountain Blues; this one looks like it fell out of a collaboration with Spider Robinson, and isn’t in the Nine Worlds story line.

If you haven’t read Varley’s short works (esp. The Persistence of Vision, anthologized in a collection of the same name), then get thee hence, etc.; it’s great stuff. His Gaia trilogy is also good (stick through the first book; it’s good, but it gets lots better).

I discovered a Heinlein book I’d never read! It’s Beyond This Horizon. How did this happen?

Flipping Bits and Twisting Knobs

For four days, the dialog box that told me I had a bug in my program said the following:

Error -1

It took me four days to figure out what the problem was; days of dinking around with registry files and GUIDs, days of groping through poor, buggy documentation and horrible sample code, days of scouring the nets for even an inkling of what the problem was. I was calling into someone else’s API, and some tiny thing somewhere wasn’t lined-up quite right, and it sucked. All I could do was to change stuff, keep flipping bits and twisting random knobs until something changed, and use scientific method to narrow down the cause.

This is the worst kind of bug. I can deal with the race conditions, the obscure memory stompers, the uninitialized variables that cause random behaviour. But dealing with a flaky, fragile API that gives you no clue (other than a dumb dialog box that says “-1”) makes me mad and want to break things.

The best bug I ever found was in the Newton, a race condition that showed up only every few days of heavy operation. It turned out to be a one instruction window in the kernel, where if you hit it just right it would freeze a critical part of the whole operating system. It took two instructions to fix it. It took two weeks to find it, and when I closed that bug I was walking on air.

Finding the “Error -1” bug didn’t make me feel very good. While it was good to move on from it, the whoe experience could have been alleviated if someone had thought to return a meaningful failure value, something other than -1. [You also do not throw up an error dialog from a purely function-call API, but this is perilously close to ranting now.]

Even if you’re on an embedded system, where bytes are precious and you can’t store error codes, or can’t be bothered to invent them, you can return unique values. One version of Tiny Basic I saw (back in the late 70s — it was published in an early edition of Dr. Dobbs) returned code offsets for its error values. At least you knew that error 1434 meant “Missing semicolon” while error 1542 mean “Missing gosub target,” and even if the numbers weren’t in a nice, pretty sequence, you could suss out what was going wrong pretty quickly.

Really don’t write stuff that returns -1, and don’t write functions that fail with a boolean false or that throw a mere Exception.


VC Fight

My phone rang. It was Oswald, in a panic.

“You gotta get me out of here, man.”

“Look, I know that doing a Java start-up is no fun these days, but I just don’t have anything for you. Even Big Bob had trouble finding something when Turnover finally turned over.”

“No, you don’t understand. It’s horrible. The VCs had a fight. For the past month we’ve had a different CEO every week. Last week they brought in a psychiatrist who interviewed everybody. Have you ever been head-shrinked on the job?”

“Er, no.”

“Have you ever been asked by one VC to spy on another VC?”

“Not exactly.”

“They disappeared nine people last week. They were just gone, no notice, no goodbyes, just cleaned-out cubies and disabled accounts. It’s like living in fucking Nicaragua, man.”

Oswald is a developer I respect; he’s got a good sense for design, but he doesn’t get all purist and try to ship a year-late perfect diamond. The folks who work with him respect him. He ships nice, solid stuff that doesn’t shine unless it has to. I told him I’d see what I could do.

It turns out there’s not a whole lot you can do for someone living in Nicaragua. The VCs in question were pretty shady; some Taiwanese PC manufacturer and another group who generally invested in banks got together and thought it’d be a good idea to fund a video game start-up. In Java. I wondered if Oswald had been straight with me.

“Our president is a pathological liar, the marketing guys can’t change their PowerPoint slides without ducking into the bathroom for a toot, and half the staff are contract slaves from overseas. They got all excited about Software Patterns. Last week, everything had to be a factory. Before that it was flyweights and singletons. The guy who runs the engineering show here is the Elron Hubbard of cargo-cult programming, and I think if you disagree with him, it’s …” Oswald make a sound like “Shhhlick!”

Imagine you are a VC who has funded a product that is completely out of control. You can’t get straight answers from anyone. What do you do? You pull the plug, of course. But first you head-shrink all the employees to find out the truth; you’ve been lied to, you want to find out by whom.

Oswald managed to bail to another start-up (not doing Java), and the disaster he left imploded a few months later. The names and products have been changed to protect the etc., etc.

Welcome to Silly Valley.