A tweet by Scott Hanselman caught my attention earlier this week:
I followed the link and was reminded of an idea which has been festering in the back of my mind for awhile: engineers become dated because we tend to revisit the problems our industries faced when we first entered them. It is difficult to realize when the game has changed (I say this as I'm watching the game change for the second time in my career). But my generation of software developers has a particularly serious issue with this. We are still busy solving a problem which never existed.
During the 90s the industry was focused on solving the quality crisis. But in retrospect, automotive companies failing to rewrite their payroll systems a crisis does not make. Expectations were out of line with reality of the complexity of software development. Software is hard, and as Fred Brooks has famously pointed out, there are no Silver Bullets. Hence the software crisis was never really solved. Expectations adjusted, and the problem faded away.
The software developers of my generation are a strange lot. We are probably the only "engineers" who believe that the right way to solve a quality problem is by increasing complexity. I could be wrong, but I don't think the first thing that goes through the mind of a mechanical engineer when addressing a reliability problem is to increase complexity of the system. But we struck out to solve the crisis by slathering on layers upon layers of oozing complexity with hopes of crushing the quality problem by the sheer weight of all the bits we were creating. And it didn't work then, and doesn't work now.
We popularized object oriented programming, which was so effective at solving the software crisis, we created a whole new discipline that seemed like writing real honest to goodness functioning code, but in and of itself produced nothing of value: Object Oriented Design and Analysis. But since objects were created to work in memory on one machine, and we had these newfangled LANs that allowed multiple machines to be easily connected, we developed CORBA, DCOM, RMI, blah, blah to solve the problem of using objects over a network. These were especially useful when TCP/IP and DNS just couldn't get the job done. With the distributed object problem solved, we realized it might be a good idea to save the information stored in object in the relational databases that Larry Ellison was getting rich selling. This is the software equivalent of putting a round peg in a square hole. Sure we could have developed square pegs and been done with it, but what were all those OOA&D architects supposed to do?
We convinced ourselves we were doing the right thing, and how could we not be? All our hard work and those finely crafted business objects were being validated by the market. This is going to sound totally insane to anyone who started working in the industry in the last 5 years, but during the dot com boom, there were companies that went public for being "XML" companies. "XML is one of their selling points," an analyst said regarding the WebMethods IPO. I had no idea what they were selling then, and I still don't, but the market had spoken. $100+ million valuations were proof of that our Architectural Aeronautics were paying off. Then the dot com crash happened, and we turned to blaming our misfortune on outsourcing.
Jeff Atwood, who, granted, I think is a genius, has panned PHP as being a crap language. And, of course, he is right. It is the worst abomination of a language ever thrust on the general programming community (with maybe the exception of VB Script). But nobody uses PHP because they love PHP. They use PHP to solve real problems. While my generation was busy debating how to separate content and design, create a perfect n-tier architecture by optimally defining our business objects, and then how to correctly squish them into a database, Matt Mullenweg and Mark Zuckerberg changed the world by using the tool they had right in front of them: PHP. PHP wasn't designed with abstractions in mind, and I'd be damned if that isn't one of the reasons it is so successful.
Hanselman's post reminded me that my generation is still calling attention to the irrelevance of the problems we still are busy solving. If we don't stop wasting our time with semantical debates, we are going to get our collective asses kicked by 21 year old hot shots who couldn't care less what the fly weight pattern (*) is and just want to make their phones more useful.
* Note: I know Addy Osami has resurrected it as of late in JavaScript. It was the first time our JavaScript developer had heard of the pattern.