This is an archived course. Information may be out of date, some links are broken and email addresses have been removed.

14 Hack of All Trades

I taught myself programming around eighth grade, using whatever computers
I could cadge or borrow or sneak onto -- this was before most schools
had computers for students to use, and I couldn't afford to buy one.
I enjoyed programming quite a bit, and worked several summers in
local research labs (chemistry and cell biology) doing little
programming jobs -- statistical analysis, graphic visualization of
data, and image processing, which I loved doing.

I was originally aiming at a career in physics, not programming.
In college I majored in mathematics, but I spent most of my spare time
programming and hanging out with the CS students, learning and sharing
programming and Unix tricks.

The summer before I was due to graduate, I took a summer job in
a research lab in New Mexico. My job was ostensibly half time
programming, half time systems administration for the network of Suns
and other Unix workstations used by the group. I didn't have any
experience with systems administration -- I'd never had a root
password before! -- so it was sink or swim, lots of manual reading and
guesswork. It was very exciting, and fun, if sometimes stressful.
I learned a lot about Unix systems administration, and about dynamical
systems and cellular automata (the main topics of research in the
group). And I had the chance to work with some very smart and
creative scientists.

It was so much fun, in fact, that when the summer ended I didn't go
back to school. I stayed on, ultimately for two and a half years. By
that point, I had pretty much decided to stick with a computer career
rather than science. At the same time, I was somewhat frustrated that
I was doing nearly all sysadmin, not the half-time programming which
had been the original plan. This was partly my own fault. The
network had grown and so had the user base, so people were forever
wanting help with things, and I wasn't good at saying "No, I can't
help you now, this is my programming time, so go RTFM for yourself."

Then a visiting researcher offered a job in his lab (same deal: half
sysadmin, half programming) and I accepted, and moved to San Diego.
That worked out much better: he had a small group of grad students and
some interesting problems to work on, so I became the group's
programmer, writing simulation code on Suns and dealing with the
occasional minor system problem. But after a year, the grant that was
paying my salary wasn't renewed, so I had to move on.

There followed a discouraging time of job hunting. The economy was
bad, and in addition there were major defense cutbacks going on (most
of the computer jobs in San Diego then involved defense contractors)
so the area was full of unemployed programmers competing for too few
jobs. Without a degree, and with all my experience oriented toward
scientific programming in research labs, I wasn't doing well.
So I went back to school and finally finished up my math degree.

After I graduated, things were a bit better and I landed my dream job:
Unix systems programming for a company that made dedicated image
processing machines, working for a terrific manager who was also a
good teacher for what I needed to learn about their SCSI driver.
A month later I found out the down side: the company was bankrupt,
and a few months after they hired me they laid off most of the staff
(including, of course, the most recent hires).

I'd had enough of job hunting in San Diego, so I started applying to
jobs in the Bay Area, where things were much healthier. I ended up
in San Francisco: yet again, half sysadmin, half programming. But I
was sick of sysadmin by this point (I'm really a programmer at heart)
and the job didn't pay very well. I was hanging out with people in
Silicon Valley who made triple what I did, and I wanted some of that.
Friends who were working as quality assurance contractors, which
involved some programming, not just black-box testing, encouraged
me to apply; I did, and landed a contract fairly quickly.

That accomplished several things at once: it more than doubled my
salary, because contract agencies didn't base rates on what I was
currently making as an employee the way employers always wanted to
(friends always told me "just lie about what you were making,
that's what everybody does!" but I just couldn't see doing that);
it got me into a computer company in Silicon Valley, where I was part of
an ongoing software project working fairly closely with the developers;
and it got a job on my resume that didn't involve any sysadmin.

The QA job wasn't bad. It turned out I was pretty good at it (I seem
to have a talent for finding edge cases and making things break, and I
was fairly good at finding reproducible cases and writing up reports),
and I was working with good people. But I still was happiest when
writing code, so after a year or so I started looking for programming
contracts. It looked like C++ and Motif were becoming the hot new
things, so I studied both in my spare time, and eventually landed a
contract working in a group that was doing C++ and Motif programming.
It was only a 3-month contract, which made me very nervous, but I
couldn't pass up the chance.

Heaven! I finally had a job that was full-time programming, and I was
SO much happier. The group was great: a small group who cared a lot
about the software they were building, with a fantastic manager. We
were making a CAM (computer-aided manufacturing) program for making
printed circuit boards, and a couple of the existing programs were old
and crufty (inherited from other people, not written by people in the
group) so they wanted a contractor to come in and patch those up. I
didn't mind; the code I was working on was indeed crufty, but my job
was to make it better, and in the end (I stayed there several years) I
had the chance to rewrite it from scratch, with clean code and a nice
Motif interface. I learned a lot about C++, Motif, and how to combine
them in a clean way.

Eventually I moved on to other contracts, at other companies around
the valley. Most were initially short contracts, 3 or 6 months, but
they always ended up lasting more than a year. I found I really liked
contract programming: I was quick at getting started on unfamiliar
projects, and good at estimating how long a particular task would
take, two things that are very important for contractors.
I worked through a contract agency most of the time, so I was able to
buy health insurance at reasonable rates and they handled the billing,
though I did contract directly to companies once or twice. I didn't
particularly want to convert to regular employee.

Until I got an interview at Netscape and that all flew out the window.
They were looking for employees, not contractors, and when they made
me a good offer, I wasn't about to turn that down.

I ended up staying at Netscape 7.5 years, far longer than I'd ever
stayed anywhere else. For a long time it was because I believed in
what we were doing -- it was cool being part of open source Mozilla.
And partly it was the terrific people in my group; we worked together
really well, and by that time I'd seen enough groups to appreciate how
important that is. But with the Time Warner takeover, gradually the
company got less and less interested in the sorts of projects I
thought were important, like open source and cross-platform work,
and when they finally laid off everyone in my group, I was more
relieved than dismayed.

So I'm unemployed now. I've been on some interviews, but mostly it's
recruiters who ply me with phrases like "open source" and then the
interview turns out to involve some closed source windows-centric
project. Returning to contracting/consulting has some appeal,
especially if I could help someone make Linux more usable.
Alternately, I'd love to go back to scientific programming, but right
now funding is tight for science. So I'm examining my options, taking
college classes, working on some of my own open source code, doing a
little writing, a little public speaking, looking into teaching.
Fortunately I got into the habit of saving when I was fairly young
(my mother worked in an industry with frequent layoffs, and my years
as a contractor reinforced the need to keep a nest egg) so I have some
time to decide.

I don't know what the next step is, but there are lots of possibilities!