Programmierung
Programmierung (von griechisch prógramma ‚Vorschrift‘) bezeichnet die Tätigkeit, Computerprogramme zu erstellen. Das ist ein Teilbereich der Softwareentwicklung<ref>Lerne Programmieren [1] Unterschied zwischen Programmierung und Softwareentwicklung</ref> und umfasst vor allem die Umsetzung (Implementierung) des Softwareentwurfs in Quellcode sowie – je nach Programmiersprache – das Übersetzen des Quellcodes in die Maschinensprache, meist unter Verwendung eines Compilers.
Programme werden unter Verwendung von Programmiersprachen formuliert („codiert“). In eine solche Sprache „übersetzt“ der Programmierer die (z. B. im Pflichtenheft) vorgegebenen Anforderungen und Algorithmen. Zunehmend wird er dabei durch Codegeneratoren unterstützt, die zumindest Teile des Programmcodes auf Basis von Modellen (die im Entwurf entstanden sind) automatisch erzeugen. Zu den weiteren Aufgaben von Programmierern zählen zum Beispiel das Testen (Entwicklertest) seines Programms, das Erstellen der Softwaredokumentation usw.
In vielen, insbesondere in kleineren Softwareprojekten und bei Einsatz Agiler Prozesse, verlaufen der Entwurf und die Erstellung eines Programms parallel, das Programm entwickelt sich in diesen Fällen in enger Wechselwirkung mit dem Entwurf und umgekehrt. In größeren Projekten werden der Entwurf und die Programmierung (dann häufig als Implementierung bezeichnet) nacheinander bearbeitet; der Programmierer setzt dabei die Vorgaben des Entwurfs in Programmcode um. Dennoch ist auch hierbei das Programmieren eine kreative Tätigkeit; denn der Entwurf gibt zwar einen Funktionsrahmen vor, kann aber auf unterschiedliche Art und Weise implementiert werden.
Ähnliche Bedeutungen: Umgangssprachlich bezeichnet man gelegentlich auch das Konfigurieren von Haushalts- oder anderer elektrischer Geräte als „Programmieren“. Auch Organisationseinheiten von Unternehmen, in denen Software entwickelt wird, werden oder wurden zum Teil „Programmierung“ genannt.
Inhaltsverzeichnis
Qualitätskriterien
Die Qualität von Software entsteht zu großen Teilen im Rahmen der Tätigkeiten des Programmierens, besonders die folgenden Qualitätskriterien betreffend:
Korrektheit
Ein Programm muss die im Entwurf gemachten Vorgaben korrekt umsetzen. Dazu muss es in der Regel fehlerfrei sein, wobei beim Programmieren meist zwei verschiedene Arten von Fehlern auftreten:
- Syntaxfehler: Fehlerhaft formulierter Quellcode – man verwendet Formulierungen oder Konstrukte, die so nicht in der verwendeten Programmiersprache vorkommen (Tippfehler, Unkenntnis, …). Syntaxfehler können vom Compiler/Linker oder Parser erkannt werden – müssen aber nicht!
- Semantische Fehler: Das Programm verhält sich nicht wie gewünscht; weil möglicherweise der Algorithmus oder seine Umsetzung fehlerhaft war.
Der Übergang zwischen diesen beiden Fehlerarten ist fließend. Beispielsweise kann ein Tippfehler im Code (z. B. „>“ statt „<“) zu einem gültigen ausführbaren Programm führen, das Resultat wird jedoch wahrscheinlich falsch sein. An anderer Stelle wiederum könnte derselbe Fehler einen Syntaxfehler darstellen.
Syntaxfehler werden meist vom Compiler oder Interpreter als solche erkannt und benannt. Semantische Fehler im Programm können in der Regel nicht automatisch erkannt, sondern nur durch gewissenhaftes Testen gefunden werden – beispielsweise in Form von Unittests.
Robustheit
Statistisch gesehen wird die meiste Zeit für die Entwicklung von Quelltext benötigt, um auf Fehler oder außergewöhnliche Anwendungs- oder Hardwareumgebungen zu reagieren. Ein Programmtext, der auch bei unvorhergesehenen Fehlern oder ungewöhnlichen Umgebungen sinnvoll reagiert, wird als robust bzw. portabel bezeichnet. Geübte Programmierer können die möglichen Fehler und Laufzeitumgebungen gut einschätzen und strukturieren das Programm und seinen Quelltext dementsprechend. Der Zeitdruck bei der Entwicklung von Anwendungen stellt selbst an erfahrene Programmierer immer höchste Ansprüche hinsichtlich dieses Kriteriums.
Wartbarkeit
Damit eine Software dauerhaft funktioniert, muss sie wartbar sein. Das heißt, Änderungen wie Bugfixes, Anpassungen und neue Features müssen ohne großen Aufwand eingepflegt werden können. Dies erfordert vor allem, dass der Programmierer keinen zu kurzen, „kryptischen“ Quelltext erzeugen soll, der von anderen Entwicklern nicht oder nur mit hoher Einarbeitungszeit verstehbar ist.
Um solche Probleme zu vermeiden, existieren eine Reihe von Konventionen wie die Verwendung von selbsterklärenden Variablennamen und die Verwendung von Kommentaren im Code. Auch eine sinnvolle Aufteilung des Codes in intuitiv verständliche Funktionen und Klassen trägt zum Verständnis und Übersichtlichkeit bei.
Siehe auch Programmierstil
Effizienz
In der Regel stehen einem Programm nur begrenzte Ressourcen (Laufzeit, Speicherverbrauch, Bandbreite) zur Verfügung. Gute Programmierung kann dazu beitragen, unnötigen Ressourcenverbrauch zu reduzieren. Beispielsweise erfolgt dies, indem bei Verwendung großer Datenmengen an mehreren Stellen im Programm nicht jeweils der gesamte Datensatz kopiert wird, sondern nur die Adresse übertragen wird, an der die Daten gespeichert werden.
Effiziente Programmierung
Gemäß Niklaus Wirth zeichnet sich gute Programmierung<ref>Niklaus Wirth: A Brief History of Software Engineering. In: IEEE Annals of the History of Computing. 30, Nr. 3, Juli-Sept. 2008, S. 32-39, doi:10.1109/MAHC.2008.33 (http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0409/BriefHistoryofSoftwareEng.pdf, abgerufen am 30.4.2009). </ref> zum einen dadurch aus, dass die Funktionen, die die jeweils verwendete Programmierumgebung bereitstellt, möglichst effizient genutzt werden. Insbesondere geht es darum, für neue Aufgabenstellungen das Rad nicht immer wieder neu zu erfinden, wenn bestimmte Funktionen schon bereitgestellt werden (zum Beispiel durch die Programmierumgebung in Form von Programmbibliotheken). Sie zeichnet sich also vor allem dadurch aus, dass ein guter Überblick über den grundsätzlichen Funktionsumfang und die Systematik der von der Programmierumgebung bereitgestellten Funktionen (die in die zehntausende gehen können) möglich ist. Für eine definierte Aufgabenstellung kann in entsprechenden Dokumentationen dann schnell eine verfügbare Funktion ermittelt, eingesetzt und ggf. erweitert werden.
Arbeitsmittel
Theoretisch reicht zum Programmieren ein einfacher Texteditor und ein Compiler/Interpreter für die jeweilige Programmiersprache aus. In der Praxis wird jedoch zusätzlich auf eine Reihe von Werkzeugen zurückgegriffen, die typische Programmierarbeiten vereinfachen sollen. Dazu gehören beispielsweise Texteditoren mit speziellen Features wie Syntax-Highlighting, Autovervollständigen und Refactoring – wobei der Übergang zur Integrierten Entwicklungsumgebung (IDE) fließend ist.
Daneben existieren verschiedene Werkzeuge zur Fehlersuche, sog. Debugger, sowie Programme zur Durchführung statischer und dynamischer Tests. Zur Performanzanalyse kann zusätzlich ein Profiler eingesetzt werden.
Arbeiten mehrere Entwickler an derselben Software, kommen meist Versionierungssysteme zum Einsatz, die den Code inklusive früherer Versionen auf einem zentralen Server speichern, auf den alle beteiligten Programmierer Zugriff haben.
Siehe auch
- Programmer/Programmiergerät
- Programmierparadigma
Weblinks
- Die Geschichte der Softwareprogrammierung (Joachim Korb)
- Einführung ins Programmieren (für Neueinsteiger)
- Online-Buch "Allgemeine Grundlagen der Programmierung"
Einzelnachweise
<references />