Software engineering

| Subject classification: this is an information technology resource.

|

Software engineering is a field of computer science, concerned with designing and writing programs for computers.

Detailed DoD Technical Reference Model.

Today it is mostly done in a team. Software engineering can broadly be split into the following:

* Requirements say what the software should do. Note that the requirements can change over time.
* Software design is usually done on paper. It says what the different components of the software are, and how they interact.
* When the design phase is done, engineers program the software in a phase known as implementation.
* At the end of implementation, engineers test their code to see if its components meet the requirements.

Programming is definitely the blood of almost all software. And just like calculus is to engineering, programming is to software engineering.

## Overview

[edit | edit source]

There are four generic phases in Software Engineering which are Analysis, Design, Coding and Testing.[citation needed]

## Concepts

[edit | edit source]

### Coding

[edit | edit source]

* implement system routines
* construct / traverse data structures
* distil large data sets to single values
* transform one data set to another
* language familiarity
* core libraries
* idioms
* performance issues
* readable, well-written, and efficient code

### Algorithm design and analysis

[edit | edit source]

* complexity analysis
* sorting and hashing, searching
* large amounts of data

### Data structures

[edit | edit source]

* tables
* trees
* graphs
* lists

### Systems design

[edit | edit source]

* feature sets
* interfaces
* class hierarchies
* designing a system under certain constraints
* simplicity and robustness
* trade-offs

### Problem-solving

[edit | edit source]

* collaboration
* classes of NP-complete problems
* listening and comprehension
* asking the right questions
* don't use brute force solutions
* don't assume things
* find multiple solutions and choose the best
* be open to new ideas and ways of solving the problem
* ask questions to move to a more complex answer

### Mathematics

[edit | edit source]

* matrices
* discrete math
* probability
* combinatorics

## Becoming a software engineer

[edit | edit source]

* How to prepare for a software engineering technical interview

## Printed resources

[edit | edit source]

* Laplante, Phillip (2007). What Every Engineer Should Know about Software Engineering. Boca Raton: CRC. ISBN 9780849372285. http://books.google.com/books?id=pFHYk0KWAEgC&lpg=PP1&ots=bqe_WFF-gi&dq=What Every Engineer Should Know about Software Engineering.&pg=PA1#v=onepage&q&f=false. Retrieved 2011-01-21.

## Other websites

[edit | edit source]

* The British Computer Society
* The Institution of Electrical and Electronics Engineers
* Computer Degrees and Careers

## See also

[edit | edit source]

| Search for Software engineering on Wikipedia.

|

Wikimedia Commons has media related to Software engineering.

* Topic:Software engineering

## References

[edit | edit source]

* v
* t
* e

Software engineering

* Computer
* Computer science
* Crystal Methods
* EPET
* EPETO
* Software
* Unsolved problems in software engineering
* Software Design

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template