Software Engineering is it really Engineering


Software Engineering is a field of computer science that deals with the building of software system that are so large, so complex that they are built by team a teams of engineers. Parnas +AFs-1987+AF0- has defined software as +ACI-multi-person construction of multi-version software+ACI- this definition i think captures the essence of software engineering and differentiate it form programming. The term software engineering was coined in late 1960's when computers were becoming cheaper and more common and more people stared using them. It was at that time +ACI-programming+ACI- attained the status of profession and truly large system were attempted commercially. One of the best documented of these was the OS 360 operating System for the IBM 360 computer family. It was at that time realized that building large projects is entirely different from building small personal project. The term +ACI-Software Engineering+ACI- was invented at that time.

It was discovered that building a large software system is not merely putting the computer instruction together but understanding the problem first, because if we do not fully understand what the problem is we will not be able to solve it. Now a lot of time was spent on gathering data about the system, communicating with the persons involved. It was finally thought that building a software should be approached in the same way engineers had built other complex systems such as bridges, ships, airplanes etc. the point is that software system is a complex product and the building of it is an engineers job. The engineering approach required management, organization, tools, theories, methodologies and technique, regardless of the entities to be engineered.

Software engineering has made significant progress since 1960s. There are standard techniques that are used in the field. But the field is far from achieving the status of classical engineering disciplines. There are many areas where informal techniques are taught and practiced. There are no specific and generally accepted methods even for specifying what a software system should do. The early versions still contain loads of bugs in it and even after a lot of patching and debugging the new versions still contains new bugs. Every software product comes with a disclaimer saying the company is not responsible for any losses caused due to losses caused by the use of the software product. Now in engineering discipline if a building or a bridge build by a civil engineer collapses due to faulty design isn't the engineer held responsible and put behind bars, so why when a software crashes due to faulty design the software engineer is let free. so isn't it that the software field is not relay a engineering discipline