Saturday, November 17, 2007

Broken software.

There are loads of textbooks, articles, recommendations, and philosophies concerned with engineering of software to the point where one might believe software and engineering are inseparable. Even HTML, CSS and browser incompatibilities appear like engineering because the truth is web pages must be completed to a specified, even if only vaguely specified, need, and to usually a very concrete budget and schedule. The page must solve some UI problem, or provide some UI solution. Bear in mind here I am strictly referring to HTML, CSS and browsers. It seems to me that the UI, the aesthetics of an application, have become entwined with engineering. And I have to stop and ask myself why the hell is software so damn serious that it has infected web page design with all of its grown up seriousness, all of the time? Come on.

I can remember the thrill of programming when I was first learning how to do it badly. Trial and error isn't too great of a teacher when the only thing that complains is a computer -- could mean syntax error, data error, logic error, hardware error, design error, or anything almost. So when all of these things could go wrong there was a thrill when none of them actually did go wrong and everything appeared to work.

In school you are taught rigor. You are taught that programming should no longer be a crap shoot and a computer should no longer be treated as a slot machine. Pure logic, even mathematical discipline, aught to be brought to bear on each and every line of code. The design aught to be done first, with pseudo code or UML maybe, and then tests designed and written, and then requirements should be revisited if testing analysis revealed a design flaw/issue, and then finally the actual implementation can finally be written.

After all of that, somewhere in your senior semester maybe, you're introduced to extreme programming and all of this stuff is done, possibly in reverse order, and to varying degree, but still done. At that point, or before, you meet the all to oft said phrase: 'in the real world.' In the real world how complete any of the pieces become depends entirely on the amount of money you want to spend. Because everyone and every application in the real world is serious about money. (And yes I have just anthropomorphized the noun: application).

So in the real world writing software is about that all too serious concept money, while in the academic world it is about the completely illusive perfect form of algorithm and application.

After leaving college and getting a job in the real world it is not long before the thrill is gone, or dead, or it is nothing like it was before, or it has been exchanged for recognition of having completed a project (because what the world really needs is another software application for the masses entertainment or business agenda -- and yes that is sarcasm.) Ultimately the illusive perfect and the serious money concept collide, leaving behind a reason to drink.

So I'm going back. I'm going back to where the thrill was... I think there is still something to do there, and something to learn there.

(I think the next post will contain something about the supposed 'funness' of Ruby, but actually won't be concerned with Ruby itself... who knows).