Computer und Informationstechnologie haben unser Leben stark vereinfacht. Die Kommunikation mit Kollegen, Familie und Freunden, die Verwaltung von Informationen, der Zugriff auf Wissen und viele weitere Anforderungen des täglichen Lebens sind schnell, einfach und ortsunabhängig möglich.
Ebenso können Computer auch hochspezialisierte Aufgaben übernehmen. Die berechnen komplexe Simulationen, führen Analysen durch und visualisieren komplexe Szenarien. Sie lehren uns, Probleme auf effiziente Weise zu lösen.
In der Entstehungszeit der Computertechnologie mussten Programme zumeist von ihren NutzerInnen selbst programmiert werden. Mit der starken Weiterentwicklung der Informationstechnologie hat sich diese Situation grundlegend geändert. Der heutige Markt bietet ein breites Spektrum an allgemeinen und spezialisierten Software-Lösungen, die käuflich erworben werden können oder zur Nutzung und Weiterentwicklung frei zur Verfügung stehen. Ein Rückgriff auf diese Software-Lösungen bringt einige Vorteile mit sich: abgesehen von eventuellen Ergänzungen und Weiterentwicklungen wird keine Entwicklungszeit benötigt - das Programm kann (nach einer Einarbeitung) sofort genutzt werden. Die weite Verbreitung der Software garantiert umfangreiche Laufzeit-Tests und damit eine Funktionsfähigkeit der Programme. Eventuell auftretende Probleme werden von einem spezialisierten Entwicklerteam beseitigt. Diesen und weiteren Vorteilen stehen allerdings auch einige Nachteile gegenüber: Die Anschaffung von Software kann mit hohen Kosten verbunden sein. Die angebotenen Lösungen können nur teilweise zu den eigenen spezifischen Bedürfnissen passen, und ihre Nutzung kann durch eine umständliche Bedienbarkeit der Programme eingeschränkt sein. Es gilt, bei der Auswahl einer Software sorgsam auf die eigenen Anforderungen und Bedürfnisse zu achten und die zur Verfügung stehenden Ressourcen zu berücksichtigen.
In manchen Fällen (beispielsweise bei spezifischen Forschungsansätzen) kann die Erstellung einer individuellen Softwarelösung trotz der teils aufwändigen Entwicklung und damit verbundenen Kosten für die eigenen Bedürfnisse besser geeignet sein als ein Rückgriff auf Standardsoftware. Sog. Individualsoftware wird speziell entwickelt und auf die eigenen Bedürfnisse angewandt. Sie besticht durch eine hohe Eignung auch für kleinste Details der eigenen Vorgehensweise und bietet die Möglichkeit, alternative Wege und neue Ansätze während der Arbeit mit der Software ohne größere Umwege einzuarbeiten. Bedienbarkeit, Nutzeroberläche und Funktionsweise können an die eigenen Vorstellungen, Argumentationsansätze und Verfahren angepasst werden. Ein spezifisches Problem kann passend zur eigenen Perspektive treffgenau gelöst werden.
Die Entstehung einer Softwarelösung beginnt mit einer detaillierten Analyse der Umgebung, in der die Software genutzt werden wird, und der Aufgabenstellung, zu deren Lösung sie erstellt werden soll. Erfasst werden zum einen Faktoren wie die zur Verfügung stehende und benötigte Hardware, bereits vorhandene Software, das/die genutzte(n) Betriebssystem(e) und eine eventuelle Netzwerkanbindung. Zum anderen werden die Anforderungen an die geplante Software detailliert analysiert und strukturiert. Durch User Stories werden die Anforderungen, Wünsche und Bedürfnisse verschiedener Nutzergruppen erfasst und untersucht.
Auf der Basis dieser Analyse erfolgt die Erstellung eines ersten Entwurfskonzepts für die geplante Softwarelösung. Dieses wird im Team besprochen und gegebenenfalls um weitere Faktoren ergänzt. Es entsteht eine erste Blaupause der späteren Softwarelösung.
Algorithmen sind Handlungsanleitungen zur Problemlösung. Sie spezifizieren die Arbeits-/Rechenschritte, die notwendig sind, damit aus einem Ausgangszustand ein erwünschter Endzustand erreicht werden kann. Sie sind der Schlüssel zur Problemlösung und zur funktions- und leistungsfähigen Software
Algorithmen sind an einige Anforderungen gebunden. Für die meisten Probleme lassen sich verschiedene Lösungen denken. Auch wenn alle zum gewünschten Ziel führen, sind sie mit unterschiedlichen Kosten und Risiken verbunden. Suche ich beispielsweise ein Dokument, kann ich in einem beliebigen Raum beginnen und an allen möglichen Plätzen nachsehen. Beginne ich hingegen in meinem Arbeitszimmer (wo ich das Dokument am wahrscheinlichsten erwarte), spare ich unter Umständen viel Zeit und Aufwand.
Das Ziel ist die Auswahl einer Gruppe von Algorithmen, die die aktuell gestellten Probleme möglichst elegant lösen. Sie sollen unnötige Risiken vermeiden, möglichst wenig Speicherkapazität und Rechenschritte benötigen und zu einem optimalen Ergebnis führen. Lassen sich nicht alle Faktoren vollständig erfüllen, wird der bestmögliche Kompromiss gewählt.
Nach ihrer Fertigstellung werden die detaillierten Entwürfe der geplanten Software und benötigen Algorithmen implementiert, d.h. in einer Programmiersprache umgesetzt. Hierzu wird aus dem sehr breiten Spektrum an Programmiersprachen diejenige ausgewählt, die am besten zu den Bedürfnissen der Software, ihrer späteren Anwendung und Wartbarkeit passt. Kleinere, hochspezialisierte Programmiersprachen können ideale Werkzeuge zur Lösung spezifischer Probleme bereitstellen. Wechselt der Programmierer während des späteren Betriebs, können sich aber Probleme bei der Wartung und Instandhaltung ergeben.
Programmiersprachen wie Java, C/C++/Ch und Python sind weit verbreitet und daher sehr gut entwickelt. Sie bieten Werkzeuge zur effizienten Lösung vieler Standardaufgaben und erweisen sich durch ihre breite Nutzung als sehr verlässlich. Bei der Auswahl sollten verschiedene Faktoren berücksichtigt werden. In einigen Anwendungsbereichen dominiert eine bestimmte Programmiersprache, weshalb es sich für die spätere Arbeit von Vorteil erweisen kann, Software mit Bezügen zu diesen Bereichen in der jeweils passenden Programmiersprache zu erstellen. Ebenfalls zu berücksichtigen sind die späteren Arbeitsumgebungen. Einige Programmiersprachen wie C/C++ sind plattformabhängig, d.h. für jedes Betriebssystem muss ein separates Programm erstellt werden. Andere (z.B. Python und Java) arbeiten mit virtuellen Maschinen zur Laufzeitkompilierung, sodass auf die Erstellung mehrerer Softwarelösungen für die gebräuchlichen Betriebssysteme verzichtet werden kann.
Die Entwicklung von Software endet nicht mit der Implementierung eines Programms. Die erste funktionsfähige Software wird in verschiedenen Umgebungen und von mehreren NutzerInnen getestet. Eventuell auftretende Probleme werden dokumentiert, analysiert und das Programm entsprechend modifiziert. Der Review wird so lange wiederholt, bis keine Probleme mehr feststellbar sind.
Während der Nutzung wird die Funktionsfähigkeit des Programms weiter überwacht und gegebenenfalls durch Updates optimiert. Auf dem gleichen Weg wird das Programm an sich ändernde Bedürfnisse ihrer Arbeitsumgebung (neue Versionen der Betriebssysteme, Nutzerwechsel, neue Bedürfnisse und Anforderungen etc.) angepasst. So bleibt gewährleistet, dass das Programm seine Aufgaben optimal erfüllt.