Software selbst beschreibt die Anweisungen oder Programme, die einem Computer sagen, was er tun soll. Sie ist unabhängig von Hardware und macht Computer programmierbar. Es gibt drei grundlegende Arten von Software:
Systemsoftware für Kernfunktionen wie Betriebssysteme, Festplattenverwaltung, Dienstprogramme, Hardwaremanagement und andere, für den Betrieb notwendige Funktionen.
Programmiersoftware gibt Programmierern Tools wie Texteditoren, Compiler, Linker, Debugger und andere Werkzeuge zur Erstellung von Code an die Hand.
Anwendungssoftware (Anwendungen oder Apps), die Benutzern bei der Ausführung bestimmter Aufgaben helfen. Beispiele sind Produktivitätssuites für den Bürobetrieb, Datenverwaltungssoftware, Mediaplayer und Sicherheitsprogramme. Der Begriff „Anwendungen“ bezieht sich auch auf Web- und mobile Anwendungen, wie sie beim Kauf auf Amazon.de, dem Austausch auf Facebook oder dem Veröffentlichen von Bildern auf Instagram verwendet werden.1
Eine mögliche vierte Art ist die eingebettete Software. Software für eingebettete Systeme wird zur Steuerung von Maschinen und Geräten verwendet, die normalerweise nicht als Computer bezeichnet werden – unter anderem Telekommunikationsnetze, Autos und Industrieroboter. Diese Geräte und ihre Software können im Rahmen des Internets der Dinge (IoT) miteinander verbunden sein.2
An der Softwareentwicklung sind in erster Linie Programmierer, Softwaretechniker und Softwareentwickler beteiligt. Die Verantwortlichkeiten überschneiden sich dabei und die Dynamik der Zusammenarbeit kann je nach Entwicklungsabteilung und Community stark variieren.
Programmierer oder Coder schreiben Quellcode, um Computer für bestimmte Aufgaben zu programmieren, etwa das Zusammenführen von Datenbanken, die Bearbeitung von Online-Bestellungen, das Weiterleiten von Kommunikation, die Durchführung von Suchvorgängen oder die Anzeige von Text und Grafiken. In der Regel interpretieren Programmierer Anweisungen von Softwareentwicklern und -technikern und verwenden für die Umsetzung Programmiersprachen wie C++ oder Java.
Softwaretechniker wenden Grundsätze aus dem Ingenieurwesen an, um Software und Systeme zur Problemlösung zu erstellen. Sie setzten eine Modellierungssprache und andere Tools ein, um Lösungen zu entwickeln, die oft allgemein auf Probleme angewendet werden können, im Gegensatz zu situations- oder kundenspezifischen Lösungen. Lösungen für die Softwaretechnik basieren auf wissenschaftlichen Methoden und müssen in der Praxis funktionieren, wie etwa bei Brücken oder Aufzügen. Sie tragen heute mehr Verantwortung, da Produkte durch die Verwendung von Mikroprozessoren, Sensoren und Software immer intelligenter werden. Produkte sind nicht mehr nur zu Zwecken der Marktdifferenzierung auf Software angewiesen. Vielmehr muss die entsprechende Softwareentwicklung mit der mechanischen und elektrischen Produktentwicklung koordiniert werden.
Softwareentwickler übernehmen im Vergleich zu Technikern eine weniger feste Rolle und können sich im Detail mit bestimmten Projektbereichen befassen, einschließlich der Programmierung von Code. Gleichzeitig steuern sie den gesamten Lebenszyklus der Softwareentwicklung – einschließlich der Zusammenarbeit zwischen funktionalen Teams, um Anforderungen in Funktionen umzuwandeln, Entwicklungsteams und -prozesse zu verwalten und Softwaretests sowie -wartungen durchzuführen.3
Die Arbeit der Softwareentwicklung beschränkt sich jedoch nicht auf Programmierer oder Entwicklungsteams. Auch Fachleute wie Wissenschaftler, Gerätehersteller und Hardwareproduzenten erzeugen Softwarecode, auch wenn sie nicht in erster Linie Softwareentwickler sind. Es beschränkt sich auch nicht auf traditionelle Branchen der Informationstechnologien wie Software- oder Halbleiterunternehmen. Laut dem Brookings Institute (Link befindet sich außerhalb von ibm.com) ist es sogar so, dass diese Unternehmen „weniger als die Hälfte der Unternehmen darstellen, die Software entwickeln“.
Wichtig ist die Unterscheidung zwischen kundenspezifischer Softwareentwicklung und kommerzieller Softwareentwicklung. Kundenspezifische Softwareentwicklung ist der Prozess des Konzipierens, Erstellens, Bereitstellens und Wartens von Software für eine bestimmte Gruppe von Benutzern, Funktionen oder Unternehmen. Im Gegensatz dazu wird Standardsoftware (Commercial Off-the-Shelf Software, COTS) für eine breite Palette an Anforderungen entwickelt und kann daher kommerziell vermarktet und vertrieben werden.