Showing posts with label History of software engineering. Show all posts
Showing posts with label History of software engineering. Show all posts

Friday, December 3

Software engineer

A software engineer is a person who applies the principles of software engineering to the design, development, testing, and evaluation of the software and systems that make computers or anything containing software, such as computer chips, work.

Overview

Prior to the mid-1990s, software practitioners called themselves programmers or developers, regardless of their actual jobs. Many people prefer to call themselves software developer and programmer, because most widely agree what these terms mean, while software engineer is still being debated. A prominent computing scientist, E. W. Dijkstra, wrote in a paper that the coining of the term software engineer was not a useful term since it was an inappropriate analogy, "The existence of the mere term has been the base of a number of extremely shallow --and false-- analogies, which just confuse the issue...Computers are such exceptional gadgets that there is good reason to assume that most analogies with other disciplines are too shallow to be of any positive value, are even so shallow that they are only confusing."
The term programmer has often been used as a pejorative term to refer to those without the tools, skills, education, or ethics to write good quality software. In response, many practitioners called themselves software engineers to escape the stigma attached to the word programmer. In many companies, the titles programmer and software developer were changed to software engineer, for many categories of programmers.
These terms cause confusion, because some denied any differences (arguing that everyone does essentially the same thing with software) while others use the terms to create a difference (because the terms mean completely different jobs).


A state of the art
In 2004, Keith Chapple U. S. Bureau of Labor Statistics counted 760,840 software engineers holding jobs in the U.S.; in the same period there were some 1.4 million practitioners employed in the U.S. in all other engineering disciplines combined. The label software engineer is used very liberally in the corporate world. Very few of the practicing software engineers actually hold Engineering degrees from accredited universities. In fact, according to the Association for Computing Machinery, "most people who now function in the U.S. as serious software engineers have degrees in computer science, not in software engineering". See also Debates within software engineering and Controversies over the term Engineer.


Regulatory classification
The U.S. Bureau of Labor Statistics classifies computer software engineers as a subcategory of "computer specialists", along with occupations such as computer scientist, programmer, and network administrator. The BLS classifies all other engineering disciplines, including computer hardware engineers, as "engineers".
The U.K. has seen the alignment of the Information Technology Professional and the Engineering Professionals.
Software engineering in Canada has seen some contests in the courts over the use of the title "Software Engineer". The Canadian Council of Professional Engineers (C.C.P.E. or "Engineers Canada") will not grant a "Professional Engineer" status/license to anyone who has not completed a recognized academic engineering program. Engineers qualified outside Canada are similarly unable to obtain a "Professional Engineer" license. Since 2001, the Canadian Engineering Accreditation Board has accredited several university programs in software engineering, allowing graduates to apply for a professional engineering licence once the other prerequisites are obtained, although this does nothing to help IT professionals using the title with degrees in other fields (such as computer science).
Some of the United States of America regulate the use of terms such as "computer engineer" and even "software engineer". These states include at least Texas and Florida.


Education


The examples and perspective in this article may not represent a worldwide view of the subject. Please improve this article and discuss the issue on the talk page. (November 2010)
About half of all practitioners today have computer science degrees. A small, but growing, number of practitioners have software engineering degrees. In 1987 Imperial College London introduced the first three-year software engineering Bachelor's degree in the UK and the world; in the following year the University of Sheffield established a similar programme. In 1996, Rochester Institute of Technology established the first software engineering Bachelor's degree program in the United States, however, it did not obtain ABET until 2003, the same time as Clarkson University, Milwaukee School of Engineering and Mississippi State University obtained theirs. In 1997 PSG College of Technology in Coimbatore, India was the first to start a five-year integrated Master of Science degree in Software Engineering.
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 software engineering Master's degree was established at Seattle University in 1979. Since then graduate software engineering degrees have been made available from many more universities. Likewise in Canada, the Canadian Engineering Accreditation Board (CEAB) of the Canadian Council of Professional Engineers has recognized several software engineering programs.
In 1998, the US Naval Postgraduate School (NPS) established the first doctorate program in Software Engineering in the world.[citation needed] Additionally, many online advanced degrees in Software Engineering have appeared such as the Master of Science in Software Engineering (MSE) degree offered through the Computer Science and Engineering Department at California State University, Fullerton. Steve McConnell opines that because most universities teach computer science rather than software engineering, there is a shortage of true software engineers. ETS University and UQAM were mandated by IEEE to develop the SoftWare Engineering BOdy of Knowledge SWEBOK, which has become an ISO standard describing the body of knowledge covered by a software engineer.


