Comparing software engineering and related fields
From Free net encyclopedia
The relationships between software engineering and the fields of programming, computer science, and traditional engineering have been debated for decades. Software engineering resembles all of these fields, but important distinctions exist.
Comparing programming
Both programmers and software engineers work on all sizes of projects: small and large.
Programmers emphasize the task of writing code to produce working software applications, independent of budget and schedule.
Software engineering tries to encompass software projects more completely, including budget and schedule; fits in a large business context with relationships to marketing, sales, production, installation, training, support, and operations; and methods to construct large applications that individual programmers cannot write alone.
Issue | Software Engineering | Programming |
---|---|---|
Scope | Relates programming to the final application | Emphasizes programming, independent of the application |
Business context | Collaborate with others in business | Emphasizes individual work |
Team size | Individuals to large teams | Emphasizes individuals |
Number of Practitioners in U.S. | 680,000 | 530,000 |
Comparing computer science
Many compare software engineering to computer science and information science like they compare traditional engineering to physics and chemistry.
About half of all software engineers earn computer science degrees. Yet on the job, practitioners do applied software engineering, which differs from doing theoretical computer science.
Issue | Software Engineering | Computer Science |
---|---|---|
Ideal | Constructing software applications for real-world use for today | Finding eternal truths about problems and algorithms for posterity |
Results | Working applications (like office suites and video games) that deliver value to users. | Computational complexity, and correctness of algorithms (like Shell sort) and analysis of problems (like the traveling salesman problem) |
Budgets and Schedules | Projects (like upgrading an office suite) have fixed budgets and schedules | Projects (like solving P=NP?) have open-ended budgets and schedules |
Change | Applications evolve as user needs and expectations evolve, and as SE technologies and practices evolve. | When computer science problems are solved, the solution will never change |
Additional Skills | Domain knowledge | Mathematics |
Notable Educators and Researchers | Barry Boehm, Fred Brooks, and David Parnas | Edsger Dijkstra, Donald Knuth, and Alan Turing |
Notable Practitioners | Dan Bricklin, Steve McConnell | Not applicable |
Practitioners in U.S. | 680,000 | 25,000 |
Practitioners in Rest of World | 1,400,000? | 50,000? |
Comparing engineering
The software engineering community is about 60% as large as the rest of engineering community combined.
Software engineers aspire to build low-cost, reliable, safe products; much like engineers in other disciplines do. Software engineers borrow many metaphors and techniques from other engineering disciplines, including requirements analysis, quality control, and project management techniques. Engineers in other disciplines also borrow many tools and practices from software engineers. Yet, there are also some differences between SE and other engineering disciplines.
Issue | Software Engineering | Engineering |
---|---|---|
Foundations | Based on computer science, information science, and discrete math. | Based on science, mathematics, and empirical knowledge. |
Cost | Compilers and computers are cheap, so software engineering and consulting are often more than half of the cost of a project. Minor software engineering cost-overruns can adversely affect the total project cost. | In some projects, construction and manufacturing costs can be high, so engineering may only be 15% of the cost of a project. Major engineering cost overruns may not affect the total project cost. |
Replication | Replication (copying CDs or downloading files) is trivial. Most development effort goes into building new (unproven) or changing old designs and adding features. | Radically new or one-of-a-kind systems can require significant development effort to create a new design or change an existing design. Other kinds of systems may require less development effort, but more attention to issues such as manufacturability. |
Innovation | Software engineers often apply new and untested elements in software projects. | Engineers generally try to apply known and tested principles, and limit the use of untested innovations to only those necessary to create a product that meets its requirements. |
Duration | Software engineers emphasize projects that will live for years or decades. | Some engineers solve long-ranged problems (bridges and dams) that endure for centuries. |
Management Status | Few software engineers manage anyone. | Engineers in some disciplines, such as civil engineering, manage construction, manufacturing, or maintenance crews. |
Blame | Software engineers must blame themselves for project problems. | Engineers in some fields can often blame construction, manufacturing, or maintenance crews for project problems. |
Practitioners in U.S. | 611,900 software engineers | 1,157,020 total non-software engineers |
Age | Software engineering is about 50 years old. | Engineering as a whole is thousands of years old. |
Title Regulations | Software engineers are typically self-appointed. A computer science degree is common but not at all a formal requirement. | In many jurisdictions it is illegal to call yourself an engineer without specific formal education and/or accreditation by governmental or engineering association bodies. |
Analysis Methodology | Methods for formally verifying correctness are developed in computer science, but they are rarely used by software engineers. The issue remains controversial. | Some engineering disciplines are based on a closed system theory and can in theory prove formal correctness of a design. In practice, a lack of computing power or input data can make such proofs of correctness intractable, leading many engineers to use a pragmatic mix of analytical approximations and empirical test data to ensure that a product will meet its requirements. |
Synthesis Methodology | SE struggles to synthesize (build to order) a result according to requirements. | Engineers have nominally refined synthesis techniques over the ages to provide exactly this. However, this has not prevented some notable engineering failures, such as the collapse of the Tacoma Narrows Bridge, the sinking of the Titanic, and the Pentium FDIV bug. In addition, new technologies inevitably result in new challenges that cannot be met using existing techniques. |
Research during Projects | Software engineering is often busy with researching the unknown (e.g. to derive an algorithm) right in the middle of a project. | Traditional engineering nominally separates these activities. A project is supposed to apply research results in known or new clever ways to build the desired result. However, ground-breaking engineering projects such as Project Apollo often include a lot of research into the unknown. |
Codified Best Practice | Software engineering has just recently started to codify and teach best practice in the form of design patterns. | Some engineering disciplines have thousands of years of best practice experience handed over from generation to generation via a field's literature, standards, rules and regulations. Newer disciplines such as electronic engineering and computer engineering have codified their own best practices as they have developed. |