This articleneeds additional citations forverification.(October 2008) |
Thehistory of software engineeringbegins around the 1960s. Writingsoftwarehas evolved into a profession concerned with how best to maximize the quality of software and of how to create it. Quality can refer to how maintainable software is, to its stability, speed, usability, testability, readability, size, cost, security, and number of flaws or "bugs", as well as to less measurable qualities like elegance, conciseness, and customer satisfaction, among many other attributes. How best to create high quality software is a separate and controversial problem covering software design principles, so-called "best practices" for writing code, as well as broader management issues such as optimal team size, process, how best to deliver software on time and as quickly as possible, work-place "culture", hiring practices, and so forth. All this falls under the broad rubric ofsoftware engineering.[1]
Overview
editThe evolution of software engineering is notable in a number of areas:
- Emergence as a profession: By the early 1980s software engineering had already emerged as abona fideprofession,[2]to stand beside computer science and traditional engineering.[citation needed]
- Role of women:Before 1970 men filling the more prestigious and better payinghardware engineeringroles often delegated the writing of software to women, and legends such asGrace HopperorMargaret Hamiltonfilled manycomputer programmingjobs.[3][4]
Today, fewer women work in software engineering than in other professions, a situation whose cause is not clearly identified. Many academic and professional organizations[who?]consider this situation unbalanced and are trying hard to solve it.[5] - Processes:Processeshave become a big part of software engineering. They are hailed for their potential to improve software but sharply criticized for their potential to constrict programmers.[citation needed]
- Cost of hardware: The relative cost of software versus hardware has changed substantially over the last 50 years. Whenmainframeswere 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 createcommercial off the shelfsoftware, as done by companies such asMicrosoft.The cheap machines allow each programmer to have a terminal capable of fairly rapidcompilation.The programs in question can use techniques such asgarbage 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 usingcommercial off the shelfsoftware as much as possible.[citation needed]
1945 to 1965: The origins
editEarly usages for the termsoftware engineeringinclude a 1965 letter from ACM presidentAnthony Oettinger,[6][7]lectures byDouglas T. Rossat MIT in the 1950s.[8]Margaret H. Hamiltonis the person who came up with the idea of naming the discipline, software engineering, as a way of giving it legitimacy during the development of theApollo Guidance Computer.[9][10]
I fought to bring the software legitimacy so that it—and those building it—would be given its due respect and thus I began to use the term 'software engineering' to distinguish it from hardware and other kinds of engineering, yet treat each type of engineering as part of the overall systems engineering process. When I first started using this phrase, it was considered to be quite amusing. It was an ongoing joke for a long time. They liked to kid me about my radical ideas. Software eventually and necessarily gained the same respect as any other discipline
TheNATO Science Committeesponsored two conferences[12]on software engineering in 1968 (Garmisch,Germany) and 1969, which gave the field its initial boost. Many believe these conferences marked the official start of the profession ofsoftware engineering.[6][13]
1965 to 1985: The software crisis
editSoftware engineering was spurred by the so-calledsoftware crisisof the 1960s, 1970s, and 1980s, which identified many of the problems of software development. Many projects ran over budget and schedule. Some projects caused property damage. A few projects caused loss of life.[14]The software crisis was originally defined in terms ofproductivity,but evolved to emphasizequality.Some used the termsoftware crisisto refer to their inability to hire enough qualified programmers.[citation needed]
- Cost andBudget Overruns:TheOS/360operating system was a classic example. This decade-long project from the 1960s eventually produced one of the most complex software systems at the time.[13]OS/360 was one of the first large (1000 programmers[citation needed]) software projects.Fred Brooksclaims inThe Mythical Man-Monththat he made a multimillion-dollar mistake of not developing a coherentarchitecturebefore starting development.[13]
- Property Damage: Software defects can cause property damage. Poorsoftware securityallows hackers to steal identities, costing time, money, and reputations.[citation needed]
- Life and Death: Software defects can kill.Embedded systemsused inradiotherapymachines prove the ability to fail so catastrophically that they administeredlethal dosesofradiationto patients. The most famous of these failures are theTherac-25incidents.[15]
Peter G. Neumannhas kept a contemporary list of software problems and disasters.[16]The software crisis has been fading from view, because it is psychologically extremely difficult to remain in crisis mode for a protracted period (more than 20 years). Nevertheless, software – especially real-time embedded software – remains risky and is pervasive, and it is crucial not to give in to complacency. Over the last 10–15 yearsMichael A. Jacksonhas written extensively about the nature of software engineering, has identified the main source of its difficulties as lack of specialization, and has suggested that his problem frames provide the basis for a "normal practice" of software engineering, a prerequisite if software engineering is to become an engineering science.[17]
1985 to 1989: "No Silver Bullet"
editFor decades, solving the software crisis was paramount to researchers and companies producing software tools. The cost of owning and maintaining software in the 1980s was twice as expensive as developing the software.[citation needed]
- During the 1990s, the cost of ownership and maintenance increased by 30% over the 1980s.
- In 1995, statistics showed that half of surveyed development projects were operational, but were not considered successful.
- The average software project overshoots its schedule by half.
- Three-quarters of all large software products delivered to the customer are failures that are either not used at all, or do not meet the customer's requirements.
Software projects
editSeemingly, every new technology and practice from the 1970s through the 1990s was trumpeted as asilver bulletto solve the software crisis. Tools, discipline,formal methods,process, and professionalism were touted as silver bullets:[citation needed]
- Tools: Especially emphasized were tools:structured programming,object-oriented programming,CASEtools such as ICL'sCADESCASE system,[18]Ada,documentation,andstandardswere 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 andmethodologieslike theCapability Maturity Model.
- Professionalism: This led to work on a code of ethics, licenses, and professionalism.
In 1986,Fred Brookspublished hisNo Silver Bulletarticle, arguing that no individual technology or practice would ever make a 10-fold improvement in productivity within 10 years.[citation needed]
Debate about silver bullets raged over the following decade. Advocates forAda,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 aboutsilver bulletspop up now and again, even today.[citation needed]
Some[who?]interpret[why?]no silver bulletto mean that software engineering failed.[clarification needed]However, with further reading, Brooks goes on to say: "We will surely make substantial progress over the next 40 years; an order of magnitude over 40 years is hardly magical..."[citation needed]
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 interpretno silver bulletas proof that software engineering has finally matured and recognized that projects succeed due to hard work.[citation needed]
However, it could also be said that there are, in fact, a range ofsilver bulletstoday, including lightweight methodologies (see "Project management"), spreadsheet calculators, customizedbrowsers,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 web sites, at a fraction of the cost of totally customized web site 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.[citation needed]
1990 to 1999: Prominence of the Internet
editThe rise of theInternetled 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).[citation needed]
The growth of browser usage, running on theHyperText Markup Language(HTML), changed the way in which information-display and retrieval was organized. The widespread network connections led to the growth and prevention of internationalcomputer viruseson 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-basedsearch engines,and many software systems had to be re-designed, for international searching, depending onsearch engine optimization(SEO). 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.[citation needed]
2000 to 2015: Lightweight methodologies
editWith 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 entirelightweight methodologies,such asExtreme 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.[citation needed]
Current trends in software engineering
editSoftware engineering is a young discipline, and is still developing. The directions in which software engineering is developing include:[citation needed]
Aspects
editAspectshelp software engineers deal withquality attributesby providing tools to add or removeboilerplate codefrom many areas in thesource code.Aspects describe how all objects or functions should behave in particular circumstances. For example,aspectscan adddebugging,logging,orlockingcontrol into all objects of particular types. Researchers are currently working to understand how to use aspects to design general-purpose code. Related concepts includegenerative programmingandtemplates.
Experimental
editExperimental software engineeringis a branch of software engineering interested in devisingexperimentson software, in collecting data from the experiments, and in devising laws and theories from this data.
Software product lines
editSoftware product lines, aka product family engineering,is a systematic way to producefamiliesof software systems, instead of creating a succession of completely individual products. This method emphasizes extensive, systematic, formalcode reuse,to try to industrialize the software development process.
The Future of Software Engineering conference (FOSE), held at ICSE 2000, documented the state of the art of SE in 2000 and listed many problems to be solved over the next decade. The FOSE tracks at the ICSE 2000[19]and the ICSE 2007[20]conferences also help identify the state of the art in software engineering.[citation needed]
Software engineering today
editThe profession is trying to define its boundary and content. The Software Engineering Body of KnowledgeSWEBOKhas been tabled as an ISO standard during 2006 (ISO/IEC TR 19759).[citation needed]
In 2006,Money MagazineandSalary.comrated software engineering as the best job in America in terms of growth, pay, stress levels, flexibility in hours and working environment, creativity, and how easy it is to enter and advance in the field.[21]
Sub-disciplines
editArtificial intelligence
editA wide variety of platforms has allowed different aspects of AI to develop, ranging fromexpert systemssuch asCyctodeep learningto robot platforms such as theRoombawith open interface.[22]Recent advances in deepartificial neural networksand distributed computing have led to a proliferation of software libraries, includingDeeplearning4j,TensorFlow,TheanoandTorch.
A 2011McKinsey Global Institutestudy found a shortage of 1.5 million highly trained data and AI professionals and managers[23]and a number of private bootcamps have developed programs to meet that demand, including free programs likeThe Data Incubatoror paid programs likeGeneral Assembly.[24]
Languages
editEarly symbolic AI inspiredLispandProlog,which dominated early AI programming. Modern AI development often uses mainstream languages such asPythonorC++,[25]or niche languages such asWolfram Language.[26]
Prominent figures in the history of software engineering
edit- Charles Bachman(1924–2017) is particularly known for his work in the area ofdatabases.
- László Bélády(1928–2021) the editor-in-chief of the IEEE Transactions on Software Engineering in the 1980s.
- Fred Brooks(born 1931) best known for managing the development ofOS/360.
- Peter Chen(born 1947) known for the development ofentity–relationship modeling.
- Edsger W. Dijkstra(1930–2002) developed the framework for a form of structured programming.
- David Parnas(born 1941) developed the concept ofinformation hidinginmodular programming.
- Michael A. Jackson(born 1936) software engineering methodologist responsible for JSP method of program design; JSD method of system development (with John Cameron); and Problem Frames approach for analysing and structuring software development problems.
- Richard Stallman,created the GNU system utilities and championed free software.
See also
editReferences
edit- ^"CS302: Jared King's" The History of Software "".learn.saylor.org.Archived fromthe originalon 2018-11-19.Retrieved2018-02-17.
- ^"Software engineering… has recently emerged as a discipline in its own right." Sommerville, Ian (1985) [1982].Software Engineering.Addison-Wesley.ISBN978-0-201-14229-7.
- ^Abbate, Janet (2012).Recoding Gender.Cambridge, MA: MIT Press. pp.39.ISBN978-0262534536.
- ^Ensmenger, Nathan (2012).The Computer Boys Take Over.Cambridge, MA: MIT Press.ISBN978-0262517966.
- ^"Episode 576: When Women Stopped Coding".NPR Planet Money.Oct 17, 2014.RetrievedJune 27,2018.
- ^abMeyer, Bertrand(April 4, 2013)."The origin of" software engineering "".Retrieved2016-11-25.
- ^Tadre, Matti (2014-12-03).The Science of Computing.CRC Press. p. 121.ISBN978-1-4822-1770-4.
- ^Mahoney, Michael."The Roots of Software Engineering"(PDF).CWI Quarterly.3(4):325–334. Archived fromthe original(PDF)on 2011-02-20.RetrievedFeb 10,2023.
- ^2018 International Conference on Software Engineering celebrating its 40th anniversary, and 50 years of Software engineering."ICSE 2018 - Plenary Sessions - Margaret Hamilton".YouTube.Retrieved9 Jun2018.
{{cite web}}
:CS1 maint: numeric names: authors list (link) - ^Rayl, A.J.S. (October 16, 2008)."NASA Engineers and Scientists-Transforming Dreams Into Reality".NASA 50th anniversary website.NASA.Archived fromthe originalon 2010-06-29.Retrieved2016-11-25.
- ^"First Software Engineer | IEEE Computer Society".5 October 2018.Retrieved2023-03-05.
- ^Brian Randell(2001)."NATO Software Engineering Conferences".ncl.ac.uk.Retrieved2016-11-25.
- ^abcKing, Jared (2016)."Jared King's" The History of Software "".CS302: Software Engineering.Saylor.org.Archived fromthe originalon 2018-11-19.Retrieved2016-11-25.
- ^Therac-25
- ^Leveson, N.G.; Turner, C.S. (1993-07-01). "An investigation of the Therac-25 accidents".Computer.26(7):18–41.CiteSeerX10.1.1.372.412.doi:10.1109/MC.1993.274940.ISSN0018-9162.S2CID9691171.
- ^Neumann, Peter G."RISKS-LIST: RISKS-FORUM Digest".The Risks Digest.
- ^Michael Jackson, "Engineering and Software Engineering" in S Nanz ed, The Future of Software Engineering, Springer Verlag 2010; Michael Jackson, Problem Frames: Analyzing and Structuring Software Development Problems; Addison-Wesley, 2001
- ^D.J.Pearson "The use and abuse of a software engineering system" National Computer Conference 1979
- ^"ICSE2000: Call for Participation".ul.ie.
- ^"ICSE 2007: Home".ucl.ac.uk.
- ^Kalwarski, Tara; Daphne Mosher; Janet Paskin;Donna Rosato(2006)."Best Jobs in America".MONEY Magazine.CNN.Retrieved2006-04-20.,"MONEY Magazine and Salary.com researched hundreds of jobs, considering their growth, pay, stress-levels and other factors. These careers ranked highest. 1. Software Engineer..."
- ^"Hacking Roomba".hackingroomba.com.Archivedfrom the original on 18 October 2009.
- ^Manyika, James; Chui, Michael; Bughin, Jaques; Brown, Brad; Dobbs, Richard; Roxburgh, Charles; Byers, Angela Hung (May 2011)."Big Data: The next frontier for innovation, competition, and productivity".McKinsey Global Institute.Archivedfrom the original on 6 March 2013.Retrieved16 January2016.
{{cite journal}}
:Cite journal requires|journal=
(help) - ^"NY gets new boot camp for data scientists: It's free but harder to get into than Harvard".Venture Beat.Archivedfrom the original on 15 February 2016.Retrieved21 February2016.
- ^"C++ Java".infoworld.com.Retrieved6 December2017.
- ^Ferris, Robert (7 April 2016)."How Steve Jobs' friend changed the world of math".CNBC.Retrieved28 February2018.
External links
edit- Oral history interview with Bruce H. Barnes,Charles Babbage Institute,University of Minnesota. Barnes describes the National Science Foundation (NSF) and its support of research in theoreticalcomputer science,computer architecture,numerical methods,andsoftware engineering,and the development of networking.
- Oral history interview with Laszlo A. Belady,Charles Babbage Institute,University of Minnesota.