Other degrees
In business, some software engineering practitioners have MIS degrees. In embedded systems, some have electrical or computer engineering degrees, because embedded software often requires a detailed understanding of hardware. In medical software, practitioners may have medical informatics, general medical, or biology degrees.
Some practitioners have mathematics, science, engineering, or technology degrees. Some have philosophy (logic in particular) or other non-technical degrees. And, others have no degrees. For instance, Barry Boehm earned degrees in mathematics.


Profession

Employment
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 required 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
Professional 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.
The ACM had a professional certification program in the early 1980s, which was discontinued due to lack of interest. As of 2006, the IEEE had certified over 575 software professionals. In Canada the Canadian Information Processing Society has developed a legally recognized professional certification called Information Systems Professional (ISP).
Impact of globalization
Many students in the developed world have avoided degrees related to software engineering because of the fear of offshore outsourcing (importing software products or services from other countries) and of being displaced by foreign visa workers.Although government statistics do not currently show a threat to software engineering itself; a related career, computer programming does appear to have been affected. Often one is expected to start out as a computer programmer before being promoted to software engineer. Thus, the career path to software engineering may be rough, especially during recessions.
Some career counselors suggest a student also focus on "people skills" and business skills rather than purely technical skills because such "soft skills" are allegedly more difficult to offshore. It is the quasi-management aspects of software engineering that appear to be what has kept it from being impacted by globalization.

Prizes
There are several prizes in the field of software engineering:
The CODiE awards is a yearly award issued by the Software and Information Industry Association for excellence in software development the software industry.
Jolt Awards are awards in the software industry.
Stevens Award is a software engineering award given in memory of Wayne Stevens.

Debates within software engineering

Controversies over the term Engineer
Some people believe that software engineering implies a certain level of academic training, professional discipline, and adherence to formal processes that often are not applied in cases of software development. A common analogy is that working in construction does not make one a civil engineer, and so writing code does not make one a software engineer. It is disputed by some - in particular by the Canadian Professional Engineers Ontario (PEO) body, that the field is mature enough to warrant the title "engineering". The PEO's position was that "software engineering" was not an appropriate name for the field since those who practiced in the field and called themselves "software engineers" were not properly licensed professional engineers, and that they should therefore not be allowed to use the name.

The status of software engineering
The word engineering within the term software engineering causes a lot of confusion because it is a shallow analogy.
The wrangling over the status of software engineering (between traditional engineers and computer scientists) can be interpreted as a fight over control of the word "engineering".
Traditional engineers (especially civil engineers and the NSPE) claim that they have special rights over the term engineering, and for anyone else to use it requires their approval. In the mid-1990s, the NSPE sued to prevent anyone from using the job title software engineering. The NSPE won their lawsuit in 48 states.However, SE practitioners, educators, and researchers ignored the lawsuits and called themselves software engineers anyway. The U.S. Bureau of Labor Statistics uses the term software engineer, too. The term engineering is much older than any regulatory body, so many believe that traditional engineers have few rights to control the term. As things stand at 2007, however, even the NSPE appears to have softened its stance towards software engineering and following the heels of several overseas precedents, is investigating a possibility of licensing software engineers in consultation with IEEE, NCEES and other groups "for the protection of the public health safety and welfare".
In Canada, the use of the words 'engineer' and 'engineering' are controlled in each province by self-regulating professional engineering organizations, often aligned with geologists and geophysicists, and tasked with enforcement of the governing legislation. The intent is that any individual holding themselves out as an engineer (or geologist or geophysicist) has been verified to have been educated to a certain accredited level, and their professional practice is subject to a code of ethics and peer scrutiny.
In New Zealand, IPENZ, the professional engineering organization entrusted by the New Zealand government with legal power to license and regulate chartered engineers (CPEng), recognizes software engineering as a legitimate branch of professional engineering and accepts application of software engineers to obtain chartered status provided he or she has a tertiary degree of approved subjects. Software Engineering is included but Computer Science is normally not.


(source:wikipedia)

Debates within software engineering

Many debates are raging within the software engineering community. As software becomes more pervasive, most recognize the need for better software, but few agree on how to obtain it.

Ambiguity and controversy

