Friday, October 06, 2006

20 Years Now

Twenty years now Where'd they go? Twenty years I don't know Sit and I wonder sometimes Where they've gone



Those words from the Bob Seger song will probably run through my head all day.

I’m 38 today. I was just a few weeks into my senior year of high school when my 18th ticked by. It really does seem to have gone by in the blink of an eye.

My life is certainly not what I’d thought it would be then. My plan was to be a Veterinarian or Biologist, live on a boat with an exotic pet, drive a Ferrari (yes, I did watch a lot of Miami Vice as a teen) and have adventures which were a cross between Indiana Jones and Marlin Perkins. I also intended to remain a bachelor. Ah, youth.

Instead I’m a computer programmer (I embraced my nerdhood), have a nice home in the country, drive a Mustang Cobra (among other toys) and my adventures are much tamer. I also married a wonderful woman and we had our first child last year. All this would be a total shock to the 18 year old me yet I wouldn’t change a thing.

I have saved the most important point for last. As I look back across the past 20 years I’ve had good times and bad. I came to realize just a few years ago that things have always gotten better the closer my relationship with God has been. So if you find yourself reflecting on your situation in life and you’re less than pleased examine your own relationship with Him and apply any needed correction. He will bless you beyond your wildest dreams even if you aren’t aware at the time what those dreams should be.

Thursday, October 05, 2006

How I Became a Programmer Part II

This post continues the ramblings in part I:

So I graduate in 1996 some 9 years after leaving high school and land my first job as a maintenance programmer on a case management system for an in-home healthcare provider. It was written in Informix 4GL talking to an Informix database all running on UNIX with terminals all over the state. It was a good environment. We had a real QA department and did peer code reviews for even minor fixes. Plus there was an effort to build in house a from-the-ground-up replacement for the contractor-provided system in production. My role on that effort was to build an entity relationship diagram of the existing database as a learning exercise and a tool the team could use to design the next system. Right about the time I finish the E/R diagram the CIO whose management style could best be described as reading the latest buzz in Information Week decided the company was going to buy a canned package in implement it. Within 2 months all the experienced developers left and I decided if I wanted to learn to be a developer I might as well take off too. Barely one year into my career and I was already job hopping.

I followed one of my co-workers to one of the big banks in town. We worked on the treasury management system which had the luxury of operating as an “island” within the bank’s IT system. This meant we got to do things our own way and wear many hats. Not only was I doing development in VB3 (and getting my first experience using vendor-supplied ActiveX DLLs) but I got to maintain a Windows domain, administer Novell file servers, act as a DBA, maintain serial communications and for awhile keep an old DECVAX alive. In the four years I spent there we migrated technologically from VB3 to 5 and then 6. We hopped right on ADO when it became available and that led to teaching myself object coding so we could put together some reusable n-tier DLLs for re-use throughout the shop. I even got to do some desktop apps from the ground up for internal customers and cannot describe the warm fuzzy you get when users rave about your work. I also wrote some slick utilities for VB6 such as a check MICR line parser and an ASCII to EBCDIC converter I used for generating ACH files (I also learned that ACH is almost a language all to itself). Unfortunately I discovered my salary was lagging behind the industry and a nasty little personality conflict developed with a peer who was promoted over me so I moved on.

Again following a former co-worker I moved to a small imaging (high end scanners) company since image and data capture was a large part of what I did at the bank. Here I was still doing client/server VB6 but the database was the much more common SQL Server instead of the Sybase one I’d been working with. I also got to learn more about Tiff images than I ever wanted to and how to work with files at the hex level (how I’d gotten that far into my career without learning it I don’t know). I also learned a lot about OCR technology and even had one instance of building a full-form OCR app.

Life seemed grand there. The company was growing and there seemed to me a movement to grow from being a hardware vendor to a full solution vendor. That meant an opportunity to build commercial-grade, revenue-generating software. I and the rest of my team wanted to do it in .Net and the company even spent thousands of dollars in training for the team to that end.

Then the directive came down about what we were to build. The goal was something quite similar to Kofax’s Ascent Capture software (which I didn’t even know existed at the time) including its release scripts. Our time frame was a shippable product in six months. That would be a daunting task for a team of 3 even if development was our only task and our goal simply a prototype. Never mind that we were looking to compete with a mature, feature-rich product that had been in the field for over a decade. Add to that the engine behind its primary feature (form recognition and data capture via OCR) was denied to us because it was “too expensive”. We also had the learning curve of a new language facing us.

