And They Tell Me I Can’t Work With Others

I’ve been worried about getting down-sized next year, so when a friend and coworker suggested that I start networking in the developer groups around town — I didn’t quite jump in, but I did cautiously dip my toe in the water.

As I already had conflicting plans for an after-work meeting, I decided to attend a “full day” exploration of a JavaScript package. Several caveats here: “full day” is quoted because you don’t have to stay for the entire session, I’m familiar enough with JavaScript to know that I never want more to do with it, and I knew going in that it would involve paired programming. Paired programming is exhausting for me at the best of times, as it takes me conscious effort to be social. At worst, it’s a great way to make me dream of a locked office with a pizza slot in the door.

Fortunately, this was one of the better experiences I’ve had. Everyone was agreeable and we more or less fluidly moved around our table offering input as needed.

The package (Angular, for those who care about such things) was interesting, and by noon I’d started to get my head around its particular elven incantations. The exercises we did were too simple to really demonstrate the usefulness, but a good programmer has imagination, and I think I’m decent enough at it to see the applications.

It won’t make me jump into a JavaScript project willingly, but it’s nice to know that there’s something to help make the script less cumbersome.

I left early, because we’d gotten bogged down in a configuration nightmare on my laptop, but I’d still say that it was a good experience. I’ll definitely try the after-work meeting though. I don’t particularly enjoy having to wear pants on a Saturday.


Coding Fiction

It’s not entirely analogous, but there are ways in which programming is like writing fiction. Maybe it’s because I do both, and my lessons from one activity inform how I perform the other. Nonetheless, even if the connections are forced by my perspective, they are able to be connected. So here’s where I see them being similar, or at least having common usable approaches.

It’s easier if you have a plan. It doesn’t have to be exceptionally detailed, and it doesn’t have to be set in stone, but whether writing a program or a story it helps to have an idea of what the end result should be. I know that some folks like to just start writing and see where it takes them, and that’s fine. Whatever works for you is the way you should do it, right? Me, I find it a lot easier to put words down if I know what tone I’m going for and have some loose structure in mind.

You’d think that knowing what you’re trying to accomplish would be a given for programming. After all, there’s a requirements document and everything! Well, for most of my career I’ve been on agile projects, and very few of them had a requirements doc. Far too many, in fact, had us start writing code before we even knew what the project was about. There was one project at HoneyPot where we spent $1 million on development before the client had agreed on requirements. That went over poorly.

Entire sections may need to be rewritten. This is a hard lesson for writers, but it’s widely understood. What seemed like a great passage when written might need to go because of pacing considerations. Or a part of the plot wasn’t working, and you needed to rework the scene to support a revision. It’s all part of the process.

For many programmers with whom I’ve worked, touching code a second time amounts to failure. The ingrained model is “One and Done” — a sort of measure twice and cut once approach to coding. This of course assumes you have full and correct requirements, which you won’t. Ever. It’s simply unrealistic to believe that new requirements won’t lead to a rewrite of part of the code base. Nonetheless, I’ve seen a developer literally on the edge of tears because yesterday’s code didn’t support today’s business needs.

It’ll never be perfect. I spent 10 years rewriting the first three chapters of a novel. Those three chapters were pretty great! In that time Stephen King pumped out enough books to fill a shelf. Big, thick, hippo-choking books. Done is better than — well, not done. There’s a point called “good enough”, and it’s probably lower than you think. Just read a best-seller; you don’t even need complete sentences anymore.

I mentioned that programmers don’t like to revisit code. One tactic they use to avoid it is to make their code as perfect as they can imagine, able to take on everything they can think of. But you can’t think of everything, and there’s a point beyond which you’re spending time solving a minor problem when major work needs doing. Do a good job, but let it go.

Lastly, and most importantly, whatever gets the job done is right!

Billing Time

When colleagues find out that my degree is in English Literature, they look at me with confusion and ask how a came to be a programmer. The following is more or less what I tell them. Well, mostly more. People generally don’t have time for the director’s cut.

I was working in a college book store, entering invoices into the computer system and sometimes helping process deliveries. It was dull work, but at least it didn’t pay well.

Wendi was working for a local firm that sold its own software and provided butts for consulting gigs. It was a small company run out of a decommissioned rectory. When their receptionist/recruiter moved out-of-state, Wendi suggested that I apply for the job.

It was a terrible idea. I hate phones. Calling in a pizza order leaves me with a racing pulse and the start of a tension headache. I knew nothing about computers beyond minimal experience with BASIC and PASCAL, and I was terrified of strangers. Making a cold call to a programmer about a job I didn’t comprehend lay far outside the realm of Things I Could Do.

So I applied.

To my total surprise I was called in for an interview. A few people talked to me for a bit, and I wound up standing in the parking lot for an hour listening to the company president as he smoked most of a pack of cigarettes. My ankle hurt, and the smoke made my eyes water, but I stood there and took it for the sake of the job.

Turns out they’d already decided to hire me.

A week later I was helping my new boss clear space in HoneyPot, Inc. for our new office, and he told me how I’d come to be a recruiter. I’d mentioned having finished the first draft of a novel, and he’d been impressed by the initiative and drive that indicated. He figured I wouldn’t have a hard time learning the job.

His faith was touching but entirely misplaced. As a recruiter, I was useless. The one and only call I made was a disaster, and I wound up explaining to my poor victim that I had no clue why I had been asked to call him in the first place. Fortunately the company with which we’d just merged into Honeypot had its own, well-oiled recruiting staff. I was not asked to join them, and I never again even pretended to be a recruiter.

That left me with reception. Again our partner office already had a receptionist, and she was incredible. I sat at our little side door and served little purpose but to tell employees where the managers had disappeared to.

One day the phone rang, and I stared at it in terror. I forced myself to answer, which was good as the caller turned out to be the VP who’d been the president of the company I’d hired into. His flight had included a stop-over, but delays in the initial stretch had led to him missing his connecting flight. It looked like he’d be missing his business meeting.

“Oh, man,” I sympathized. “That sucks.”

There was a lengthy pause on the other end as he accepted that I was unlikely to be of any use in the situation. Finally he told me that he’d call the representatives of the company to reschedule and work out arrangements to come back.

“Okay,” I told him. “Good luck.”

As soon as I hung up, I realized that I’d just lost my job. What I didn’t realize was that I wouldn’t be fired, not for another four years.

Having started precisely at my level of incompetence, I had nowhere to go but sideways. I wound up assisting an office administrator. My new responsibilities consisted of entering time sheets into an Access database and managing the software library. The first kept me busy for just over half of a day each week, and the second consisted solely of telling developers they couldn’t have the software they wanted.

Incidentally, after I became a developer the admins saved on personnel costs by locking the software in a closet and pretending to not have the key.

I had a lot of time on my hands at precisely that moment in the cultural zeitgeist when everyone was making one-page websites about their friends and interests, usually with lots of blinking text and aggravating MIDI loops. The majority of my work time was spent making constant tweaks to my Geocities page.

One day an account manager caught me. I’ll call him Tom. He looked at what I was doing and asked why I wasn’t out billing. I laughed. Tom laughed. Within a week I’d been assigned a contract to make a dynamic Word document for a school district to use. I’d become a developer, and it would be many more years before I felt like one.

I finished a second draft of that novel before writing it off as an unsalvageable mess. It will never see the light of day, and that’s alright. I have other stories in me, and after all this one gave me a career.