Despite the best efforts of practitioners of tongue-and-groove carpentry to provide permanent, high-strength joints for purposes such as flooring, the sad truth is that wood has a finite threshold for abuse. Time, wear-and-tear, and intangible defects eventually lead to the failure of wooden structures. Even worse, once constructed, it is difficult (and in some cases, impossible) to repurpose a floor to match the changing needs of its constituent building. Besides, carpentry is a craft — nearly artistic — and not a science, anyway.
Sound familiar? Similarly, the question has been floating around the blogosphere this week: is software engineering dead? It’s a question that makes about as much sense to me as “is the Desktop OS dead?” or any other “is topic XYZ dead?”
The answer, I feel obligated to point out, is “of course not.”
Let me give you a quick rundown of some of my background. I was originally planning to study music — to the point of accepting an enrollment in a music college. At the last minute, some beancounter in my head pointed out the poor ROI of this approach, so I floundered for a year or so and then entered my state university’s computer engineering program. And since then, I’ve worked as a researcher in AI, a manufacturing engineer, a business software developer, and now as a virtual worlds developer. I don’t have multiple decades to stand on, but I do have over ten years of genuine applied technical skill.
And after all that, I’m a frustrated musician at heart. So I know where a lot of this strikeback comes from. There’s a lot of pure egotistical joy in saying “I’m not an applier-of-science, I’m a craftsman. An artist!”
Engineering isn’t a religion. It’s a mindset. An engineer seeks to solve difficult technical problems, in a predictable fashion, using established best practices and sound technical fundamentals, with an eye towards minimizing risk (to the project, to the business, to the users). In software, the question of “process” is up in the air — nobody’s firmly established which processes work best for which problems (although lots of people will SAY they have). The field is continuing to move incredibly fast, along with advancements in hardware and communication technology, so even the established best practices are moving targets. That said, I sure hope there are engineers at work on my OS, compiler, and database. There’d better be some best-practices going into that e-commerce framework, or any service that hopes to scale beyond a couple of hundred concurrent users. But you’ll notice I’m not talking about the tasks involved constructing the software. I certainly think most engineers can write code, but I’m not convinced that coding is engineering, OR that the best code is produced by engineers. I’m saying that engineers are great for solving engineering problems.
I’m not saying that dedicated craftsmen can’t construct elegant systems of this size. I’m saying that even genius carpenters really ought to bring in some architectural know-how when they’re putting up enormous structures.
Now, on to programming. You’re all right about that. Programming isn’t engineering! It’s certainly more of a skilled-crafter-tradesman kind of effort. Programming is creation, requiring the technical foundation (much like knowing how to lay out beams or get that joint at a proper 45-degree angle), but also the creativity and expressive skills to succeed! That joint needs to be solid, and might need a molding to look nice. That UI might need a loading state indicator to really be done well, even though your application worked just fine without it. Or you might need to apply one of a myriad of workarounds for browser compatibility, or OS issues, or that neat optimization trick you learned for mapping this kind of data structure efficiently to this database.
In summary, I guess, the question just doesn’t make any sense to me. If software engineering is dead, I sure don’t expect much advancement of the science — but I also don’t expect every Twitter badge and web site to be engineered, either.