|Applications programming is a race between software engineers, who strive to produce idiot-proof programs, and the universe which strives to produce bigger idiots. So far the Universe is winning.
Rick Cook, The Wizardry Compiled (1989), [url=http://www.baen.com/library/0671698567/0671698567___6.htm Ch. 6]
This forum thread inspired me to write this posting since again I have seen that many people think IT professionals are programmers. Well, some are, most do programming as part of their job, but many do completely different things: designing and crafting architectures, testing and inspecting code, writing documentation, test specifications, coding guidelines, education and training, selling software and solutions, explaining problems and solutions to non-IT-people.
Another more interesting ( actually one of my favorite ) question is: is programming = software development ?
It can be, in fact in many cases it is. But it shouldn't be the same.
What is software at all ? I view software as a material-less product. The fact that you don't need any material to produce software makes it actually easy and cheap to produce. Thanks to today's advanced Integrated Development Environments almost everyone could sit down, hack together some code and sell it.
Shouldn't software be engineered like e.g. a bridge ? If you build a bridge, do you just start to build it ? No, of course not. If you would do it this way your bridge would not last very long and probably would kill many people. You would waste material, time, effort, money, and finally your reputation in doing so. That's why you invest in specifications, studies, design, architecture, analysis. And once everything is done to properly plan the bridge ( including the project plan to design and finally build it ) you start implementing it.
To my mind software should be handled the same way. You should engineer it. Not just write code. At least if you plan to come up with a more advanced piece of code doing a bit more than just writing "Hello World" on a computer terminal.
Many people in fact do some sort of design in their mind, they probably design while they start writing code. Their design might exist in their thoughts for a few moments until the code is written. A few days later, since nothing has been documented, the design basically has vanished away and you ended up with just source code.
How many people actually consult their source code when you ask them questions about what parameter their program would accept or what possible return codes and messages it would generate ? Or how it would behave in some special situation ? Many. Source code in many cases is the only "documentation" available.
Programmers write source code. With or without design. With or without testing. With or without coming up with a specification upfront what the software is supposed to do, what use cases it should support. With or without knowing at the end how good it works. All these things I just mentioned, coming before and after writing code to me is what I would define as software engineering.
Because software engineering has been "forgotten" in many software development projects "reverse engineering" became a hype topic a few years ago: generating designs out of the source code. Many write designs after they have written their code, which of course is better then never writing any design.
Nevertheless, this shows that software engineering is not in everyone's mind when it comes to define what an IT professional does all day long. As I said: programming ( writing code ) is just a small subset of what IT professionals are working on. And hopefully they are good Software Engineers. Otherwise this law might be more true than we would like it to be:
| Weinberg's Second Law:
If builders built buildings the way programmers wrote programs,
the first woodpecker to come along would destroy civilization.
2 blog comments below
I looked up the source for this one. Found it on Wikiquote, but it's unattributed. I did find a nice one, though, that should make us humble -- even those who do design carefully:
SonLight on Sat Sep 01, 2012 2:21 am
I recall another one, but couldn't find a source either for this one:
|Design a system a fool can use and only fools will use it.|
amagard on Tue Sep 11, 2012 11:07 am