Thursday, December 4, 2008

Looking into the software mirror

Fred Brooks observed that "software tends to resemble the organization that built it".  I think we can take this one step further, "software tends to resemble the individual that built it."

I have had the pleasure of working for a number of companies and refactored countless lines of code (usually C, C++ and FORTRAN) and as a friend likes to say "I've written an awful lot of code and a lot of awful code".

The vast majority of the code I've inherited leads me to believe that many programmers lack a fundamental understanding of software development; lack an understanding of the basics of the language in which they are programming; lack the knowledge to write constructors, destructors and in general lack an understanding of resource management.  I am truly shocked to see how many programmer lack the basics of "is-a" and "has-a"; lack debugging skills; lack an even basic understanding of how to write a function interface and pay no attention at all to return values.

I've also come to understand that managers I've worked for rely on me to fix many of the corporate shortcomings with a mantra of "if it doesn't work" give it to that curmudgeon in the cubical down the hall because he can fix it".  I am the first to admit I am not a code guru, I am not a Bjarne, nor a Linus.  I come to the office each day with a blue collar, lunch box mentality to create profitable software.  I'm not out to save the world, nor create a software masterpiece.  I realize that at the end of the day, at the end of the build process, our software will be running in a data center manned by intelligent men and women who, mostly have two year tech degrees and have hundreds of servers to monitor, upgrade and respond to outages.  So I create software that starts and stops w/o errors and runs with triple digit uptimes.

Is the sad state of programming because universities are failing, or because those who attended universities are failing to put in the time and effort to (re)learn?  So what is the current state of programming?  In light of the multi-core revolution taking place, I fear for the future of the craft.  If single-threaded programming confuse programmers, what will multi-core techniques do to our work environment?

/dev/kde

No comments: