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

10 My mid-life career change to software

Hi all,

This is the story of how I changed careers in mid-life to become a
software engineer. At the end I have a list of what I think are some
useful tips to help anyone interested in changing careers to software
development.

Ancient History

I didn't stumble into a computing career until I reached middle age
(mid-30's) and realized I was bored and wasn't ever using my brain at
work. Right after high school, I'd gotten a Bachelors degree in
Advertising (via the Marketing Department rather than art). In the
U.S., that's a 4-year degree coming after high school. While pursuing
that degree I was exposed to both FORTRAN (via punch cards!) and the
old-fashioned BASIC (non-visual). I actually enjoyed them both quite a
lot and even went home for the summer and wrote a program on my
father's old Radio Shack TRS-80 (1980s) to manage some inventory for
him. The only problem with pursuing that as a career was that I
couldn't bear the idea of giving up my "cool" image to join the nerd
crowd in CS, so I settled for advertising because it seemed
interesting.

Advertising is a tough field to break into, and the pay isn't
impressive. Eventually I ended up doing desktop publishing and graphic
arts for a small management company out in the boondocks (my rural
little hometown in the Midwest). It was nice work, I spent my time
creating all of the advertising for the companies they managed, but it
didn't really satisfy me. They noticed that I had an aptitude for
computers and put me in charge of their new little NT 4.0 Windows
network. Mostly that just involved installing software on computers,
fixing little problems that came up, and inserting network cards into
new machines.

Around that time, I decided I was really irritated with Adobe Corp.
for putting a layers feature into Photoshop and Illustrator, but not
into PageMaker, so I decided if they couldn't be bothered to do it,
I'd figure it out for myself. So in an astounding act of naivety I
went out and bought a big fat beginning Visual C++ book with the idea
that I'd swipe layers out of one of those programs and simply patch it
into PageMaker. (Of course I realized that the idea was complete
nonsense, but I was feeling pretty displeased with them at the time
and it's amazing what a person will do when irritated.) As I read my
fancy new C++ book, I remembered how much I'd enjoyed programming long
ago, back when I was still maintaining my "cool" persona, so I decided
to learn more. As I started to dig deeper I realized that it would
take forever to do on my own with no mentors (or even anyone at all in
my whole county, male or female, who even had a slight interest in
computers), and I didn't have that much patience, so I thought about
going back to school.

I Used to have a Life

I wrote a letter to the CS department of a mid-sized state university
near my home and asked them to mail me information on their program.
They promptly mailed me a brochure for the graduate program (which was
for a masters degree, a 2-year post-bachelor degree). I was aghast! A
masters program seemed unthinkable considering how little I actually
knew about CS. I did some research on my own and quickly found out
that because I already had a bachelor degree I would only qualify for
financial aid if I pursued a masters degree. Totally discouraged, I
gave up on that wild idea.

A few weeks later, out of the blue; the chairman of the CS department
telephoned me at work to ask if I was planning to apply because the
deadline was fast approaching. I was shocked and stricken with shyness
and babbled on about how I wasn't qualified to get an MS, but he urged
me to apply anyway because they had a special program for those with a
degree in other fields. If he hadn't called me and hadn't been so
encouraging and insistent that I should proceed quickly, I probably
would have permanently given up on the idea, but instead I filled out
an application in secret (didn't want my family and friends to find
out about that crazy thing I was doing). To my complete and utter
surprise, I was accepted!

School was difficult, but wonderful! I learned so many things that I
wouldn't have on my own and met some very bright people. I was
required to take most of the undergraduate CS courses before being
allowed into any masters courses, which resolved my ignorance problem,
and financial aid was OK with that arrangement so long as I was
proceeding towards a degree. I was a little skeptical in the beginning
and wasn't totally sure I'd actually enjoy computer science, but the
deeper I got into it, the more I realized that this is what I love. A
good program is like an extraordinary work of art to me.

I finished off my degree by completing a Master's thesis on the topic
of translating compiled Pascal machine code into Java bytecode, so
that a Pascal program could be run in a Java Virtual Machine. The idea
of translating random binaries into code that can run in a virtual
machine is fascinating to me. It wouldn't have to the just be the JVM,
the forthcoming Perl Parrot VM could be used just as easily. If you
ignore the obvious legal issues surrounding it, I think everyone can
remember some instance where they'd like to take an old program they
have sitting around on some obsolete machine and get it to work in a
new machine with some different OS. I was even fortunate enough to
have a paper based on it published for a conference (co-authored with
that same chairman of the CS dept. - he really is a terrific person).

I finally emerged from school during the big Internet boom in early
2000, so finding a job wasn't very difficult and suddenly I found
myself in Silicon Valley doing programming for a living. It was a big
thrill to get a little box of business cards that had my name on them
with the title "Software Engineer".

Career and the Future

I was amazingly lucky with my first job, because I had a great manager
in a small startup company. We were providing a caching solution to
help speed up Internet connections for small remote offices of large
corporations. We developed smart web proxy servers that could
understand commands from a management application and upload files in
advance of when they would be needed. It was really interesting stuff.

My manager was a woman, one of the few in the company, and the first
big task she assigned to me was to write a server that would speak a
custom protocol we were designing. It was intended to be the main
communication link between the management app. and the array of proxy
servers. It was a very small company, so there weren't any other
people available that she could assign it to at the time. Remember, of
course, that I was really green (a newbie straight out of school) and
so I hadn't built up much self-confidence in my skills yet. I was
absolutely terrified that I wouldn't be able to do that job, so I went
home every night and read book after book on multi-threading, I/O, and
anything else I thought might help. In the end I did it on schedule
and I tested the life out of it (mostly to soothe my fears that it
wouldn't work and would be the cause of an early end to my new
career). My server ended up being the most stable component of our
entire product :) and QA loved the protocol testing tool I created.

Now I'm on my second job since that company didn't survive the big
Internet crash. Both jobs have been using Java (with a little Python)
and I've had the opportunity to do a lot of other things. I've found
that I have a _huge_ preference for backend over front-end. My current
job is primarily backend stuff so I should be happy, but I'm still not
completely satisfied, hence my interest in Linux.

During school my favorite classes (by a landslide) were on the topics
of operating systems and compilers. I loved all of that nitty-gritty
stuff, and I sorely miss it now. Java, in particular, never seems to
give a person much of a peek into the underbelly of what's going on.
All of the libraries have already been written by somebody else, so
all I ever get to do is read API documents and use other people's
interesting stuff. I want to do those things myself. I guess what it
comes down to is that I'd rather write a JVM than just use one. Don't
get me wrong, though, my current job is a very good and stable one and
I get to program, which is all I really want to do, but I do worry
that I'll forever be pigeonholed as a Java person and never be able to
get anyone to hire me to do anything else. Because of that, I want to
actively work on improving my other skills, building a more diverse
background, and meeting other developers who aren't so Java-oriented.
I think that Linux and open source is the best way to do that.

Late this last summer I was poking around on Source Forge and some
other sites looking for something interesting to do (and to hopefully
get some non-Java experience) when I stumbled across a link and little
blurb about LinuxChix. Ah ha! A site with other technically-minded
women. That was just what I needed. When I found out that there were
actually chix that were hacking the kernel hanging out at that site, I
was completely hooked. Now my new-found hobby is teaching myself to
hack the kernel in my spare time, and I think I've made a lot of
progress in a short period of time. My co-workers are all very
Java-centric and think I'm completely off my rocker ["off one's
rocker" : in a state of extreme confusion or insanity <went off her
rocker, and had to be put away> - definition from Merriam-Webster
Online]. Maybe they're right :) but for now it seems like the perfect
way to broaden my skillset and meet other people and it's been lots of
fun, too.

