| The title of "software engineer" has got to be among | | | | of the computer. Nowadays, with our fast compilers |
| the most highly abused in the corporate high-tech | | | | and 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 "computer | | | | start coding, with just a modicum of software design. |
| programmer," and it looks much better on one's | | | | Mind 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 sound | | | | for 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 many | | | | then 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 it | | | | engineer would design a bridge by slapping girders |
| hard to deny. I've encountered very few software | | | | together until he has something that works; after all, if |
| engineers, for example, who have clean, crisp and | | | | the bridge collapses, it could take months to rebuild it. |
| readable coding styles-an essential element of elegant | | | | Similarly, no sensible architect would want to build a |
| software design. I've also encountered a | | | | house without blueprints and floor plans. Yet it is |
| preponderance of cryptically written functions, clumsy | | | | commonplace for programmers to develop software |
| software abstractions and bizarre spaghetti code. To | | | | using poorly chosen functions and only the sketchiest |
| my dismay, I've discovered that even among computer | | | | of designs. After all, if the software doesn't work, they |
| science graduates, many reduce object-oriented | | | | can always find the bug and fix it-at least, in theory. In |
| programming to the mere use of private data, public | | | | practice, these bugs are often difficult to detect, and |
| functions and object instantiations. It's enough to break | | | | fixing 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 most | | | | can be disastrous indeed. |
| programmers write spaghetti code. That would not be | | | | For this reason, I believe that high-tech companies |
| fair. However, I do think that relatively few | | | | need to give software engineering the respect that it |
| programmers have a deep appreciation for the artistry | | | | deserves. They need to develop a true culture of |
| of software development. That's not to say that | | | | systematic software design, instead of merely settling |
| they're ignorant of such things; not at all. Rather, it's | | | | for "whatever works." A company that's looking |
| more that the engineering aspects of elegant code | | | | toward 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 programming | | | | documentation and elegant, robust design. It must also |
| tools have made proper code design seem like a | | | | inculcate a culture of true software engineering among |
| nuisance. In the early years of computing, people were | | | | its employees. The failure to do so may work in the |
| forced to write out their software designs, pondering | | | | short-term, but it is a recipe for long-term disaster. |
| many fine details before they ever sat down in front | | | | |