Thursday, May 31, 2007

Software Engineering - The Formative Years

The start of it all
I have been coding since I was a boy writing basic programs (not the visual kind, the ancient line number kind) on my parents' brand spanking new TI-99. I was exposed to Pascal, Cobol and C while in high school, and I did some Visual Basic in 1998-1999. Don't get me wrong, I didn't do anything really serious until I decided to change majors in 1999 from Psychology to Computer Science.

Ok, to be fair, I didn't really start thinking hard about quality engineering until I "jobbed out" of school during the dot-com era. I found this great job writing JUnit tests for a great little company, *ahem*, that shall go nameless. This was in September of 2000. I was hired to write unit tests for the entire application, in the neighborhood of 500k lines of J2EE code. Sounds great you might say, too bad the application was set to ship just a month or two after I began.

Let me back up some and explain something about myself. I am eternally curious. Not just the fleeting kind of curious, but the consuming kind, you know, you can't stop thinking about something until you have uncovered all aspects of how it works. As a kid, it was my bike. I tore that thing apart several times in vain attempts to get my Huffy working better than my friends Mongooses and Predators (oooh, ahhh). I added a freewheel, new rims, changed multiple tires, changed the cranks, bottom bracket, removed the fork and handlebars... Anyway, you get the idea. As a teenager it was, uhmmm, girls. I didn't fare so well on that one. If you have them figured out, I could go for a few pointers.

Still on the topic of me (yes, this is still relevant), I have two more traits that contributed to me starting down the road of Engineering Software. First, is that I have never ending ideas on how to improve something. My wife particularly enjoys, *ahem*, this one. For every complaint, I always start thinking about how to solve the problem and make it better. (This topic is a whole blog in and unto itself, suffice it to say I have learned to keep my mouth shut and just listen. Most of the time...) ;) Finally, I have a healthy disrespect of the status quo, if that status quo does not conform to my standards. This one drove my parent's nuts, still does. :) I'm just not satisfied with something that is subpar. (For those that know me, I will now pause and let you pick yourselves up off the floor.)

Now, back the regularly scheduled discourse. Being that I was now getting paid a lot of money to write code for Nameless Company, I wanted to do it right. I became curious about how to solve a problem The Right Way(tm). I remember scheduling a few meetings with the lead architect at said Nameless Company, specifically so he could impart his vast wisdom of how to design software. When the day arrived, we walked into the conference room and I asked, point blank, "How do you design software?". His response was a paltry "I don't know, you just do", and no that isn't really a paraphrase. The meeting lasted a grand total of 15 minutes, the other meetings were canceled. I continued doing my job at Nameless Company, and the entire engineering team, myself included, got laid off about 5 months later in March of 2001.

Huh? How was that the start of it all?
Now, why did I tell you this story? Think back to my intolerance of things that do not measure up, coupled with my curiousity. This architect's answer got under my skin. I was not ok with his answer, it didn't fit with what I expected, and there was no way on earth I would ever accept it as the answer to my question. So I started looking for the answer myself. I spent many nights at Barnes and Noble reading anything I could find on software design, software engineering, etc... I finally purchased and read The Pragmatic Programmer by Dave Thomas (not the Wendy's guy) and Andy Hunt. That book launched me into a whole new world of programming, one of principles not heroics and black magic, in short, Software Engineering.

Stay Tuned
Thats it for now. I will post more as I gather my thoughts. This was more of a narrative of the beginnings of my career and how I started to really be passionate about software engineering. Stay tuned...

No comments: