History of software engineering

History of software engineering

Software engineering has evolved steadily from its founding days in the 1940s until today in the 2000s. Applications have evolved continuously.The ongoing goal to improve technologies and practices, seeks to improve the productivity of practitioners and the quality of applications to users.

The Pioneering Era

The most important development was that new computers were coming out almost every year or two, rendering existing ones obsolete. Software people had to rewrite all their programs to run on these new machines. Programmers did not have computers on their desks and had to go to the "machine room". Jobs were run by signing up for machine time or by operational staff. Jobs were run by putting punched cards for input into the machine's card reader and waiting for results to come back on the printer. The field was so new that the idea of management by schedule was non-existent. Making predictions of a project's completion date was almost impossible. Computer hardware was application-specific. Scientific and business tasks needed different machines. Due to the need to frequently translate old software to meet the needs of new machines, high-order languages like FORTRAN, COBOL, and ALGOL were developed. Hardware vendors gave away systems software for free as hardware could not be sold without software. A few companies sold the service of building custom software but no software companies were selling packaged software. The notion of reuse flourished. As software was free, user organizations commonly gave it away. Groups like IBM's scientific user group SHARE offered catalogs of reusable components. Academia did not yet teach the principles of computer science. Modular programming and data abstraction were already being used in programming."'

1945 to 1965: The origins

The term "software engineering" first appeared in the late 1950s and early 1960s. Programmers have always known about civil, electrical, and computer engineering and debated what engineering might mean for software.