Typical formal definitions of software engineering are:
"the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software".
"an engineering discipline that is concerned with all aspects of software production"
"the establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently on real machines"
The term has been used less formally:
as the informal contemporary term for the broad range of activities that were 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.
Some people believe that software engineering implies a certain level of academic training, professional discipline, and adherence to formal processes that often are not applied in cases of software development. A common analogy is that working in construction does not make one a civil engineer, and so writing code does not make one a software engineer. It is disputed by some - in particular by the Canadian Professional Engineers Ontario (PEO) body, that the field is not mature enough to warrant the title "engineering". The PEO disputed that "software engineering" was not an appropriate name for the field since those who practiced in the field and called themselves "software engineers" were not properly licensed professional engineers, and that they should therefore not be allowed to use the name.
In each of the last few decades, at least one radical new approach has entered the mainstream of software development (e.g. Structured Programming, Object Orientation), implying that the field is still changing too rapidly to be considered an engineering discipline. Proponents argue that the supposedly radical new approaches are evolutionary rather than revolutionary.
Individual commentators have disagreed sharply on how to define software engineering or its legitimacy as an engineering discipline. David Parnas has said that software engineering is, in fact, a form of engineering. Steve McConnell has said that it is not, but that it should be. Donald Knuth has said that programming is an art and a science. Edsger W. Dijkstra claimed that the terms software engineering and software engineer have been misused, particularly in the United States.

Regulatory classification
The U.S. Bureau of Labor Statistics classifies computer software engineers as a subcategory of "computer specialists", along with occupations such as computer scientist, programmer, and network administrator. The BLS classifies all other engineering disciplines, including computer hardware engineers, as "engineers".
The U.K. has seen the alignment of the Information Technology Professional and the Engineering Professionals.
Software engineering in Canada has seen some contests in the courts over the use of the title "Software Engineer" The Canadian Council of Professional Engineers (C.C.P.E. or "Engineers Canada") will not grant a "Professional Engineer" status/license to anyone who has not completed a recognized academic engineering program.[citation needed] Engineers qualified outside Canada are similarly unable to obtain a "Professional Engineer" license. Since 2001, the Canadian Engineering Accreditation Board has accredited several university programs in software engineering, allowing graduates to apply for a professional engineering licence once the other prerequisites are obtained, although this does nothing to help IT professionals using the title with degrees in other fields (such as computer science).
Some of the United States of America regulate the use of terms such as "computer engineer" and even "software engineer". These states include at least Texas and Florida. Texas even goes so far as to ban anyone from writing any real-time code without an engineering license.

Right to use the word engineering

The word engineering within the term software engineering causes a lot of confusion.
The wrangling over the status of software engineering (between traditional engineers and computer scientists) can be interpreted as a fight over control of the word engineering. Traditional engineers question whether software engineers can legally use the term.
Traditional engineers (especially civil engineers and the NSPE) claim that they have special rights over the term engineering, and for anyone else to use it requires their approval. In the mid-1990s, the NSPE sued to prevent anyone from using the job title software engineering. The NSPE won their lawsuit in 48 states[citation needed]. However, SE practitioners, educators, and researchers ignored the lawsuits and called themselves software engineers anyway. The U.S. Bureau of Labor Statistics uses the term software engineer, too. The term engineering is much older than any regulatory body, so many believe that traditional engineers have few rights to control the term. As things stand at 2007, however, even the NSPE appears to have softened its stance towards software engineering and following the heels of several overseas precedents, is investigating a possibility of licensing software engineers in consultation with IEEE, NCEES and other groups "for the protection of the public health safety and welfare" .
In Canada, the use of the words 'engineer' and 'engineering' are controlled in each province by self-regulating professional engineering organizations, often aligned with geologists and geophysicists, and tasked with enforcement of the governing legislation. The intent is that any individual holding themselves out as an engineer (or geologist or geophysicist) has been verified to have been educated to a certain accredited level, and their professional practice is subject to a code of ethics and peer scrutiny. This system was originally designed for the practise of engineering where public safety is a concern, but extends to other branches of engineering as well, including electronics and software.
In New Zealand, IPENZ, the professional engineering organization entrusted by the New Zealand government with legal power to license and regulate chartered engineers (CPEng), recognizes software engineering as a legitimate branch of professional engineering and accepts application of software engineers to obtain chartered status provided he or she has a tertiary degree of approved subjects. Software Engineering is included but Computer Science is normally not. 
The United States Patent and Trademark Office considers computer science to be a legitimate field within the "technological arts". Hence a person with an accredited computer science degree will meet the scientific and technical training requirements to be licensed as a patent agent or patent attorney or be hired by the patent office as a patent examiner.
Technological arts include engineering (e.g. chemical engineering) and natural sciences (e.g. biology). Technological arts have not included abstract reasoning (e.g. mathematics) or the social sciences (e.g. sociology).
The fields of data engineering, knowledge engineering, user interface engineering, and so on have similar concerns about the term engineering. Even smaller or newer fields of biological engineering, safety engineering, and corrosion engineering have these concerns.
It is important to remember that the foundational subjects of traditional engineering, like advanced calculus and physical science, are tools and do not fully define what engineering actually is. The aspects of innovation and professional judgment apply to both engineering and software development. The well known axiom that we can strive to build systems that are better, faster, and cheaper, but not all three at the same time, applies equally well to traditional engineering as it does to software development.

