I'm here writing about the Wikipedia article on software engineering, linked here.
Software engineering is basically the practice of programming in a business environment, but it is much more complicated than that. Because programming is learned in a very solitary manner, it is easy to think of it as a introverted profession. However, this becomes immediately complicated by the fact that the programmer has to make a product for someone who usually does not know how to program. This makes it the job of the programmer to "translate" between the user's wants and the machine's capabilities. This can be extremely complicated since many people really have no idea the amount of work even a simple (in their minds, at least) task can create.
Dijkstra's quote on the wiki article is highly relevant:
"if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot."
But why would Dijkstra have such a problem with software engineering, when there are clear problems with communications between programmers and end users? Well, many criticize the amount of work that goes into setting the up the program prior to even beginning to write code. So much work goes into this idea of communication, some may question whether it is a worthwhile pursuit at all.
Another interesting part of the wiki article is how it talks about the difference between software engineers and other types of engineers. This is taken from the article:
"One major difference between software engineering and other engineering disciplines is that software engineers are not yet able to precisely describe and measure (a) the materials they use and (b) the results of their work, i.e. what a piece of software does. Other disciplines use Meter,Volt or other units of measurement. In contrast, the measurements available for software like e.g. Lines of Code, Function points or Complexity Measures only capture the amount of software created. They do not describe what the software actually does. This is like describing and measuring a complicated piece of machinery in kilograms only. So describing and measuring software is a challenge which remains open to this day"
How does one go about measuring a piece of software? Is length an important metric? Is performance? Function? And how would you even measure the latter two? Personally, I would say length is irrelevant. Sure, sometimes you want to show how much work you've put into something and you can say, I wrote 10,000 lines of code. However, something that might take you 100 lines of code could take someone else 5 lines of code. Is there program any better or worse than yours? You can't say from the information given. Perhaps theirs is extremely unreadable because it is so condensed. Or maybe yours has way too much fluff. Either way, if it produces the same program, does it really matter? Performance and function are more important to determining metrics of a function, but there is no realistic ways to measure them in an objective way.
Despite its relatively simple idea, software engineering runs into some major questions when trying to be defined. Personally, I will have to read a lot more about it before I would even attempt to answer some of these questions.
Ronald
No comments:
Post a Comment