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

0 Comments:

Post a Comment

<< Home