Software comes in many different forms intended for use in many different applications. Whether your smart car is self-parking, you’re downloading the latest MP3 from the cloud, or developing your own programs–you’re using software!
Understanding the different types of software domains can help better isolate problem spaces. This awareness can help identify useful insight into how other developers have approached similar problems. Regardless of which programming language being used–different types of software design principles can be applied.
System software provides low-level hardware support to mediate user interaction. This includes such software as operating systems, firmware, operating systems and other utility applications.
Application software are programs intended to work as stand-alone entities designed to address specific needs. Common examples of application software include presentation technology like PowerPoint, design software like AutoCAD, and even video games.
Application software can be regarded as non-essential to systems such that their absence would not impact the system at large.
Engineering software is used across many industries serving a broadly-applicable role. These software can be used to analyze deep field astronomical data, time series stock market data, or real-time signal monitoring. Scientific and engineering software includes technology such as MATLAB, particle simulators, and Integrated Development Environments designed to facilitate modern programming language development.
Embedded software is found in stand-alone technologies such as cars, microwaves, electronics, and vehicles (including things like NASA shuttles.) Embedded software has historically been separate from the outside world but, with the modern evolution of networked communications and IoT connectivity, embedded systems often have access to constant updates.
Product Lines (SPLs)
Similar software systems designed to be re-useable and providing of specific support for a range of customers/applications. A defining characteristic of SPLs is the intent with which they are developed–one of predictive need, as opposed to re-tooling of existing software. The benefit of SPLs is their ability to concentrate software development resources in a more efficient and economical manner.
Web and mobile applications make up an ever-growing market of ever-growing complexity. These applications include websites, cloud-applications, and software run on mobile devices such as tablets and smartphones. Among the commonest web applications include internet browsers, cloud storage services like Dropbox, and news websites.
AI encompasses a domain of software applications designed to solve complex problems. These include image recognition systems, self-driving vehicles, robotics, and a wide range of other–often unique–applications. Machine learning is a popular example of applied artificial intelligence software.
These types of software are illustrative of common domains by which software engineering practices are focused. The narrowing of application can help isolate efficiencies that can be developed, evolved, and applied across many different fields and disciplines.
The types of software listed here represent common taxonomic thinking but are by no means canonical. Other common classifiers for software include freeware, shareware, closed source, open-source, and utility software. Generally, these are more ambiguous terms that could arguably be lumped into one or more of the above types.