Well, this should be interesting

I’ve volunteered to help write a new scheduling and registration system for WisCon, the world’s leading feminist science fiction convention. From scratch. (Which is, yes, I know, a Thing You Should Never Do. But the old system is a mess of hand-tooled Javascript on top and — this is not a lie — FoxPro underneath, all written and maintained by a single developer who is no longer with us. If there’s ever a time to rewrite from scratch, other than maybe three years ago while the old system was still working, this is it.)

Anyway, that’s only sort of interesting. The interesting bit is that the plurality language on the volunteer development team is Perl. So we’ll be going with LAMP, or possibly BAMP if our BSD fan gets her way.

It’s about ten years since I last wrote a Perl script. Looks like I’m going to have to put Scala and Scheme on hold and hit the books.

Imperative knowledge

As part of my ongoing project to get a do-over on my misspent youth, I’ve started reading the lecture notes for MIT’s EECS 6.001: Structure and Interpretation of Computer Programs.

And I have to say: damn.

I mean, I actually feel like I’m learning something from about Slide Four. Contrast this with the freshman introductory C course I dropped in week one (I wanted to program Macs, not VT100s! — I was an awful hacker), and I can really see why smart people complain that CS is turning into Java vocational training. It’s not at MIT, but it was already on its way (to vocational training, I mean; Java wasn’t yet a twinkle in James Gosling’s eye) when I was at UCSC.

Which is probably one reason I ended up a Japanese major. And that it took me six years after high school to get back to programming. If they’d made CS sound half as interesting as linguistics…

Anyway, I’m hoping to go through the whole course, and write it up as I go. My track record on projects like this is not stellar, but we’ll see. I wish there was someone I could pay to grade me on it.

Meanwhile, speaking of writeups and track records, I still haven’t written up the monad project, but I did throw together a Scala “brush” for Alex Gorbachev’s syntax highlighter (basically just the Java brush with a different set of keywords and an extra regex for the non-alphabetic keywords like => and <: that confuse the regex engine, but it works) so when I do finish writing it up there will be pretty-printed examples:

package pizza;

object ListExample {
  def main(args: Array[String]) {

    val list = List(1, 2, 3)
    println(list map { x => x * 2});

(Also I managed, for purely decorative purposes, to work this diagram into the novelette I finished drafting this weekend. I think for the final version I might prefer this one — it’s fancier, and less completely unrelated to what’s going on in the text than the other one. But I’m not sure I can be arsed recreating it in Illustrator. It seems like I ought to be able to just generate a PDF from the TeX source and use that, but when I try — I have only the barest exposure to TeX — I only get error messages.)

Code monkey get up get coffee

I think I’ve mostly recovered from houseguests, bronchitis, a Hugo award nomination, and several days spent driving a zippy little turbo diesel Alfa Romeo at high speeds over narrow French country roads. (And yes, I did spend all my recovery time listening to Jonathan Coulton MP3s, why do you ask?)

Meanwhile, Neal Gafter’s posted some further notes on his Neapolitan ice cream puzzler, including a couple of solutions that should be interesting to anyone trying to decide what does and doesn’t constitute “enum abuse.” And Eric Lippert’s corrected my conclusions on C# readonly vs. Java final; the C# approach is rather interesting, I think.

Eric’s also commented on Dan’s question about state management in functional languages. I’ve got a gold card coming up; maybe I should do something with this Scala monad tutorial


The colocation people housing the discontent.com / chrononaut.org / allstarstories.com server decided that the right response to a faltering economy was to double their rates, and my kindly host Brandon decided that the right response to that was to take his business elsewhere, so we’ll be moving this week — down Monday, hopefully up again by Wednesday, but one never knows. Anyway, if you can’t reach this site or at any of my non-gmail email addresses, that’s why.

13949712720901ForOSX (updated)

(Crossposted to Chrononautic Log.)

I’m hoping I’ll have time to post the handful of pictures I took in Antwerp before I head back to Pacific Standard Time on Sunday, and maybe give a more full report on the trip. But one thing my voyage to the City of Eternal Night did was remind me was that once upon a time (in the age of innocence, you know, before Condé Nast bought Wired magazine) I thought technology was fun. It also made me think maybe I wasn’t, back then, just being young and Slashdot.

I came back to programming after grad school with the idea that it was an interlude, that I’d work for a year or two, pay off some bills, and then do something classy, like move to Berkeley or Ann Arbor and get myself a history PhD. Seven years, one popped tech bubble, one layoff, three jobs and a lot of credit cards later, I realize I’ve still been thinking of my day job that way, as something temporary, despite all evidence to the contrary.

The way I see it, I’ve got two realistic choices.

  1. There are six million professional Java programmers working today. All six million of those programmers are busily pumping new code into everything from the back ends of hedge funds to the front end of the Large Hadron Collider, and if the past is any guide, a lot of that code will be around, and needing maintenance, for a long, long time. I’d say right now, conservatively, I’m probably in the top half million. I can probably keep shuffling from day job to day job, without giving any serious thought to career security, for another fifteen or twenty years — at which point I’ll suddenly become totally unemployable, but we can burn that bridge when we get to it (and anyway, with luck I’ll be in management by then).
  2. From the edge of the crowd, it’s easy to lose sight of the fact that somewhere in the middle things are actually happening, that interesting people are doing interesting work, that writing software can be interesting in itself and not just necessary drudgery on the way to having software that (one always hopes, though in practice it’s often far, far from the case) does something interesting. The question is how to get to that place and become one of those people — at least, to find out where I really fall among that six million. (Apart from the obvious way, that is, which would be to start life over fifteen years ago and get a PhD in computer science from Carnegie Mellon.)

At minimum, option 2 probably involves — at some point — moving back to Silicon Valley. (Compare: film::LA, publishing::NYC, politics::DC, oil::Houston. Yes, you can do good work elsewhere, but you’re just not going to find the same support network or the same concentration of the top people in the field.) That would feel a little weird, but it wouldn’t necessarily be a disaster. Anywhere with a wide selection of good Mexican, Chinese, Japanese, Vietnamese, Ethiopian, Afghani and Indian food can’t be all bad.

But that decision’s at least a year or two off. In the mean time, I can at least start paying some attention to tech issues again. At some point maybe I’ll start a second blog [Update: Ye’re lookin’ at it], so as not to bore all of you folks with natter about closures and superpackages and run-time type inference. Till then, well, you’ll just have to put up with the occasional incomprehensible post title — complete with incomprehensible context:

Dear Apple,

How am I supposed to make any progress in my career when you still haven’t ported Java 6 to the Mac?


A Loyal Customer