We started holding design meetings where all the issues in the previous paragraph came to light. We eventually realized we’d have to do something about the workload we were carrying doing maintenance coding for software installed at hundreds of customer sites spread across the globe to even come close to meeting some of our goals. To that end I came up with the idea of starting a sort of mentoring program with some of the guys working the customer support desk looking to break into software development. The individuals I had in mind were already in school learning to program. I presented my ideas to the team and through discussion we outlined how the program would work while maintaining code quality and freeing up time for us to develop new stuff. I drew the plan up into a document.

Unfortunately when time came to present the plan to our boss the reactionary nature of our jobs (stemming from the company’s continued behavior as “just a hardware vendor”) had me on the road again with less than 24 hours notice. I learned from the rest of the team the plan was flatly rejected with little or no discussion. One quote that did make it to me is still burned into my head: “I don’t want members of the help desk touching our code.” I saw that as petty and political and it was the ripple which became the wave to drive me from that company.

The job search did not go well. Primarily because I was seeking opportunities to work in VB.Net and almost no one would believe that my 10 years of working with Classic VB could be built upon to be effective in .Net. Companies I found interested in me couldn’t afford to even match the salary I was making then and financial pressures were about a 10% factor in my desire to move so a pay cut was out of the question.

Eventually things reached a level of Office Space –ness that I had to move on or go nuts and I took a contract gig at a big bank (which I thought I’d never do). It was still working in VB6 with SQL Server and a little Classic ASP thrown in. However, the money was better and the schedules seemed glacial compared to the last job so the pressure level was much lower.

This was my first ever contract gig and with my wife pregnant with our first child I was quite uncomfortable in a position with a set end date. I made this discomfort well known and that led to being offered permanent employment on another team. In addition to being fluent in Classic VB, ASP and SQL I know enough Java to make tweaks here and there and I was told that made me a good fit. They were also after my years of imaging experience and did send me to Ascent Capture certification which was nice.

Sometimes I’m not so sure. Since becoming an employee I’ve learned this company is addicted to buying obscenely expensive systems from vendors and being addicted to professional services to keep them running. Some of the big names that I’ve been exposed to in varying degrees so far include: Mobius, Mercury, Remedy, BEA, Web Sphere, Informatica and the aforementioned Kofax. And that doesn’t even get into all the vendors running around the mainframe. The reliance on vendors and services baffles me since there seems to be sufficient talent to build quality stuff in house. Yet we have all these disparate systems and as much effort is expended making them play together as would be spent developing in-house.

Java is also far more prevalent than I had originally thought. This disturbs me a bit because I’m really not a fan of languages which require me to type curly braces and line terminators. I became concerned I might get kicked out the door because I was not a Java devotee.

I was further baffled when I was sent to a series of .Net workshops. I love more training but I now have 6 Microsoft .Net courses under my belt and have had no practical experience to use the knowledge. It was during the workshops I was introduced to Joel’s blog and he led me to Steve’s. They are both so brilliant that I began to question my own career future.

The doubt is what inspired this and the prior long blog entries. I’ve determined I’m going to be a better programmer and so I’ve poured out my soul to seek advice. I clearly have to grit my teeth and learn Java. The vendor supplied codebase in it is here to stay for the foreseeable future. So I’ve downloaded Thinking In Java from the internet and work reading it into all the documentation (ranging from mediocre to quite poor) I have to read on the new vendor-supplied systems I’m learning.

The advice I seek is what basic programming book should I read to improve my programming skills? I seek something not language specific since those books that are tend to drift into selling the language rather than teaching basic programming. Searching around Joel’s blog I have identified the following candidates. I know I should read them all. I just want to know which to read first. Helpful comments welcome. Nasty comments will be gleefully deleted:

Structure and Interpretation of Computer Programs

The Pragmatic Programmer: From Journeyman to Master

Coder to Developer: Tools and Strategies for Delivering Your Software

Friday, September 29, 2006

How I Became a Programmer Part I

I've decided to lay out the full path to where I am today career-wise because I'm seeking some advice on some books to read to improve as a developer. I had no idea I'd get so long winded so I'm breaking this up into two parts.

Here's part one which covers the educational portion up to getting my degree:

My exposure to programming goes back to the 1980’s when my parents responded to my wish for a computer by buying a VIC-20 (I wanted an IBM XT). Sure it was BASIC and the only programming I did from scratch (as opposed to just keying from a book and debugging) amounted to “Hello World”.

