| • Science | • People | • Locations | • Timeline |
The SE community includes 630,000 practitioners and educators in the U.S. and an estimated 1,400,000 practitioners in the E.U., Asia, and elsewhere; it is about 60% the size of traditional engineering. SE pioneers include Barry Boehm, Fred Brooks, C. A. R. Hoare, and David Parnas.
Related terms: software engineer .
See also List of software engineering topics.
As of 2004, in common parlance the term software engineering is used with at least three distinct meanings:
There are currently no clear distinctions between software engineers and non-software engineers. But, the more education and experience someone has, the clearer it is that this person is a true software engineer. The following rules of thumb have been used when hiring:
Note: Similar levels work for other professions, such as civil engineering.
Note: Some have argued that only licensed software engineers are truly software engineers. Others have argued that only people with SE degrees are truly software engineers. But, simplistic distinctions do not work for any field.
Software engineering is the profession that cares about creation of software.
Members of this profession are called software engineers, programmers, developers, or practitioners.
People who write code and do not follow the doctrines of software engineering are more rightfully called programmers, developers, or software artists.
Software engineering affects economies and societies in many ways.
Successful projects where software engineering methods have been applied include Linux, the space shuttle software, and automatic teller machines. When it is cheaper to run a business or agency with software applications than without, businesses and agencies often invest in computers, software, and personnel .
See also software engineering economics.
Is SE a success or a failure? Some look to the enormous economic growth and productivity gains enabled by software and claim that software engineering is a huge success. Others point to the ongoing problems with crashing applications and computer viruses and claim that software engineering has failed. How can we reconcile these points of view?
See also Debates within software engineering and Criticism of software engineering
People from many different educational backgrounds make important contributions to SE. The fraction of practitioners who earn computer science or software engineering degrees has been slowly rising. Today, about 1/2 of all software engineers earn computer science or software engineering degrees. For comparison, about 3/4 of all traditional engineers earn engineering degrees.
Undergraduate software engineering degrees are being established at many universities. A standard international curriculum for undergraduate software engineering degrees was recently defined by the CCSE.
Graduate computer science degrees have been available from hundreds of universities for several decades.
Graduate software engineering degrees have been available from dozens of universities for a decade or so.
What is the best way to make more and better software? SEs advocate many different technologies and practices, with much disagreement. This debate has gone on for 60 years and may continue forever. Software engineers use a wide variety of technologies and practices.
Practitioners use a wide variety of technologies, from compilers to word processors to code repositories.
A decades-long goal has been to find processes or methodologies that improve producitivity and quality. Some want to systematize or formalize the seemingly-unruly task of writing applications. Others want to apply project management techniques to writing applications. Without project management, software projects can easily be delivered late or over budget. With large numbers of software projects not meeting their expectations in terms of functionality, cost, or delivery schedule, effective project management is proving difficult.
The best-known and oldest process is the waterfall model, where (roughly) developers analyze the problem, design a solution approach, architect a software framework to that solution, develop code, test, deploy, and maintain. The problem is that adequate experience to analyze and specify large systems is almost never available and errors discovered late in the process are expensive to fix. Recent approaches (such as agile) aim to be more flexible and more incremental. These models are more complex and subtler and more realistic. Advocates urge both discipline and pragmatism.
Iterative development prescribes the construction of an initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.'[SE advocates] have climbed a social ladder for a few decades and are now fighting against a tide of open source software that seems to be bringing bazaar anarchy and taking the well-deserved control out of their hands. Part of this is their utopia of "software engineering" by some magic cathedral approach which has never worked and whose failure the authors of these utopias tend to blame on the lack of control that copyright offers them over their projects. The strange thing here is that they have had the chance to put all these things into practise in their university haven. But, strangely enough, the more successful university projects are carried out in a bazaar-like open-source manner.' -- Hartmut Pilch
See also software development processes and methodologies.
Practitioners specialize in many roles in industry ( analysts, architects, developers, testers, technical support, managers) and academia ( educators, researchers).
In large projects, people may specialize in only 1 role. In small projects, people may fill several or all roles at the same time.
Most software engineers work as employees or contractors. Software engineers work with businesses, government agencies (civilian or military), and non-profit agencies (a school or .org like Wikipedia). Some software engineers work for themselves as free agents.
There is considerable debate over the future employment prospects for Software Engineers and other IT Professionals. For example, an online futures market called the Future of IT Jobs in America attempts to answer the question as to whether there will be more IT jobs, including software engineers, in 2012 than there were in 2002.
See also software engineering demographics.
Many fields are closely related to software engineering. Here are some key similarities and distinctions. Comparing SE with other fields helps explain what SE is and helps define what SE might or should become. There is considerable debate over which which fields SE most resembles (or should most resemble). These complex and inexact comparisons explain why some see software engineering as its own field.
Software engineering resembles many different field in many different ways. The following paragraphs make some simple comparisons.
Is SE (or should SE be) a branch of programming, a branch of computer science, a branch of traditional engineering, or a field that stands on its own? There is considerable debate over this. This has important implications for professionalism, licensing, and ethics. Licensing is a polarizing issue: some fiercely advocate it while others staunchly oppose it.
See also Comparing software engineering and related fields.
Software engineering has a long evolving history. Both the tools that are used and the applications that are written have evolved over time. It seems likely that software engineering will continue evolving for many decades to come.
See also History of software engineering.
Aspect-oriented programming and agile methods are important emerging SE technologies and practices.
The Future of Software Engineering conference (FOSE) held at the ICSE 2000 documented the state of the art of SE in 2000 and listed many problems to be solved over the next decade. The Feyerabend project attempts to discover the future of software engineering by seeking and publishing innovative ideas.
Several academic conferences devoted to software engineering are held every year. There are also many other academic conferences every year devoted to special topics within SE, such as programming languages, requirements, testing, and so on.
|