Jan 24, 2008

It's a Wonderful Time to be a Programmer

It's true. We have so much available to us. The market for software is growing, the amount of tools, utilities and libraries available to us is gigantic, and the amount of open-source software out there let's us get a lot of our code for free (without even having to work on it!). Languages like Java prop us up with training wheels and safety nets, things like Subversion and backups mean that if we fuck up, our mistakes can go unnoticed (compare this to other engineering works, where they have less room for mistakes). It is a wonderful time for us.

Or is it?

Modern languages and software development frameworks keep us in the dark from dirty things like pointers or SQL, so that we can code in piece without breaking our minds on complicated things. Then we wonder why our programs run so slow under heavy load.

With the breaking of Moore's law and the flat-lining of clock speeds over the last few years, computer engineers have turned to parallel solutions to get an extra kick out of the processors. Unfortunately the modern languages like Java or Python are rife with problems when it comes to parallelism, like race-conditions, deadlocks and livelocks to name a few. Unfortunately, in order for us to switch to a more elegant and safe solution, we need to ditch the style of procedural/object-oriented programming that we have come to have ingrained in our minds.

Here is where the universities come in. The primary educational institutes for those who actually possess the intellectual capacity for this kind of programming. Unfortunately these institutions are governed more by the laws of economics than by computer science, so they try to pump out as many graduates as possible in order to cover the bills. Math is no fun, reduce math requirements. Pointers are no fun, make it optional. Scheme/Haskell are just weird and make many undergraduates cry, so ignore those too. We now have descended to the level of technical colleges (in the USA they are called vocational schools or community colleges I think) where we no longer require smarts to finish a degree, just some cash and some perseverance.

Fortunately for us, most jobs don't require smarts, or education. Your job is to sit there and do what the bosses tell you to do, while they go out, eat steaks and do coke off a stripper's back (as Zed Shaw so eloquently put it at CUSEC 2008). Your job as a computer/software programmer/developer/analyst will generally involve you putting together JavaBeans or gluing together libraries in order to develop an application in a process first put into practice by Henry Ford called the assembly line.

1 comment:

Rob Britton said...

The problem I have with time-tracking and programming is that number of minutes worked doesn't really mean a whole lot, since the amount that a person can get done in a fixed amount of time varies a lot depending on their talent, time of day, how much coffee they've had, etc. etc. etc. I'd say a better measure is how much work they actually get done, although I can see how that'd be harder to quantify.