[Home | Contact | What's New? | Products | Services | Tips | Mike |
Living with Schizoaffective Disorder

Letter to a
Computer Science Professor

I have a terrible problem, it has plagued me throughout
much of my twenty-year career as a software engineer.

Michael David Crawford, Baritone,

July 4, 2007

Copyright © 2008 Michael David Crawford. All Rights Reserved.

Hey lonelyhobo, prepare to hurl your most-cutting invective: this one's for you.

This Summer I'm taking a Computer Science course at UC Santa Cruz called Algorithms and Abstract Data Types. You may be surprised that I'd feel the need for such a class, but my degree is in Physics and not CS. My programming is all self-taught, so there are a lot of gaps in my understanding of theory.

I sent the following letter to my professor just now, regarding my first programming assignment which was due, at the very latest, at ten o'clock this morning. My mail was plain-text, but in interests of Web 2.0 Compliance, I have marked this version up as XHTML 1.0 Strict.

I'm asking him for help. I'm asking you for help as well.

Subject: I have a problem.

Dear Professor,

I have a terrible problem, it has plagued me throughout much of my twenty-year career as a software engineer.

I'm hoping you can help somehow. It's caused me and my wife no end of grief.

In some respects I'm one of the best in the industry: I was once a "Debug Meister" on an elite team at Apple, where I would use assembly debuggers to reverse-engineer third party applications used to test new builds of the Macintosh system software. If a tester got a crash, I'd have to determine if it was Apple's fault or the fault of the third-party developer. One time I isolated a very difficult-to-reproduce crash caused by Microsoft Word, and was able to give Microsoft's engineers the exact byte offset in Word's binary where their erroneous machine code lay.

In another case, I reverse-engineered a complex, proprietary project planning database created by a program called Movie Magic Scheduling. It's used in Hollywood to plan everything involved in making a movie. I just created a bunch of small test databases, compared hex dumps of different versions, then wrote down the file format specification as well as a C program to dump out the database in human-readible format. In just three weeks I was able to dump out the plan for a full-length motion picture. My client needed the database format to enable their software to interoperate with Movie Magic.

In the mid-90s, I invented a completely novel lossless bitmap graphics compression algorithm and its file format. It compressed 8-bit indexed images about as well as the LZW used to compress GIFs, but was blazingly faster to decompress, an important quality in the days of 20 Mhz machines. From initial conception to complete, ready-to-use code took only three weeks. It was used on a lot of multimedia CD-ROMs that my employer published.

This is all to make it clear that I'm no slouch. Yes, I don't have much formal CS background, but that's why I'm taking your class.

My problem is this: I often have trouble focussing on my work.

I've been sitting here at my desk, all through the night since last night until now at eight in the morning, and I haven't yet typed a single character of source code for the first programming assignment. I've largely been staring into space or finding other distractions to occupy myself with.

Now, I want to make clear I'm not asking for an extension: I've just now decided I'm going to give up and take a zero on the first program.

I know I'll still need the List class, so I'll write it later when I can somehow overcome this. I'm completely confident that if I can write it at all, that I can write it really well. Usually if I can get started at all on some work, and get into the flow, I can code like the blazes, and do a top-notch job as well.

For eight years I was self-employed as a software consultant. After the dot-com crash, clients were no longer willing to pay me hourly, so I had to take fixed-bid work. I would set up milestones that all seemed reasonable, but then they would all take two or three times as long because I'd go days on end just staring into space. One time I bid a complex embedded job for three months and it took eight. I came within five days of having my house foreclosed, when I finally made a milestone and got a check big enough to bring my mortgage up-to-date.

At the time we were living in Maine. The winters there were very long and bitterly cold. We'd run out of heating oil and not have the money to buy any more, so we'd shut off the furnace and my wife and I would hole up in my office for months on end, with only an electric heater for that one room. We spent more than one winter that way. One other time we ran completely out of food with no money to buy more. The only food we had was a box of cake mix so my wife and I split and ate the dry powder. I'm absolutely serious!

My title at my current job is Principal Software Engineer, two grades above Senior Software Engineer. I'm making $CHUNK_OF_CHANGE a year now - thank God I'm no longer self employed! They seem happy with my work, and are even paying for me to take your class, but I know - and my wife knows - that I'm just faking it. I spend most of my time at work just staring into space, hoping not to get caught. The reason they're happy with me is that from time to time I have great bursts of productivity, and so am able to meet all my deadlines.

I make $CHUNK_OF_CHANGE now - but I could easily earn twice that if I could overcome this. I'm completely confident of that. One way would be to write my own software product.

I long ago gave up any hope of ever being able to really overcome it. My plan instead is to change careers entirely: I compose for and play the piano. I'm a long way from passing the entrance audition, but I'm studying piano and music theory very diligently. My hope is that one day I'll go back to school to study musical composition. I want to write symphonies someday, and I have every sense it won't give me the trouble that coding does.

I have long felt that I made a mistake by going into software engineering at all, but Physics wasn't working out as a career, and I needed a way to pay the rent. There was no way I could have made it as a musician back then.

The problem I've got is that as a result of having screwed up my consulting work so bad, I'm in a smoking crater of debt, so I have no choice but to write code until it's paid off. Bankrupcy wouldn't help, because much of what I owe is taxes, and taxes aren't forgiven by bankrupcy.

I know it's not likely that you'll have a solution to my problem. But I wanted to cop to the truth as to why I'm not going to turn in my programming assignment. It's the reason, but by no means is it an excuse.

I do want to say that I'm enjoying your class tremendously, and getting a lot out of your lectures and my reading. I feel I did well on my homework. The only sorting algorithm I knew before your class was QuickSort, and even then only in a vague way. I didn't have the first clue about Insertion or Merge Sort.

Your student,

Mike Crawford

Witch Doctors

Back in Nova Scotia, I sought professional help for my inability to concentrate. I was treated by a psychiatrst and an occupational therapist - who were just wonderful - and, for a time, by a psychotherapist.

She seemed promising at first; her PhD was from a top school, and she had me take the Minnesota Multiphasic Personality Inventory, a very thorough psychological diagnostic test. She was very interested to hear of my interest in music, as she played the piano herself.

Things seemed to go well for a while, until I gave up my self-employment in late 2005 to take a job at a company that publishes Human Machine Interface / Supervisory Control and Data Acquisition software - HMI/SCADA. It's used for the high-level control and monitoring of automated machinery - one of their installations controls an auto plant that makes a new car, if my memory serves me, every fifteen seconds.

They were all very nice people, but I was dismayed that they offerred me half the salary I expected, because, the owner said, "It would be unfair to the rest of the team to give you more than they got when they started" - that is, when they were hired right out of school. I had over fifteen years of experience, with many shipping products to my credit.

I was completely flummoxed when I started logging defects in their bug tracking system regarding serious errors in their code, defects that could cause the complete failure of their product. HMI/SCADA is safety- and even life-critical software; it's failure could drop a car on someone, or make gas pipeliness explode.

The owner sent me a terse email demanding that I stop filing such bugs.

I wrote in Potential:

I am very sorry to say, that my experience with the mental health community is that they overwhelmingly urge me to accept second-best...

My therapist - who I refuse to see anymore - thought that the awful, low-paying job that I recently quit was of such great benefit to me, that I should quit wasting my time with my writing and my music and just devote myself completely to the job. She said "You owe it to your job to give it your full attention", and not do such things as stay up all night writing articles for my website. I persisted with my writing despite having the job because I knew my writing represented a hope for a brighter future for Bonita and myself in a way that the job simply did not. (My frequent all-night writing sessions put me in the emergency room in December, because I would then go to work without having slept.)

Fuck her and everyone who looks like her.

Among my last words to my therapist, before I stormed out of her office, was the promise that I would play in Carnegie Hall someday. I'm sure she thought I was delusional. I've been mulling over the letter I intend to write, to explain why I fired her. I am absolutely convinced that she didn't listen to a single Goddamn word I said the entire time I was seeing her, or she never would have told me to settle for that fucking job. Besides pointing that out to her, I'm going to say "Crushing a man's dreams can hardly be called therapy".

I was so enraged that when I got home from her office I screamed and hurled a full coffee cup onto the floor so hard that it shattered into thousands of tiny bits. I frightened Bonita terribly, so much so that the memory of it still haunts her.

Then I quit the job; I have never regretted doing so.

Sand in the Hourglass

I'm saying all this to help you understand that I have no intention whatsoever to stay in the software industry.

That I still write code is just a means to an end: music school, and a new career as a composer and performer. I have many debts - debts I cannot escape - and there will be no music school for me until they are paid off.

The company I'm with now is a good one, not at all like the HMI/SCADA company. My division makes harware RAID cards, used to ensure disk storage is reliable even in the face of drive failures. There is no tolerance for error in this business: even a single bit of lost data could cost one of our customers millions. So the company takes the trouble to get the job done right. They give me what I need to feel good about the work I do for them. (I work on the Mac OS X device drivers for their cards.)

I wasn't too sure at first because they had a couple bad quarters around the time I started last July. Being a public company, they were forced into layoffs when the didn't meet their numbers. It didn't make me feel at all secure that my hiring manager was laid off in between my interview and my first day on the job. Later, when I wasn't sure whether we would meet our target, I warned Bonita that I might lose my job if we didn't, and got into an awful panic until listening in to our conference call with the Wall Street analysts set my mind at ease.

For a while I was looking around to see what other work I could get, but in the end decided I'm going to stay with the company until the time comes that my debts are paid off and I'm ready to move back to Vancouver and devote myself full-time to preparations for my music school audition. And why?

Everyone at the company - absolutely everyone I have encountered there, from the receptionist to my team members to my manager to my division's general manager, has been extremely nice to me. This is quite a change from so many years as a consultant getting kicked in the gut by many of my clients, and is a rare find in a cutthroat place like The Valley.

Maybe I could pay my debts off quicker with stock options at a hot startup - but I've worked at lots of startups, and they're never nice places to work, and far more often than not their stock options turn out to be worthless.

That's why, despite my certainty that in a few years I'll be giving up coding forever, for now I want more than ever to overcome this problem with my concentration. It's not enough for me to just meet my quarterly goals, to meet my product ship dates or to fix all my bugs. I have always been able to do that despite half the time being unable to code at all:

I want to excel at my job, because I want my company to succeed, and I want everyone else who works there to benefit from my good work.

That's why I'm asking for your help in overcoming my inability to concentrate on my work. I've struggled for many years to fix it, and in fact it was a problem long before I ever became a coder; it has plagued me for my entire life, even since I was a little kid.

I am grateful for any advice you can give me.

I need to go to bed now.

-- Michael David Crawford, mdcrawford@gmail.com

[Home | Contact | What's New? | Products | Services | Tips | Mike]