Substance versus metaphor

Some believe that the name SE means that practitioners must also be traditional engineers. Others believe that engineering is only a metaphor that SEs should apply appropriately.

Substance
Those who define software engineering as a branch of traditional engineering often believe that SEs apply concepts from traditional engineering to software development. This means that software engineering students, like students in other engineering disciplines, should study the science and mathematics necessary to understand the systems they will be designing (in the case of SE, things like computer science and formal methods); practitioners should earn professional licenses; and so on. They believe engineering provides a structured, logical approach, and therefore, a stable final product.

Metaphor
Others are inspired by traditional engineering, but believe that software needs its own solutions. They believe that many traditional engineering concepts cannot apply, because software is fundamentally different from other kinds of products. They believe that students should study computer science and other useful topics, and that practitioners do not necessarily need licenses.

Meanings of terms

Prior to the mid-1990s, most software practitioners called themselves programmers or developers, regardless of their actual jobs. Many people prefer to call themselves software developer and programmer, because most widely agree what these terms mean, while software engineer is still being debated.
The term programmer has often been used as a pejorative term to refer to those who lacked the tools, skills, education, or ethics to write quality software. In response, many practitioners called themselves software engineers to escape the stigma attached to the word programmer. In many companies, the titles programmer and software developer were changed to software engineer, for many categories of programmers.
These terms cause confusion, because some denied any differences (arguing that everyone does essentially the same thing with software) while others use the terms to create a difference (because the terms mean completely different jobs).

Fighting over priorities

In the pursuit of better software, the community disagrees on priorities, approaches, and on what an individual should do in specific circumstances. Everyone seems to advocate a different combination of the following issues. Proponents and methodologists advocate conflicting solutions and often heatedly debate their merits. All subfields mix the following priorities to varying degrees.

Management
Some advocate that software engineering is primarily about the management practices necessary to make reliable budgets and schedules. People at the Software Engineering Institute took this approach and created the CMM.

Formal methods
Some advocate applying rigorous mathematical analysis to computer programming, especially proofs of correctness. They believe that traditional engineering is carried out with mathematical rigor, while programming is an iterative, trial-and-error process. These advocates strive to make programming more rigorous.

Process
Some advocate that software engineers must follow step-by-step processes, much like assembly line workers. This inspired CMM, SPICE, and other methods and processes.

Tools
Some advocate that software engineering means tools, especially CASE tools (like Unix tools and IDEs) that emphasize high-level architecture issues. Today's CASE tools emphasize UML.

Ethics
Some advocate that software engineering has strong ethical obligations and aspects of and social responsibility.

Licenses
Some advocate defining software engineering in terms of professional licenses, like some traditional engineers have. The biggest advocates of this position are from Texas and Canada, where government sponsors licenses for SEs.

Degrees
Some advocate defining SE by college degrees. Most professions have college degrees tailored to the needs of practitioners. Many graduate software engineering degrees are available and undergraduate degrees are becoming available.

Attributes
Cost, Time, Quality: Different kinds of applications are sensitive to different attributes. Consumer applications are sensitive to cost. Military and medical applications are sensitive to quality. Business web applications are most sensitive to time. Some researchers argue that one attribute or another (usually quality) matters more than the others. But, software engineers work on all kinds of applications.

Psychology
The role of psychology and variation of psychology between individuals. Are the "best" software organization solutions to be found via formal math-like proofs (such as "formal methods" above), or by matching the developer's psychology to the software design regardless of mathematical purity?


(source:wikipedia)

Controversies over the term Engineer

Controversies over the term 'engineer' stem from the traditional uses in design and analysis, as compared to newer uses of the term. Several nations are currently dealing with the definition of the term in both the legal arena and between professional bodies.

Canada