The NATO Science Committee sponsored two conferences [ [http://homepages.cs.ncl.ac.uk/brian.randell/NATO/ The NATO Software Engineering Conferences] ] on software engineering in 1968 (Garmisch, Germany — see "") and 1969, which gave the field its initial boost. Many believe these conferences marked the official start of the profession of "software engineering".

1965 to 1985: The software crisis

Software engineering was spurred by the so-called "software crisis" of the 1960s, 1970s, and 1980s, which identified many of the problems of software development. Many software projects ran over budget and schedule. Some projects caused property damage. A few projects caused loss of life. The software crisis was originally defined in terms of productivity, but evolved to emphasize quality. Some used the term "software crisis" to refer to their inability to hire enough qualified programmers.

*Cost and Budget Overruns: The OS/360 operating system was a classic example. This decade-longfact|date=October 2007 project from the 1960s eventually produced one of the most complex software systems at the time. OS/360 was one of the first large (1000 programmersfact|date=October 2007) software projects. Fred Brooks claims in "The Mythical Man Month" that he made a multi-million dollar mistake of not developing a coherent architecture before starting development.

*Property Da
Software defects can cause property damage. Poor software security allows hackers to steal identities, costing time, money, and reputations.

*Life and Death: Software defects can kill. Some embedded systems used in radiotherapy machines failed so catastrophically that they administered lethal doses of radiation to patients. The most famous of these failures is the "Therac 25" incident.

Peter G. Neumann has kept a contemporary list of software problems and disasters at [http://catless.ncl.ac.uk/Risks Computer Risks] .

The software crisis has been slowly fizzling out, because it is unrealistic to remain in crisis mode for more than 20 years. SEs are accepting that the problems of SE are truly difficult and only hard workfact|date=October 2007 over many decades can solve them.

1985 to 1989: No silver bullet

For decades, solving the software crisis was paramount to researchers and companies producing software tools. Seemingly, they trumpeted every new technology and practice from the 1970s to the 1990s as a "silver bullet" to solve the software crisis.

Tools, discipline, formal methods, process, and professionalism were touted as silver bullets:

*Tools: Especially emphasized were tools: Structured programming, object-oriented programming, CASE tools, Ada, Java, documentation, standards, and Unified Modeling Language were touted as silver bullets.

*Discipline: Some pundits argued that the software crisis was due to the lack of discipline of programmers.

*Formal methods: Some believed that if formal engineering methodologies would be applied to software development, then production of software would become as predictable an industry as other branches of engineering. They advocated proving all programs correct.

*Process: Many advocated the use of defined processes and methodologies like the Capability Maturity Model.

*Professionalism: This led to work on a code of ethics, licenses, and professionalism.

In 1986, Fred Brooks published the "No Silver Bullet" article, arguing that no individual technology or practice would ever make a 10-fold improvement in productivity within 10 years.

Debate about silver bullets raged over the following decade. Advocates for Ada, components, and processes continued arguing for years that their favorite technology would be a silver bullet. Skeptics disagreed. Eventually, almost everyone accepted that no silver bullet would ever be found. Yet, claims about "silver bullets" pop up now and again, even today.

Some interpret "no silver bullet" to mean that software engineering failed. The search for a single key to success never worked. All known technologies and practices have only made incremental improvements to productivity and quality. Yet, there are no silver bullets for any other profession, either. Others interpret "no silver bullet" as proof that software engineering has finally matured and recognized that projects succeed due to hard work.

However, it could also be said that there are, in fact, a range of "silver bullets" today, including lightweight methodologies (see "Project management"), spreadsheet calculators, customized browsers, in-site search engines, database report generators, integrated design-test coding-editors with memory/differences/undo, and specialty shops that generate niche software, such as information websites, at a fraction of the cost of totally customized website development. Nevertheless, the field of software engineering appears too complex and diverse for a single "silver bullet" to improve most issues, and each issue accounts for only a small portion of all software problems.

1990 to 1999: Prominence of the Internet

The rise of the Internet led to very rapid growth in the demand for international information display/e-mail systems on the world wide web. Programmers were required to handle illustrations, maps, photographs, and other images, plus simple animation, at a rate never before seen, with few well-known methods to optimize image display/storage (such as the use of thumbnail images).

The growth of browser usage, running on the HTML language, changed the way in which information-display and retrieval was organized. The wide-spread network connections led to the growth and prevention of international computer viruses on MS Windows computers, and the vast proliferation of spam e-mail became a major design issue in e-mail systems, flooding communication channels and requiring semi-automated pre-screening. Keyword-search systems evolved into web-based search engines, and many software systems had to be re-designed, for international searching, depending on Search Engine Optimization (SEO) techniques. Human natural-language translation systems were needed to attempt to translate the information flow in multiple foreign languages, with many software systems being designed for multi-language usage, based on design concepts from human translators. Typical computer-user bases went from hundreds, or thousands of users, to, often, many-millions of international users.

2000 to Present: Lightweight Methodologies

With the expanding demand for software in many smaller organizations, the need for inexpensive software solutions led to the growth of simpler, faster methodologies that developed running software, from requirements to deployment, quicker & easier. The use of rapid-prototyping evolved to entire "lightweight methodologies", such as Extreme Programming (XP), which attempted to simplify many areas of software engineering, including requirements gathering and reliability testing for the growing, vast number of small software systems. Very large software systems still used heavily-documented methodologies, with many volumes in the documentation set; however, smaller systems had a simpler, faster alternative approach to managing the development and maintenance of software calculations and algorithms, information storage/retrieval and display.

Major developments

There are a number of areas where the evolution of software engineering is notable:

*Emergence as a profession: By the early 1980s, software engineering had already emerged as a bona fide profession, to stand beside computer science and traditional engineering. See also software engineering professionalism.

*Role of women: In the 1940s, 1950s, and 1960s, men often filled the more prestigious and better paying hardware engineering roles, but often delegated the writing of software to women. Grace Hopper, Jamie Fenton and many other unsung women filled many programming jobs during the first several decades of software engineering. Today, many fewer women work in software engineering than in other professions, a complex problem related to sexual discrimination, cyberculture, education, and individual identity, and one which many academic and professional organizations are trying hard to solve.

*Processes: Processes have become a big part of software engineering and are hailed for their potential to improve software and sharply criticized for their potential to constrict programmers.

*Cost of hardware: The relative cost of software versus hardware has changed substantially over the last 50 years. When mainframes were expensive and required large support staffs, the few organizations buying them also had the resources to fund large, expensive custom software engineering projects. Computers are now much more numerous and much more powerful, which has several effects on software. The larger market can support large projects to create commercial off the shelf software, as done by companies such as Microsoft. The cheap machines allow each programmer to have a terminal capable of fairly rapid compilation. The programs in question can use techniques such as garbage collection, which make them easier and faster for the programmer to write. On the other hand, many fewer organizations are interested in employing programmers for large custom software projects, instead using commercial off the shelf software as much as possible.

Prominent Figures in the History of Software Engineering

* Edsger Dijkstra
* Ken Thompson (inventor of Unix)
* Dennis Ritchie (inventor of C)
* Brian Kernighan (co-author of the first book on the C programming language with Dennis Ritchie, coauthor of the AWK and AMPL programming languages)
* Bill Joy (inventor of vi, early author of BSD Unix, and originator of SunOS, which became Solaris)
* Anders Hejlsberg (developer of Turbo Pascal)
* John Von Neumann (originator of the operating system concept)
* John Backus (inventor of Fortran)
* Bjarne Stroustrup (developer of C++)
* Alan Kay (pioneering work on object-oriented programming: Originator of Smalltalk)
* James Gosling (developer of Oak, the precursor of Java)
* Alan Cooper (developer of Visual Basic)
* [http://channel9.msdn.com/ShowPost.aspx?PostID=224935 Tony Williams] (co-inventor of COM - interesting interview)
* Niklaus Wirth inventor of Pascal and Modula

References

External links

* Brian Randell: [http://homepages.cs.ncl.ac.uk/brian.randell/NATO/ The NATO Software Engineering Conferences] (The site includes the original two NATO-reports from 1968 and 1969 as well as photographs of the participants and some of the sessions at Garmisch)


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Look at other dictionaries:

  • Software engineering — (SE) is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.[1] It is the… …   Wikipedia

  • Outline of software engineering — See also: Index of software engineering articles The following outline is provided as an overview of and topical guide to software engineering: Software engineering – application of a systematic, disciplined, quantifiable approach to the… …   Wikipedia

  • Software engineering professionalism — For many years, software engineering has been trying to be a profession.This was hampered by the common perception that it is merely the application of computer science. The goal of making software engineering into its own profession spurred a… …   Wikipedia

  • Software Engineering Institute — The Carnegie Mellon Software Engineering Institute (SEI) is a federally funded research and development center headquartered on the campus of Carnegie Mellon University in Pittsburgh, Pennsylvania, United States. SEI also has offices in Arlington …   Wikipedia

  • Topic outline of software engineering — For a more comprehensive list, see the List of software engineering topics. Software Engineering (SE) is the design, development, and documentation of software by applying technologies and practices from computer science, project management,… …   Wikipedia

  • Component-based software engineering — A simple example of two components expressed in UML 2.0. The checkout component, responsible for facilitating the customer s order, requires the card processing component to charge the customer s credit/debit card (functionality that the latter… …   Wikipedia

  • Computer-aided software engineering — Example of a CASE tool. Computer aided software engineering (CASE) is the scientific application of a set of tools and methods to a software system which is meant to result in high quality, defect free, and maintainable software products.[1] It… …   Wikipedia

  • Search-based software engineering — (SBSE) is an approach to apply metaheuristic search techniques like genetic algorithms, simulated annealing and tabu search to software engineering problems. It is inspired by the observation that many activities in software engineering can be… …   Wikipedia

  • List of software engineering topics — This list complements the software engineering article, giving more details and examples. For an alphabetical listing of topics, please see List of software engineering topics (alphabetical).Influence on societySoftware engineers affect society… …   Wikipedia

  • Cleanroom software engineering — For the meaning of clean room engineering as a method to avoid copyright infringement, see Cleanroom design. Software development process Activities and steps …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”