At the time I never considered making it a career. When it came time late in high school to “decide what I wanted to be when I grew up” (looking back with my 37 year old eyes I realize what a lame concept that is) I thought I wanted to be a Veterinarian or Biologist. I think I’d watched a bit too much “Wild Kingdom” when I was younger and thought life was like that for all of them.

Well, picking a path that didn’t hold my interest along with not really knowing how to study since I was able to slack my way though high school and still graduate with honors led to troubles in college. Four years went by (with a couple of academic suspensions along the way) and I was not progressing toward a degree even after switching to a Mc. Major (General Liberal Arts).

So, I left school and went to work. I’d already been working for a few months while still attending school (sort of) as an auto parts counterman. I thought maybe I’d just make a career out of my love of cars. I also had some silly notion I might get “discovered” as a race car driver and started running SCCA Solo II. At the time I didn’t realize the days of hobbyists going pro in their 20’s were all but over. Most of the pros then (and I’d say all now) started racing at a single-digit age. I was already too old.

Working a parts counter can be fun if you’re a car person. You often get to help diagnose and solve problems which also happens in programming so it may be why my career has followed the path I’m reviewing here. However, some knuckle-dragging, mouth-breathing dolts who think they can fix cars are also in your customer base. These people can make the worst pointy-haired boss in IT look like one of the geniuses who founded Google. The salary to put up with such just isn’t there. That fact combined with meeting who would eventually become my wife (and wanting to support her) drove me to consider returning to school after 4 years.

But I didn’t know what degree path to take. I knew Vet Med wasn’t it. Nor were International Business or GLA that I’d tried along the way. I had a friend in the Management Information Systems program and I’d had some exposure to how powerful a tool IT systems can be by working a year at Auto Zone with its computerized catalog and inventory systems and then spending the next 4 at an independent store with a completely manual system. I had a look at Computer Science but the math requirements were much heavier (I might be one of the few programmers not that fond of math) and MIS seemed to have a more well-rounded curriculum.

So I re-entered Auburn University in the MIS program (now known as Information Systems Management it seems). I also took a job on campus helping maintain the public access computer labs to get some sort of IT experience under my belt even if it was mostly just running virus cleaners and rebooting machines from time to time.

At the time they taught two languages (COBOL and Visual Basic 3). You also learned SQL in the relational database class. COBOL was billed as the way to teach logic but it was really the “weed out” course for MIS. The instructor when I took it was a hard-assed coder who had been doing it since the days of punch cards. It was murder at the time but in retrospect I’m glad the course was so hard. It gave me an understanding of the need for shop standards. I aced the course and when the professor moved on to greener pastures the next quarter the department hired me to be a tutor.

VB3 was their “object oriented” class. I now know that it was really just event-driven and to make matters worse I took it over Summer quarter and my instructor was a grad student who “taught self three week ago” using our course book: Que’s Using Visual Basic 3. The class basically had to learn on its own.

Other than self-teaching HTML and enough UNIX to be dangerous that was the extent of the technical portion of the MIS program. I did get exposure to accounting, finance, marketing and management classes. You also spent your last 3 quarters on a team working on a single, consulting-style project so you get the experience of coding, documenting and presenting all in a team environment.

Thursday, September 28, 2006

Greetings!

I've been meaning to start blogging for some time but I'm terribly lazy. Then on a whim while reading Steve Yegge's decided to get started here.

My primary job is software developer but that's only because it was the interest I have with the shortest path to the salary which would support the lifestyle I want (I'm lazy remember).

My other interests are vehicles, firearms, singing, home improvement, hunting, fishing, hiking (when I get off my lazy butt) and travel.

I'm a Christian, Southern, straight, happily married white male with one (so far) child.

My wild ramblings might come to make more sense as I build this blog and my profile but for the past few years a quote I stumbled across on the internet has been one of my driving factors. It pretty much defines why I have so many widly varied interests. I really need to read the book it comes from one day:

A human being should be able to change a diaper, plan an invasion, butcher a
hog, conn a ship, design a building, write a sonnet, balance accounts, build a
wall, set a bone, comfort the dying, take orders, give orders, cooperate, act
alone, solve equations, analyze a new problem, pitch manure, program a computer,
cook a tasty meal, fight efficiently, die gallantly. Specialization is for
insects. – Lazarus Long (Robert A. Heinlein, Time Enough for Love, 1973)