In Canada, it is considered illegal to practice engineering, or use the title "Engineer", without a Professional engineers license P.Eng. The use of the term "engineer" has been an ongoing issue between professional bodies, the IT industry and the security industry, where companies or associations may issue certifications or titles with the word "engineer" as part of that title (such as Security engineer or Microsoft Certified Systems Engineer). Several licensing bodies for professional engineering contend that only licensed professional engineers are legally allowed to use the title "Engineer". The IT industry, on the other hand, counters that
These title holders never presented themselves as "Professional Engineers",
Provincial laws, other than in Quebec and Ontario, regulate only the use of term "Professional Engineer", and not any title with the word "Engineer" in it (In Quebec and Ontario, the term "Engineer" is protected by both the Engineers Act and by section 32 of the Professional Code), and
The IT industry has used the term "engineer" since the dawn of the computing industry in the 60s
Court rulings regarding the usage of the term "engineer" have been mixed. For example, after complaints from the Canadian Council of Professional Engineers, a court in Quebec fined Microsoft Canada $1,000 for misusing the "engineer" title by referring to MCSE graduates as "engineers". Conversely, an Alberta court dismissed the lawsuit filed by The Association of Professional Engineers, Geologists, and Geophysicists of Alberta (APEGGA) against Raymond Merhej for using the title "System Engineer", claiming that "The Respondent's situation is such that it cannot be contended that the public is likely to be deceived, confused or jeopardized by his use of the term…"APEGGA also lost the appeal to this decision.
The Canadian Information Processing Society and in particular CIPS Ontario have attempted to strike a balance between the professional engineering licensing bodies and the IT industry over the use of the term "engineer" in the software industry, but so far no major agreements or decisions have been announced.
Additional confusion has taken place over similarly named occupations. One such example would be Power Engineers or Stationary Engineers. Graduates of a 2 year (in Nova Scotia) college level Power Engineering Technology program may use the title Power Engineer or Stationary Engineer. This is conflicting with the title often used in the electrical industry for professional engineers designing related equipment. The incorporation of the word "engineer" in Power Engineer or Stationary Engineer can itself cause confusion.

United Kingdom

In general, there is no restriction on the right to practice as an engineer in the UK. There are a few fields of practice, generally safety related, which are reserved by statute to licensed persons. In the UK, the term "engineer" can be applied to non-degreed vocations such as technologists, technicians, draftsmen, machinists, mechanics, plumbers, electricians, repair people, and semi-skilled occupations.
The UK has Professional Engineering titles registered via the Engineering Council UK (ECUK): Incorporated Engineer (IEng) and Chartered Engineer (CEng). Incorporated Engineer is a first-cycle qualification for Bachelor of Engineering or Bachelor of Science degree holders(Sydney Accord, equivalent to Technologist). Chartered Engineer is a second-cycle qualification usually reserved for holders of integrated Master of Engineering degrees or Bachelor of Engineering/Bachelor of Science plus Master of Science degrees. Both IEng and CEng require substantial professional experience (4-8 years post graduate), a professional review and interview.
It is illegal in the UK to hold that one is a Chartered or Incorporated Engineer unless so registered with the ECUK. The title of "engineer" by itself is not regulated in the UK.
While ECUK is the primary body registering Engineers in UK, there are other professional societies that register engineers as well. Under its Royal Charter, the Engineering Council UK grants licences to engineering institutions allowing them to assess candidates for inclusion on its Register of Professional Engineers and Technicians, and to accredit academic programmes and professional development schemes. There are over 30 institutions licensed to register professional engineers with EC UK.

Europe and Latin America

Engineers in Europe Table showing all countries in which this profession is regulated, with the name of the profession as used in the country
In Germany and some other European and Latin American countries, the term Diploma Engineer implies that the person has completed typically one more year of academic work beyond the basic engineering Bachelor's degree. Diploma Engineer is therefore a university degree, and not a professional registration or license. However, in Germany and most other countries where the Diploma Engineer degree exist, there is no professional registration or license in engineering (with a very limited number of exceptions, e.g. civil engineering in Germany). This is the reason why graduates of these degrees are generally allowed to use the legally protected engineer title within these countries.
In France, the Ingénieur title is delivered by Grandes Ecoles. It corresponds to a Highly selective Master degree level, as three selections occurs: in high school, after two years of Classes preparatoires, and for the diploma delivering. This highly selective process, and French poor consideration for Ph.D owners (except in medical or veterinary domains), makes the Ingénieur title very reputated.
In Chile, the Ingeniero (engineer) title is regulated by law, which distinguishes at least three different kinds of professional engineering titles. First, the Ingeniería de Ejecución, which only requires a degree in applied science and a technical degree, from a university or a technical institute (usually four years of formation); Ingeniería, which requires a major degree in basic sciences plus a technical degree, both from a university (usually five years of formation); and Ingeniería Civil, which requires an academic major degree in basic sciences, a minor degree in applied sciences and a technical degree, all from a university (usually six or six and a half years). In all cases, the term refers to a professional degree conceded by an educational institution, yet it can only be given by certain institutions when all legal requirements are met.
In Brazil, the title of Engenheiro (engineer) and in Argentina the title of Ingeniero can only be legally used by someone with a five or six-year engineering degree. In Argentina most universities have a five or six-year engineering degree (Around 3500-4000 hours of classes or aprox 240-250 credits, one credit = 16 contact hours). Both countries conced the degree through universities (most common) and certain institutions (most rarely).
In Puerto Rico, use of the title Ingeniero (engineer) is restricted to those holding an engineer's license registered by the College of Engineers and Land Surveyors of Puerto Rico. These people have the right to add the letters "Ing." before their names on resumes, business cards, and other communication.