I was a little discouraged to find such a low volume of traffic on the
kernelchix mailing list and was hoping I could rally some enthusiasm
in it so I recently sent off an email to see if anyone else would be
interested in working together on something. There wasn't any
response, though, except for one nice suggestion. I don't exactly have
a bubbly outgoing, social type of personality, though, so maybe I'm
just not the best person to be encouraging something like that.
Anyways, my plan is to keep working at it in my spare time and just
see where it takes me. Any suggestions are welcome, because I'm not
entirely sure what the best approach is. I feel really competent and
sure of my skills at work, but in open source I feel very new and
unsure of how to proceed.

Tips for Success

Here are the pointers I promised at the beginning. I think I've
learned a few things while changing careers, so hopefully they can
benefit someone else:

1. If you have the opportunity to go to school, I think it's good to
get an MS rather than a BS, and be sure to ask if they have any
special programs you might qualify for. I noticed a huge difference in
my overall level of comprehension once I made the leap into the
graduate-level courses, and it does make a difference to a lot of
employers (as already discussed in previous courses).

2. Network early. Get over your shyness and meet people; join the
clubs in school. I didn't do that, but I should have. Only recently
did I finally get up the courage to go to my first Linux users group
meeting.

3. Brownnose your professors in as far as getting to know them and
asking them to introduce you to people they know in the industry and
asking them for career advice. A lot of the time, they're clueless
about what it's like out in industry, but some of them might be able
to help or have connections with former students.

4. Something I didn't anticipate is that development managers here in
Silicon Valley seem to pick up a bunch of developers who follow them
from company to company. I liken it to a mother duck who's followed
around by her little ducklings (I'm a duckling :-). This makes it hard
for newbies who haven't been caught up in the trail of a manager yet
to get started, so you need to work on finding managers and team
leaders that you get along well with early on.

5. Allow (and encourage) your manager to assign you to tasks that you
fear might be beyond your abilities. This is good for so many reasons:
you'll surprise yourself by learning how to do the job AND you'll
improve your skills much more rapidly than you would otherwise (and
enhance your resume' more quickly) AND you'll increase your value to
your manager AND you're less likely to get bored.

6. If you have a choice over doing a Master's thesis or some lesser
final project, get up your courage and do the thesis. Yes, it's hard
to come up with a good idea and complete it; yes, it's terrifying
defending it publicly in front of the faculty and your peers (I spent
most of that day in the restroom), but you'll learn so much and it
will open up doors for you. It helped my self-confidence, too.

7. If you decide to go back to school (and still work full time to
support yourself), be prepared - it's likely to consume ALL of your
spare time. I gave up all hope of a social life (and a clean house)
for 3 years. Also make sure your family and friends understand how
important it is. While I was in school, another middle-aged woman was
following a similar path, but when her new boyfriend started
complaining that she was spending too much time on school and not
enough on him, she freaked and dropped out. It was tragic because she
was super intelligent, really loved the classes, and had great plans
for her future. Just keep in mind that if your significant other can't
find a way inside him- or herself to support you in something that's
so important to you (and live in a messy house because of it ;), then
maybe that person isn't as terrific as you once thought. Remember that
it's your future, and only you can make it happen.

Final advice: changing careers is absolutely terrifying because you
have to leave your safe place and venture out into unknown territory
where you don't know for sure if you're capable of doing it or not,
but I believe you can do it. We spend such a huge percentage of our
lives at work; that time should be spent doing something we love.

Julie