Programmierung (vonaltgriechischπρόγραμμαprógramma „öffentlich und schriftlich bekannt gemachte Nachricht, Befehl“)[1] bezeichnet die Tätigkeit,Computerprogramme zu erstellen und wird derSoftwareentwicklung zugerechnet.[2]
Computerprogramme werden mit Hilfe einerProgrammiersprache formuliert („codiert“). DieProgrammierenden überführen dabei die z. B. imPflichtenheft vorgegebenenAnforderungen in eine bestimmte Programmiersprache. Teilweise werden dazuCodegeneratoren verwendet, die Teile des Programmcodes auf Basis vonModellen (die im Entwurf entstanden sind) automatisch erzeugen.
Beim Programmieren sind wesentliche Aspekte zurSoftwarequalität zu berücksichtigen und durch die Gestaltung desQuellcodes umzusetzen. Siehe dazu als Beispiele:Programmierstil,Benutzerfreundlichkeit,[3]Wiederverwendbarkeit /Modularität,Wartbarkeit.
„Programmieren“in erweitertem Sinn umfasst neben der Codeerstellung zahlreiche weitere Tätigkeiten, zum Beispiel das Testen(Entwicklertest) des Programms oder das Erstellen derProgrammdokumentation.Abgrenzen vom Begriff des Programmierens lassen sich andere Tätigkeiten zur Softwareentwicklung wie beispielsweise dasProjektmanagement, dieAnforderungsanalyse oder dieDatenmodellierung.
Abhängig vom Typ und der Einsatzumgebung von Software (z. B. fürSystemsoftware, Spielesoftware,Standardsoftware, Grafiksoftware. usw.) können zur Entwicklung unterschiedliche Verfahren oder/und Werkzeuge (wie Programmiersprachen, Testverfahren etc.) zum Einsatz kommen und/oder von spezialisiertenEntwicklern ausgeführt werden.
Je nach angewendetemVorgehensmodell verlaufen die Aktivitäten zur Programmierung in zeitlich voneinander abgegrenztenProjektphasen, parallel oder iterativ. In der Praxis geschieht das Programmieren häufig in Teamarbeit, mit modernen Entwicklungsmethoden (wieAgile Softwareentwicklung) undProgrammierwerkzeugen.
Ähnliche Bedeutungen: Umgangssprachlich bezeichnet man gelegentlich auch das Konfigurieren (das Einstellen/Einrichten) von Haushalts- oder anderen elektrischen Geräten als „Programmieren“. AuchOrganisationseinheiten von Unternehmen, in denen Software entwickelt wird, werden oder wurden zum Teil „Programmierung“ genannt.
Charles Babbage beschrieb 1834 eine programmierbare Maschine, dieAnalytical Engine,[4] welche allerdings nie gebaut wurde. Seine „Notations of calculations for the Analytical Engine“ umfasst 27 Programme. Diese sind in „The Babbage Papers“ des Science Museums von London abrufbar.[5] Die Programme enthalten bereits „Indirekte Adressierung“ und „bedingte Ausführungen“ (IF-THEN-ELSE-Befehle). Diese Dokumente dürften als erste Programme und Programmiersprache bezeichnet werden.
Ada Lovelace übersetzte 1843 eine ursprünglich französische Beschreibung der Analytical Engine vonLuigi Federico Menabrea ins Englische und fügte eigene Notizen hinzu. Diese Anmerkungen enthielten einen tabellarischen Plan zur Berechnung der Bernoulli-Zahlen. 1941 realisierteKonrad Zuse mit demZ3 die erste programmgesteuerte Rechenmaschine, von 1942 an entwickelte er mitPlankalkül die erstehöhere Programmiersprache.[6] Die MathematikerinGrace Hopper schuf 1949 den erstenCompiler, der Quellcode in Maschinencode übersetzt.[7]
Die Qualität von Software entsteht zu großen Teilen im Rahmen der Tätigkeiten des Programmierens, besonders die folgenden Qualitätskriterien betreffend:
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 beim Übersetzen vom Compiler/Interpreter oder Parser erkannt werden und verhindern i. d. R. die Programmausführung.
- Semantische Fehler: Das Programm verhält sich nicht wie gewünscht, weil möglicherweise der Algorithmus oder seine Umsetzung fehlerhaft war. Semantische Fehler können in der Regel nicht automatisch erkannt, sondern nur durch gewissenhaftes Testen gefunden werden – beispielsweise in Form vonUnittests.
Der Übergang zwischen diesen beiden Fehlerarten ist fließend. Beispielsweise wird ein Tippfehler im Code (z. B. „>“ anstatt „<“ in einem Vergleichsbefehl) zu einem gültigen ausführbaren Programm führen, das Resultat dürfte jedoch falsch sein. An anderer Stelle könnte derselbe Fehler ein Syntaxfehler sein.
Statistisch gesehen wird die meiste Zeit für die Entwicklung vonQuelltext 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.
Damit eineSoftware dauerhaft funktioniert, muss siewartbar sein. Das heißt, Änderungen wieBugfixes, Anpassungen und neueFeatures müssen ohne großen Aufwand eingepflegt werden können. Dies erfordert vor allem, dass der Programmierer keinen zu kurzen, „kryptischen“Quelltext (oderQuellcode) erzeugen soll, der für andere Entwickler nicht oder nur mit hoher Einarbeitungszeit verständlich ist.
Um solche Probleme zu vermeiden, existieren häufigNamenskonventionen, in denen beispielsweise selbsterklärende (oder auch „sprechende“) Bezeichner/Namen für Variablen etc. zur Verwendung empfohlen/vorgeschrieben werden[8] – oder die Verwendung aussagefähigerKommentare im Code. Auch eine sinnvolle Aufteilung des Codes in intuitiv verständliche Funktionen und Klassen trägt zum Verständnis und Übersichtlichkeit bei.
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.
GemäßNiklaus Wirth zeichnet sich gute Programmierung[9] zum einen dadurch aus, dass die Funktionen, die die jeweils verwendete Programmierumgebung bereitstellt, möglichsteffizient 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 dieProgrammierumgebung in Form vonProgrammbibliotheken). 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.
Theoretisch reichen zum Programmieren ein einfacherTexteditor und einCompiler/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 wieSyntax-Highlighting,Autovervollständigen undRefactoring – wobei der Übergang zurIntegrierten Entwicklungsumgebung (IDE) fließend ist.
Daneben existieren verschiedene Werkzeuge zur Fehlersuche, sogenannteDebugger, sowie Programme zur Durchführungstatischer unddynamischer Tests. Zur Performanzanalyse kann zusätzlich einProfiler eingesetzt werden.
Arbeiten mehrere Entwickler an derselben Software, kommen meistVersionierungssysteme zum Einsatz, die den Code inklusive früherer Versionen auf einem zentralen Server speichern, auf den alle beteiligten Programmierer Zugriff haben.
- ↑Wilhelm Pape, Max Sengebusch (Bearb.):Handwörterbuch der griechischen Sprache. 3. Auflage, 6. Abdruck, Vieweg & Sohn, Braunschweig 1914;zeno.org
- ↑Was ist Softwareentwicklung? IBM; abgerufen am 18. Juni 2024
- ↑Sebastian Dörn: Programmieren lernen und Algorithmen verstehen. Abgerufen am 12. Januar 2018.
- ↑computerhistory.org
- ↑collection.sciencemuseumgroup.org.uk
- ↑link.springer.com
- ↑Grace Hopper. Yale University; abgerufen am 7. Juni 2016
- ↑Ulrich Kohler, Frauke Kreuter:Datenanalyse mit Stata: Allgemeine Konzepte der Datenanalyse und ihre praktische Anwendung. 4. Auflage. Oldenbourg Wissenschaftsverlag, 2012,ISBN 978-3-486-70921-6,S. 113 (books.google.com – Datenanalyse mit Stata: Allgemeine Konzepte der Datenanalyse und ihre praktische Anwendung – mit „sprechende Variablennamen“ im Abschnitt „5.6 Beschriftung von Variablen“).
- ↑Niklaus Wirth:A Brief History of Software Engineering. In:IEEE Annals of the History of Computing.Band 30, 3, Juli–September, 2008,S. 32–39,doi:10.1109/MAHC.2008.33 (computer.org [PDF; abgerufen am 30. April 2009]).