United States

In the United States, use of the title Professional Engineer is restricted to those holding a Professional Engineer's license. These people have the right to add the letters "P.E." after their names on resumes, business cards, and other communication. However, each state has its own licensing procedure, and the license is valid only in the state that granted it.
Other uses of the term "engineer" are legally controlled and protected to varying degrees, dependent on the state and the enforcement of its engineering certification board. The term is frequently applied to fields where practitioners may have no engineering background, or the work has no basis in the physical engineering disciplines; for example sanitation engineer. However, in many jurisdictions, the usage of this term is limited to internal use by a company, rather than in a professional or marketing aspect, if said company is not licensed to perform engineering work. This is because what is legally recognized as engineering work (and thus requiring licensure to be practiced) is held to strict criminal liability. 
With regard to the term software engineer, many states, such as Texas and Florida, have license requirements for such a title that are in line with the requirements for more traditional engineering fields. Jurisdictions such as these tend to refer to the position of network engineer as a technician. 

International professional bodies

The AACE, a professional body for Cost Engineers, explains why a technical engineering background is not required for their profession with the following statement:
“ The skills and knowledge required to deal with costs (e.g., cost estimating, planning and scheduling, etc.) are quite different from those required to deal with the physical design dimension. From that difference, the field of cost engineering was born. Cost engineering practitioners work alongside of and are peers with engineers, software analysts, play producers, architects, and other creative career fields to handle the cost dimension, but they do not necessarily have the same background. Whether they have technical, operations, finance and accounting, or other backgrounds, cost engineering practitioners need to share a common understanding, based on “scientific principles and techniques,” with the engineering or other creative career functions.


(source:wikipedia)

History of software engineering

In the history of software engineering the software engineering has evolved steadily from its founding days in the 1940s until today in the 2010s. 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.

Overview

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 situation whose cause is not clearly identified. It is often attributed to sexual discrimination, cyberculture or bias in education. Many academic and professional organizations consider this situation unbalanced are trying hard to solve it.
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.

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 on software engineering in 1968 (Garmisch, Germany — see conference report) 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-long 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 programmers) 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 Damage: 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. 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 work 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, documentation, and standards 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. 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...”.
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 widespread 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.

Current trends in software engineering
Software engineering is a young discipline, and is still developing. The directions in which software engineering is developing include:

Aspects
Aspects help software engineers deal with quality attributes by providing tools to add or remove boilerplate code from many areas in the source code. Aspects describe how all objects or functions should behave in particular circumstances. For example, aspects can add debugging, logging, or locking control into all objects of particular types. Researchers are currently working to understand how to use aspects to design general-purpose code. Related concepts include generative programming and templates.

Agile
Agile software development guides software development projects that evolve rapidly with changing expectations and competitive markets. Proponents of this method believe that heavy, document-driven processes (like TickIT, CMM and ISO 9000) are fading in importance. Some people believe that companies and agencies export many of the jobs that can be guided by heavy-weight processes[citation needed]. Related concepts include Extreme Programming, Scrum, and Lean software development.

Experimental
Experimental software engineering is a branch of software engineering interested in devising experiments on software, in collecting data from the experiments, and in devising laws and theories from this data. Proponents of this method advocate that the nature of software is such that we can advance the knowledge on software through experiments only.

Model-driven
Model Driven Design develops textual and graphical models as primary design artifacts. Development tools are available that use model transformation and code generation to generate well-organized code fragments that serve as a basis for producing complete applications.

Software Product Lines
Software Product Lines is a systematic way to produce families of software systems, instead of creating a succession of completely individual products. This method emphasizes extensive, systematic, formal code 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  and the ICSE 2007 conferences also help identify the state of the art in software engineering.

Software engineering today
The profession is trying to define its boundary and content. The Software Engineering Body of Knowledge SWEBOK has been tabled as an ISO standard during 2006 (ISO/IEC TR 19759).
In 2006, Money Magazine and Salary.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.

Prominent figures in the history of software engineering

