Software engineering is "(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software," and "(2) the study of approaches as in (1)." – IEEE Standard 610.12
Introduction[edit | edit source]
Software Engineering (SE) is the design, development, and documentation of software by applying technologies and practices from computer science, project management, engineering, application domains, interface design, digital asset management and other fields.
The term software engineering was popularized after 1968, during the 1968 NATO Software Engineering Conference (held in Garmisch, Germany) by its chairman F.L. Bauer, and has been in widespread use since.
The term software engineering has been commonly used with a variety of distinct meanings:
- As the informal contemporary term for the broad range of activities that was formerly called programming and systems analysis;
- As the broad term for all aspects of the practice of computer programming, as opposed to the theory of computer programming, which is called computer science;
- As the term embodying the advocacy of a specific approach to computer programming, one that urges that it be treated as an engineering discipline rather than an art or a craft, and advocates the codification of recommended practices in the form of software engineering methodologies.
- Software engineering is "(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software," and "(2) the study of approaches as in (1)." – IEEE Standard 610.12
Education[edit | edit source]
People from many different educational backgrounds make important contributions to SE. Today, software engineers earn software engineering, computer engineering or computer science degrees.
- Software degrees
About half of all practitioners today have computer science degrees. A small, but growing, number of practitioners have software engineering degrees. In 1996, Rochester Institute of Technology established the first BSSE degree program in the United States but was beaten to ABET accreditation by Milwaukee School of Engineering. Both programs received ABET accreditation in 2003. Since then, software engineering undergraduate degrees have been established at many universities. A standard international curriculum for undergraduate software engineering degrees was recently defined by the CCSE. As of 2004, in the U.S., about 50 universities offer software engineering degrees, which teach both computer science and engineering principles and practices. The first graduate software engineering degree (MSSE) was established at Seattle University in 1979. Since then graduate software engineering degrees have been made available from many more universities.
- Domain degrees
Some practitioners have degrees in application domains, bringing important domain knowledge and experience to projects. In the business field, some practitioners have Accounting, Finance, MIS or other domain related degrees. In embedded systems, some practitioners have electrical or computer engineering degrees, because embedded software often requires a detailed understanding of hardware. In medical software, some practitioners have medical informatics, general medical, or biology degrees.
- Other degrees
Some practitioners have mathematics, science, engineering, or other technical degrees. Some have philosophy, or other non-technical degrees. And, some have no degrees. Note that Barry Boehm earned degrees in mathematics and Edsger Dijkstra earned degrees in physics.
Employment[edit | edit source]
Most software engineers work as employees or contractors. Software engineers work with businesses, government agencies (civilian or military), and non-profit organizations. Some software engineers work for themselves as freelancers. Some organizations have specialists to perform each of the tasks in the software development process. Other organizations require software engineers to do many or all of them. In large projects, people may specialize in only one role. In small projects, people may fill several or all roles at the same time. Specializations include: in industry (analysts, architects, developers, testers, technical support, managers) and in academia (educators, researchers).
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 whether there will be more IT jobs, including software engineers, in 2012 than there were in 2002.
Certification[edit | edit source]
Certification of software engineers is a contentious issue. Some see it as a tool to improve professional practice.
Most successful certification programs in the software industry are oriented toward specific technologies, and are managed by the vendors of these technologies. These certification programs are tailored to the institutions that would employ people who use these technologies. General certification of software practitioners has struggled. The ACM had a professional certification program in the early 1980s, which was discontinued due to lack of interest. Today, the IEEE is certifying software professionals, but only about 500 people have passed the exam by March 2005. In Canada the use of the title of Software Engineer is regulated, and Information Systems Professional certification is used.
For the localities that do not license or certify software engineers, some hiring classifications are made based on education and experience. Classification levels may include: entry-level, mid-level, and senior. Typical entry-level software engineers have a bachelor's degree and zero to five years of experience. Typical mid-level software engineers have a bachelor's or master's degree and have five to ten years of experience. Typical senior-level software engineers have an advanced degree and have ten or more years of experience. Note that these are only guidelines that are trends seen in hiring practices and that many exceptions exist.
Conferences[edit | edit source]
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.
The biggest and oldest conference devoted to software engineering is the International Conference on Software Engineering. This conference meets every year to discuss improvements in research, education, and practice.
The Annual International Computer Software and Applications Conference was first held in Chicago in 1977 and is designated as the IEEE Computer Society signature conference on software technology and applications.
The European Software Engineering Conference.
The Foundations of Software Engineering conference is held every year, alternating between Europe and North America. It emphasizes theoretical and foundational issues.
Conferences dedicated to inform undergraduate students like the annual Canadian University Software Engineering Conference are also very promising for the future generation. It is completely organized by undergraduate students and lets different Canadian universities interested in Software Engineering host the conference each year. Past guests include Kent Beck, Joel Spolsky, Philippe Kruchten, Hal Helms, Craig Larman, David Parnas as well as university professors and students.
The annual Software Engineering Process Group conference, sponsored by the Carnegie Mellon Software Engineering Institute (SEI), is a conference and exhibit showcase for systems and software engineering professionals. The four-day event emphasizes systematic improvement of people, processes, and technology.
The annual Canadian information technology, data processing and software engineering symposium, sponsored by the Canadian Information Processing Society. First held in 1958.
International Conference on Accelerator and Large Experimental Physics Control Systems Conference . Biennial conference covering software engineering for large scale scientific control systems. First held in 1987.
Asia Pacific Software Engineering Conference