In my opinion, software engineering is the quest to create working software that satisfies its requirements, where the effort required to develop and maintain the software is minimized and does not grow exponentially with the complexity of its ever-changing requirements or the number of changes made to the software over time.
Think about all of the tools, patterns, and techniques that you use to develop software. Do they fit into this definition? What would you add or change in the above definition?
The best definition of an engineer that I ever heard was something like….
“A person who uses their knowledge of energy and materials to develop pratical solutions.”
In software our “material” is the development environment
and
“energy” is the CPU, memory, and other resources.
So how about
“A person who uses their knowledge of computers and LabVIEW to develop pratical solutions.”
Ben
My favorite definition of Engineering is
Engineering : The art of applied science.
Therefore -> Software Engineering: The art of applied Computer Science.
I’ll leave it as an exercise to the reader to define Computer Science.
Really, you have a pretty good definition of Software Engineer. I am more convinced over time that a good Software Engineer is a good Project Manager and many of the same tools and processes should be applied. Software Engineering is more than just Project Management, but a large part intersects.
Bob Young
I have been giving this a lot of thought lately. I have been in the field for 12 years, and feel like I am only beginning to be able to define it.
I think, like Bob, that defining “Engineering” is the best way to start. However, I would go with a slightly different definition. I’d go with this:
Engineering: The practical application of scientific and mathematical principles to solve problems.
I prefer to avoid the use of the word “art” within the definition, because it implies that it is only after many, many arduous years as a novice or journeyman that one may become proficient. I will admit that experience can help, however, it can also be true that learning simply learning something that you have not been exposed to before, can help more.
So, Software Engineering would be: The practical application of scientific and mathematical principles encoded in software to solve problems.
It is my belief that in order to advance the field of Software Engineering, we must move away from art and push toward math and science. For within math and science, there is art. I am referring to the elegance of some software designs.