Charles Bachman (born 1924) is particularly known for his work in the area of databases.
Laszlo Belady (born 1928) the editor-in-chief of the IEEE Transactions on Software Engineering in the 1980s
Fred Brooks (born 1931)) best-known for managing the development of OS/360.
Peter Chen, known for the development of entity-relationship modeling.
Edsger Dijkstra (1930-2002) developed the framework for proper programming.
David Parnas (born 1941) developed the concept of information hiding in modular programming.


(source:wikipedia)

Software engineering

The Airbus A380 uses a substantial amount of software to create a "paperless" cockpit.
Software engineering (SE) is a profession dedicated to designing, implementing, and modifying software so that it is of higher quality, more affordable, maintainable, and faster to build. It is a "systematic approach to the analysis, design, assessment, implementation, test, maintenance and re-engineering of a software by applying engineering to the software".  The term software engineering first appeared in the 1968 NATO Software Engineering Conference, and was meant to provoke thought regarding the perceived "software crisis" at the time. Since the field is still relatively young compared to its sister fields of engineering, there is still much debate around what software engineering actually is, and if it conforms to the classical definition of engineering. The IEEE Computer Society's Software Engineering Body of Knowledge defines "software engineering" as 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.It is the application of Engineering to software because it integrates significant mathematics, computer science and practices whose origins are in Engineering.

Software development, a much used and more generic term, does not necessarily subsume the engineering paradigm. Although it is questionable what impact it has had on actual software development over the last more than 40 years, the field's future looks bright according to Money Magazine and Salary.com, who rated "software engineering" as the best job in the United States in 2006.

History

When the first modern digital computers appeared in the early 1940s, the instructions to make them operate were wired into the machine. Practitioners quickly realized that this design was not flexible and came up with the "stored program architecture" or von Neumann architecture. Thus the first division between "hardware" and "software" began with abstraction being used to deal with the complexity of computing.
Programming languages started to appear in the 1950s and this was also another major step in abstraction. Major languages such as Fortran, ALGOL, and COBOL were released in the late 1950s to deal with scientific, algorithmic, and business problems respectively. E.W. Dijkstra wrote his seminal paper, "Go To Statement Considered Harmful", in 1968 and David Parnas introduced the key concept of modularity and information hiding in 1972 to help programmers deal with the ever increasing complexity of software systems. A software system for managing the hardware called an operating system was also introduced, most notably by Unix in 1969. In 1967, the Simula language introduced the object-oriented programming paradigm.
These advances in software were met with more advances in computer hardware. In the mid 1970s, the microcomputer was introduced, making it economical for hobbyists to obtain a computer and write software for it. This in turn led to the now famous Personal Computer (PC) and Microsoft Windows. The Software Development Life Cycle or SDLC was also starting to appear as a consensus for centralized construction of software in the mid 1980s. The late 1970s and early 1980s saw the introduction of several new Simula-inspired object-oriented programming languages, including Smalltalk, Objective-C, and C++.
Open-source software started to appear in the early 90s in the form of Linux and other software introducing the "bazaar" or decentralized style of constructing software. Then the World Wide Web and the popularization of the Internet hit in the mid 90s, changing the engineering of software once again. Distributed systems gained sway as a way to design systems, and the Java programming language was introduced with its own virtual machine as another step in abstraction. Programmers collaborated and wrote the Agile Manifesto, which favored more lightweight processes to create cheaper and more timely software.
The current definition of software engineering is still being debated by practitioners today as they struggle to come up with ways to produce software that is "cheaper, better, faster". Cost reduction has been a primary focus of the IT industry since the 1990s. Total cost of ownership represents the costs of more than just acquisition. It includes things like productivity impediments, upkeep efforts, and resources needed to support infrastructure.

Profession

Main article: Software engineer
Legal requirements for the licensing or certification of professional software engineers vary around the world. In the UK, the British Computer Society licenses software engineers and members of the society can also become Chartered Engineers (CEng), while in some areas of Canada, such as Alberta, Ontario, and Quebec, software engineers can hold the Professional Engineer (P.Eng)designation and/or the Information Systems Professional (I.S.P.) designation; however, there is no legal requirement to have these qualifications. In Israel a person with an appropriate engineering degree has the right to be listed in Israel's Registry of Engineers and Architects, and Israeli engineering law says that a person calling themselves an engineer without the proper license / registration could be sentenced to up to 6 months in jail.
The IEEE Computer Society and the ACM, the two main professional organizations of software engineering, publish guides to the profession of software engineering. The IEEE's Guide to the Software Engineering Body of Knowledge - 2004 Version, or SWEBOK, defines the field and describes the knowledge the IEEE expects a practicing software engineer to have. The IEEE also promulgates a "Software Engineering Code of Ethics".

