To understand the necessity of software development, we need to conclude briefly to look back at the latest history of computing. This history will help us understand the problems that emerged in the late sixties and early seventies, as well as the solutions that created the area of software development. Some of these problems were referred to as "The Software Crisis," so the symptoms of the problem were named. The situation can also be called the "complexity barrier", so we named it the primary cause of the problems. Some report the software crisis over the past period. The crisis is far from being realized, but thanks to the development of many new technologies, which are now included in the software development title, we have been and will continue.
In the early days of computing, the primary problem was hardware building or acquisition. They almost waited to take care of software. According to consensus, "hardware" is "hard" for change, while "software" is "soft" or easy to change. Most people in the industry have carefully planned hardware development, but carefully thought the software less cautious. If the software did not work, they thought it would be easy to change it until it worked. Why are the plans in this case?
The cost of software is such a small part of the hardware cost that no one considered the development of management important. Nevertheless, it was important for everyone to make efficient and fast running programs because it saved expensive hardware. People had the time to save the machine time. Relief of effective processing of people.
This approach was satisfactory at the beginning of computing when the software was simple. However, as the calculations were mature, the programs became more and more complex and the projects were larger, while the programs had been routinely defined, written, operated and maintained by the same person, programs have been developed by the programmers team to meet someone else's expectations.
Individual effort cave for the effort of the team. The communication and coordination that once went on in one person's mind had to be among the leaders of many people, making the whole process more complicated. As a result, communication, management, planning and documentation became critical.
Consider this analogy: a carpenter can work alone to build a simple house for himself without having to consider the general concept of a plan. He worked out or modified how the work progressed. This is the writing of early programs. But if your home is more complicated, or if someone else is prepared, the carpenter needs to plan the construction of the house more thoroughly. The plans must be reviewed before the construction begins with the future owner. And if the house were to be built on many carpenters, the whole project must of course be planned before starting work, when a carpenter builds part of the house and the other does not build the other side of the house. It becomes a key element of the scheduling that cement producers pour the basement walls before the carpenters start framing. As the house becomes more complicated and more people's work needs to be coordinated, plans and management plans have to be drawn up.
As the programs became more complex, the early methods used for drawing drawings (flowcharts) were no longer sufficient to represent this complexity. And that made it difficult for a person to need a program he was writing to convey to another person, the programmer, just what they wanted, or the programmers to convey what they did. In fact, without a better representation method, it would have been difficult for a programmer to track what he was doing.
Time needed to write programs and their costs began to exceed all estimates. It was not uncommon for the systems to go more than twice as costly as they were estimated and to last longer than weeks, months, or years. Systems delivered to clients often did not work properly because money or time ran out before the programs originally planned. Or the program was so complex that trying to solve every problem caused more problems than it was recorded. As customers finally saw what they were getting, they often changed their minds as they wanted. At least one very large military software project, which reported hundreds of millions of dollars, was rejected because it could never work properly.
The quality of programs was also a big problem. As computers and programs have been used for more lifelike tasks, such as monitoring life-support devices, program quality has new meanings. As we increased our addiction from the computer and in many cases we could not spare them, we realized how important it is to work properly.
Change in a complex program was very expensive. Often, the program did something different, it was so difficult that it was easier to discard the old program and start it. That was, of course, expensive. In the software development approach, as part of evolution, they have mastered the development of systems that are sufficiently built for the first time, making simple changes easy to do.
However, hardware has become more and more expensive. The tubes were replaced by transistors, and the transistors were replaced by integrated circuits, while the microprocessors were less than three thousand dollars for millions of dollars. As a sign of rapid change, a certain amount of IT costs decides every two years every two years. With regard to the rearrangement, software development times and costs were no longer small compared to the hardware that they could ignore.
As the price of hardware dropped, software was still being written by people whose wages rose. In software development, productivity gains from assemblers, translators, and database management systems did not go as fast as saving hardware costs. In fact, the cost of software can not be ignored today, compared to hardware costs. Some current developments, such as non-continuous (fourth generation) languages and artificial intelligence (fifth generation), promise to increase software development productivity, but only their potential is seen.
Another problem was that in the past the programs were often before they fully understood what to do with the program. After the program was completed, the client began to express his dissatisfaction. And if the customer is dissatisfied, the producer is very unhappy. As time passed, software developers learned to sort paper and pencils exactly what they were planning to do before they started. Then I would review the plans with the customer to get acquainted with the customer's expectations. Simplified and cheaper modification of the paper and pencil version than after the system has been built. Because of the use of good design, it is less likely that changes will be made after the program is completed.
Unfortunately, a few years ago, they did not show the appropriate representation method to describe enough systems that are complicated than today's developments. The only good look is what will look like the product itself is the finished product itself. Developers could not tell customers what they were planning on. And customers did not see the software as long as it was not built. Then it was too expensive to change it.
Consider the analogy of the building structure again. An architect can draw a floor plan. The client can usually get to know what the architect designed and give feedback if it is appropriate. Floor plans are reasonably easy to understand layman, as most people are familiar with drawings depicting geometric objects. The architect and customer share the common concepts of space and geometry. However, software developers need to represent customers with a logical and information processing system. Since they do not have the language of common concepts, the software developer must teach a new language to the client before he can communicate.
It is also important that this language is easy to learn quickly.