Every now and then a non-engineer will ask me a question along the lines of, “what different types of software development are there?” There really isn’t a good, easy answer to this question. An analogy is like asking, “What different types of animals are there?” In both cases there are many ways of categorizing but all of them overlap quite a bit and no one way captures a complete picture. Well with that said, I usually answer the types-of-development question by saying that one way to think about the question is to mentally place software development into 7 buckets:
Applications Development – Designing and coding software which is used by humans to solve a particular practical problem. For example, the developers in a company’s IT department may write a tool designed to help the sales staff manage sales data. The term “applications development” usually implies non-Web based software. The most common languages used by applications developers are Java, Visual Basic, VB.NET, and C#.
Systems Development – Designing and coding software which works behind the scenes. For example, several thousand engineers who work at Microsoft developing the Windows operating system are systems developers. A subcategory is API development, where engineers write code which is intended to be used by other developers who are writing application programs. The most common languages used by systems developers are C and C++.
Embedded Systems Development – Designing and coding software which works on non-computer devices. For example, engineers who write programs which control the guidance systems of military devices are writing embedded systems code. The most common languages used by embedded systems developers are Assembly Languages, C, and special one-of-a-kind languages.
Scientific Development – Designing and coding software which is primarily numerical. This type of programming is much less common than it used to be. The most common languages used by scientific programmers are C and C++.
Test Automation – Designing and coding software which tests other software. Microsoft employs thousands of these engineers who have job title Software Design Engineer in Test, or SDET for short. The most common programming languages used by test engineers are Perl, Visual Basic, VB.NET, and C#.
“Other” Development – Anything not listed above.
Update (07/02/2015): When I wrote this blog post in 2006, Mobile Development was a minor, niche activity, and fell into the “Other” category in my mind. Now Mobile Development is clearly a major area of software development. So, this post should be titled “The 8 Types of Software Development” but I’ll leave the title alone.
Of course the “Other” category is a bit of a cheat but this list is one place to start thinking about the types of software development.
If you enjoyed reading this blog entry, you might enjoy working at Microsoft. My parent company, Volt Information Sciences, is always looking for software engineers. Check out the job listings at http://jobs.volt.com/.