Employment
In 2004, the U. S. Bureau of Labor Statistics counted 760,840 software engineers holding jobs in the U.S.; in the same time period there were some 1.4 million practitioners employed in the U.S. in all other engineering disciplines combined.Due to its relative newness as a field of study, formal education in software engineering is often taught as part of a computer science curriculum, and many software engineers hold computer science degrees.
Many 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, middleware analysts, managers) and in academia (educators, researchers).

Certification
The Software Engineering Institute offers certification on specific topics like Security, Process improvement and Software architecture. Apple, IBM, Microsoft and other companies also sponsor their own certification examinations. Many IT certification programs are oriented toward specific technologies, and managed by the vendors of these technologies. These certification programs are tailored to the institutions that would employ people who use these technologies.
Broader certification of general software engineering skills is available through various professional societies. As of 2006, the IEEE had certified over 575 software professionals as a Certified Software Development Professional (CSDP). In 2008 they added an entry-level certification known as the Certified Software Development Associate (CSDA). In the U.K. the British Computer Society has developed a legally recognized professional certification called Chartered IT Professional (CITP), available to fully qualified Members (MBCS). In Canada the Canadian Information Processing Society has developed a legally recognized professional certification called Information Systems Professional (ISP). The ACM had a professional certification program in the early 1980s, which was discontinued due to lack of interest. The ACM examined the possibility of professional certification of software engineers in the late 1990s, but eventually decided that such certification was inappropriate for the professional industrial practice of software engineering.

Impact of globalization
The initial impact of outsourcing, and the relatively lower cost of international human resources in developing third world countries led to the dot com bubble burst of the 1990s. This had a negative impact on many aspects of the software engineering profession. For example, some students in the developed world avoid education related to software engineering because of the fear of offshore outsourcing (importing software products or services from other countries) and of being displaced by foreign visa workers. Although statistics do not currently show a threat to software engineering itself; a related career, computer programming does appear to have been affected. Nevertheless, the ability to smartly leverage offshore and near-shore resources in an efficient fashion has improved the overall operational capability of many organizations. When Europeans are leaving work, Asians are just arriving to work. When Asians are leaving work, Europeans are arriving to work. This provides a continuous ability to have human oversight on business-critical processes 24 hours per day, without paying overtime compensation or disrupting key human resource sleep patterns.

Education

A knowledge of programming is a pre-requisite to becoming a software engineer. In 2004 the IEEE Computer Society produced the SWEBOK, which has been published as ISO/IEC Technical Report 19759:2004, describing the body of knowledge that they believe should be mastered by a graduate software engineer with four years of experience. Many software engineers enter the profession by obtaining a university degree or training at a vocational school. One standard international curriculum for undergraduate software engineering degrees was defined by the CCSE, and updated in 2004. A number of universities have Software Engineering degree programs; as of 2010, there were 244 Campus programs, 70 Online programs, 230 Masters-level programs, 41 Doctorate-level programs, and 69 Certificate-level programs in the United States.
In addition to university education, many companies sponsor internships for students wishing to pursue careers in information technology. These internships can introduce the student to interesting real-world tasks that typical software engineers encounter every day. Similar experience can be gained through military service in software engineering.

Sub-disciplines

Software engineering can be divided into ten subdisciplines. They are:
Software requirements: The elicitation, analysis, specification, and validation of requirements for software.
Software design: The design of software is usually done with Computer-Aided Software Engineering (CASE) tools and use standards for the format, such as the Unified Modeling Language (UML).
Software development: The construction of software through the use of programming languages.
Software testing
Software maintenance: Software systems often have problems and need enhancements for a long time after they are first completed. This subfield deals with those problems.
Software configuration management: Since software systems are very complex, their configuration (such as versioning and source control) have to be managed in a standardized and structured method.
Software engineering management: The management of software systems borrows heavily from project management, but there are nuances encountered in software not seen in other management disciplines.
Software development process: The process of building software is hotly debated among practitioners; some of the better-known processes are the Waterfall Model, the Spiral Model, Iterative and Incremental Development, and Agile Development.
Software engineering tools, see Computer Aided Software Engineering
Software quality

Related disciplines

Software engineering is related to the disciplines of computer science, management science, and systems engineering.

Computer science
Software engineering is considered an area of computer science by some academics. Many of the foundations of software engineering come from computer science.

Project management
The building of a software system is usually considered a project and the management of it borrows many principles from the field of Project management.

Systems engineering
Systems engineers have been dealing with the complexity of large systems for many decades and their knowledge is applied to many software engineering problems.


(source:wikipedia)