May 25, 2004

stream of consciousness

I was reading this post by Eric Lippert when I stumbled upon the statement that Software Engineering is an immature discipline. This triggered the stream of consciousness below:

Software Engineering is an immature discipline. Is it? What does that mean? Does it mean software engineering is a new discipline? How long have people been writing software? How long have people been working in the field of nuclear physics? Is nuclear physics an immature discipline? Is "maturity" not necessarily defined by age, but rather by degree of advancement? How to measure level of advancement? Is it measured by the number of important/meaningful/revolutionary discoveries? How to quantify important? Is it fair to continue the analogy to physics? Can software engineering advances impact humanity as a whole with the same magnitude as physics? Do we have specific curricula in the universities devoted to software engineering? Is there a shared body of knowledge? Are there industry certifications and accreditations? Are there professional organizations and standards bodies? What gives people the idea that software engineering is immature? Is it related to the simplicity of acquiring a "lab"?

The advances that have been realized in software engineering in the past quarter century have followed the trend to build layer of abstraction upon layer of abstraction and to simplify the interaction between software engineer and computer. We moved from machine languages and punch cards to Visual Basic and keyboards. Where will we be in 10 years? Will we be programming in English using microphones? Where will we be in 100 years? Will we have thought-controlled computational devices that compile and run high-quality software as we think of it? Will we be able to exchange ever-increasingly complex ideas with other humans? Will we be able to think of Power Point presentations and graphs and 3-D models of our ideas and wirelessly stream them to the person sitting in front of us who will then be able to view our thoughts and stream them back? What effect would this have on intellectual property rights? What new crimes will be enabled by these "advances" (thought rape) and what measures will be developed to counter them? Tangent. Back to my original question.

Is software engineering immature? I've seen this stated many times but is it true? My gut says no. Is it related to the rampant practice of hobbyists or novices being employed as engineers? I think this is part of the reason people have the perception that software engineering is immature: there are too many poor programmers and it is too easy to become a programer. Learn C++ in 21 days...shit. And Liberty's book was one of my favorite's back in the day! Maybe the problem is that only a small number of those that call themselves software engineers can keep up with the speed of advancement in software engineering and build upon prior experience to assimilate the new into better code. The rest just learn enough of the new to get by and the overall sophistication or elegance of their code doesn't improve despite the fact that the quality might given the ever-increasing amount of safeguards built in to modern platforms and frameworks. Garbage collection killed memory managment as a source of bugs for the most part. Something will come along to do the same for exception handling. Then conditional logic will get abstracted away. I digress again. I need Ginko or that shit for adult ADD. Wonder if the cable guy came out today. I don't have ADD, that was the mental equivalent of pre-emptive multitasking. I like that. New tagline for my blog.

Posted by Christian at May 25, 2004 02:13 PM |
Comments

Eric,
Thanks for the comment. BTW, your blog is my current favorite. The combination of interesting subject matter and frequency of posts makes it a fascinating read. Back to the topic at hand, it's true some of the stock parts you mentioned are still being shaken out. In fact, Don's [Box] software integrated circuit analogy gels perfectly with the observation you're making here. But I'm not so sure that we will ever settle on a common set of parts as an industry. C++ has had the STL and generics for years and we're still reinventing the wheel in the Framework. Sure, some of it is refinement, but how much is just syntactic BS? Or political BS? Speaking of politics, they exert a strong influence on all industries. The economics of oil, for example, may very well have influenced the development (more precisely the lack of development) of alternate propulsion technologies in aeronautical engineering. Politics in the S.E. world will likely play a major part in foiling the vision of cross-platform stock libraries. But where software engineering has shown some remarkable stability is in the development of architectural patterns. GOF is pretty old. Older still are patterns such as pipes-and-filters. I guess the point of this rambling post is that when you compare software engineering to its closest cousin, architecture, I think we're a lot more mature than we're gven credit for. When you compare it to pure sciences, then I agree with you ... we've got a long way to go before we can call our field mature.
Christian

Posted by: at May 25, 2004 06:21 PM

> the speed of advancement in software engineering

Ah, there's the rub.

The current rate of change in the state of the art in software speaks to software still being a youngish field. ("Immature" is an awfully pejorative word.)

Compare to, say, aeronautical engineering. Eighty years ago, changes in our understanding of aeronautics were coming thick and fast. Tools were changing, theoretical models were changing, end products were changing. There were no jet engines.

Nowadays, sure, there are still cool new advances in aeronautics, but they require investments of multiple billions of dollars. The fundamentals haven't changed in a long time. Boeing is going to be building aluminum tubes and sticking wings onto them for the foreseeable future.

When the early aeronautical engineers built their planes, every one was a one-off. Everything had to be built from scratch. Nowadays, most airplanes are built from stock parts.

What are the "stock parts" of the IT industry? The frameworks and libraries are still evolving rapidly. We can't agree on basic design methodologies, parts, interoperability standards, etc.

It's coming -- we're shaking out things like a common human-readable wire format (XML), standard networking protocols, more and more powerful standard libraries, and so on. But there is a long way to go yet before the IT industry has the same stability, predictability, and standards as the traditional engineering fields.

Posted by: at May 25, 2004 05:59 PM
Post a comment