This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "History of software engineering" – news ·newspapers ·books ·scholar ·JSTOR(October 2008) (Learn how and when to remove this message) |
| History of computing |
|---|
| Hardware |
| Software |
| Computer science |
| Modern concepts |
| By country |
| Timeline of computing |
| Glossary of computer science |
Thehistory of software engineering begins around the 1960s. Writingsoftware has 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]
The evolution of software engineering is notable in a number of areas:
Early usages for the termsoftware engineering include a 1965 letter from ACM presidentAnthony Oettinger,[6][7] lectures byDouglas T. Ross at MIT in the 1950s.[8]Margaret H. Hamilton is 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 Committee sponsored 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]
Software engineering was spurred by the so-calledsoftware crisis of 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. Through negligence in publishing software with critical bugs, some lost their lives due to software failures. One of the most striking examples of harm through software bugs was theTherac-25 race condition bug. The bug caused a radiation therapy machine to administer overdoses of radiation in cases where low doses should have been used. The software crisis was originally defined in terms ofproductivity, but evolved to emphasizequality. Some used the termsoftware crisis to refer to their inability to hire enough qualified programmers.[citation needed] During this time,Silicon Valley cemented itself as the best location for software engineers to work.[14]
Peter G. Neumann has 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. Jackson has 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]
One of the largest projects undertaken by software engineers during this time period was the development of modernoperating systems. Starting in Bell Labs and then moving to UC Berkeley,Ken Thompson andDennis Ritchie, among other software engineers, worked to createUnix V6 in 1975. Unix V6 was a landmark operating system that set standards for future operating systems and is used today to educate students about proper operating system principles.[18] Moreover, future operating systems built on Unix V6's methods, and its descendants can be grouped into five types of operating system paradigms: Grassroots Systems, Large-Scale Systems, Hybrid Systems, Experimental Systems, and Minor Systems.[19] In contrast with Unix, software engineers at MIT in 1983 builtGNU (literally "GNU's Not Unix") as an open source alternative to Unix. As an early open source software, GNU was beloved by a small group of developers and its work grew the open source software development community in the 80s.[20]
For 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]
Seemingly, every new technology and practice from the 1970s through the 1990s was trumpeted as asilver bullet to solve the software crisis. Tools, discipline,formal methods, process, and professionalism were touted as silver bullets:[citation needed]
In 1986,Fred Brooks published hisNo Silver Bullet article, 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 bullets pop up now and again, even today.[citation needed]
Some[who?] interpret[why?]no silver bullet to 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 bullet as 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 bullets today, 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]
The rise of theInternet 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).[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 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-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]
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 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]
Software engineering is a young discipline, and is still developing. The directions in which software engineering is developing include:[citation needed]
Aspects help software engineers deal withquality attributes by providing tools to add or removeboilerplate code from many areas in thesource code. Aspects describe how all objects or functions should behave in particular circumstances. For example,aspects can adddebugging,logging, orlocking control into all objects of particular types. Researchers are currently working to understand how to use aspects to design general-purpose code. Related concepts includegenerative programming andtemplates.
Experimental software engineering is a branch of software engineering interested in devisingexperiments on software, in collecting data from the experiments, and in devising laws and theories from this data.
Software product lines, aka product family engineering, is a systematic way to producefamilies of 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[22] and the ICSE 2007[23] conferences also help identify the state of the art in software engineering.[citation needed]
The profession is trying to define its boundary and content. The Software Engineering Body of KnowledgeSWEBOK has been tabled as an ISO standard during 2006 (ISO/IEC TR 19759).[citation needed]
In 2006,Money Magazine andSalary.com rated 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.[24]
A wide variety of platforms has allowed different aspects of AI to develop, ranging fromexpert systems such asCyc todeep learning to robot platforms such as theRoomba with open interface.[25] Recent advances in deepartificial neural networks and distributed computing have led to a proliferation of software libraries, includingDeeplearning4j,TensorFlow,Theano andTorch.
A 2011McKinsey Global Institute study found a shortage of 1.5 million highly trained data and AI professionals and managers[26] and a number of private bootcamps have developed programs to meet that demand, including free programs likeThe Data Incubator or paid programs likeGeneral Assembly.[27]
Early symbolic AI inspiredLisp andProlog, which dominated early AI programming. Modern AI development often uses mainstream languages such asPython orC++,[28] or niche languages such asWolfram Language.[29]
{{cite web}}: CS1 maint: numeric names: authors list (link){{cite journal}}:Cite journal requires|journal= (help)