When is a Software Engineer Not a Software Engineer?

The title of "software engineer" has got to be amongof the computer. Nowadays, with our fast compilers
the most highly abused in the corporate high-techand interactive debugging systems, programmers
world. It's also one of the most popular.often find it more convenient to simply sit down and
And why not? It sounds a lot better than "computerstart coding, with just a modicum of software design.
programmer," and it looks much better on one'sMind you, I do understand that this is sometimes more
business card. Unfortunately, it's often inaccurate.efficient-when the programming task is fairly routine,
Engineering is, after all, the application of soundfor example. However, when such design-as-you-go
technical principles to develop systems that are robust,software development becomes standard practice,
efficient and elegant. I've found that a great manythen you have the makings of utter chaos.
software engineers can develop working programs,In part, this problem is also rooted in the malleable
but do little or no real engineering design.nature of computer software. No self-respecting civil
Does this sound harsh? Perhaps, but I've also found itengineer would design a bridge by slapping girders
hard to deny. I've encountered very few softwaretogether until he has something that works; after all, if
engineers, for example, who have clean, crisp andthe bridge collapses, it could take months to rebuild it.
readable coding styles-an essential element of elegantSimilarly, no sensible architect would want to build a
software design. I've also encountered ahouse without blueprints and floor plans. Yet it is
preponderance of cryptically written functions, clumsycommonplace for programmers to develop software
software abstractions and bizarre spaghetti code. Tousing poorly chosen functions and only the sketchiest
my dismay, I've discovered that even among computerof designs. After all, if the software doesn't work, they
science graduates, many reduce object-orientedcan always find the bug and fix it-at least, in theory. In
programming to the mere use of private data, publicpractice, these bugs are often difficult to detect, and
functions and object instantiations. It's enough to breakfixing them can require extensive surgery. The
a teacher's heart.consequences of an ill-designed software program
Now, I won't go so far as to say that mostcan be disastrous indeed.
programmers write spaghetti code. That would not beFor this reason, I believe that high-tech companies
fair. However, I do think that relatively fewneed to give software engineering the respect that it
programmers have a deep appreciation for the artistrydeserves. They need to develop a true culture of
of software development. That's not to say thatsystematic software design, instead of merely settling
they're ignorant of such things; not at all. Rather, it'sfor "whatever works." A company that's looking
more that the engineering aspects of elegant codetoward the future must pay proper devotion to the
design are all too often neglected.principles of software maintainability, proper
I think this happens because modern programmingdocumentation and elegant, robust design. It must also
tools have made proper code design seem like ainculcate a culture of true software engineering among
nuisance. In the early years of computing, people wereits employees. The failure to do so may work in the
forced to write out their software designs, ponderingshort-term, but it is a recipe for long-term disaster.
many fine details before they ever sat down in front