Hauptmenü öffnen

Programmierung

Tätigkeit der Erstellung von Computerprogrammen

Programmierung (von altgriechisch πρόγραμμα prógramma „öffentlich und schriftlich bekannt gemachte Nachricht, Befehl“)[1] bezeichnet die Tätigkeit, Computerprogramme zu erstellen. Das ist ein Teilbereich der Softwareentwicklung[2] und umfasst vor allem das Umsetzen (Implementierung) des Softwareentwurfs in den Quellcode einer Programmiersprache. Das Übersetzen dieses Quellcodes in die Maschinensprache erfolgt unter Verwendung eines Compilers.

Computerprogramme werden mit Hilfe einer Programmiersprache formuliert („codiert“). Der Programmierer ‚übersetzt‘ dabei die vorgegebenen Anforderungen (z. B. im Pflichtenheft) und Algorithmen in eine gewünschte Programmiersprache. Zunehmend werden dazu Codegeneratoren verwendet, die zumindest Teile des Programmcodes auf Basis von Modellen (die im Entwurf entstanden sind) automatisch erzeugen.

Beim Programmieren sind wesentliche Aspekte zur Softwarequalität zu berücksichtigen und durch die Gestaltung des Quellcodes 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 der Programmierdokumentation. Abgrenzen vom Begriff des Programmierens lassen sich andere Tätigkeiten zur Softwareentwicklung wie beispielsweise zum Projektmanagement, zur Anforderungsanalyse oder zur Datenmodellierung.

Je nach angewendetem Vorgehensmodell verlaufen die Aktivitäten zur Programmierung in zeitlich voneinander abgegrenzten Projektphasen, parallel oder iterativ. In der Praxis geschieht das Programmieren häufig in Teamarbeit, mit modernen Entwicklungsmethoden (wie Agile Softwareentwicklung) und Programmierwerkzeugen.

Ä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

GeschichteBearbeiten

Charles Babbage beschrieb 1834 eine programmierbare Maschine, die Analytical Engine[4], welche allerdings nie gebaut wurde. Ada Lovelace übersetzte 1843 eine ursprünglich französische Beschreibung der Analytical Engine von Federico Luigi Menabrea ins Englische und fügte eigene Notizen hinzu. Diese Anmerkungen enthielten einen tabellarischen Plan zur Berechnung der Bernoulli-Zahlen, was als das erste Programm bezeichnet wird.[5] 1941 realisierte Konrad Zuse mit dem Z3 die erste programmgesteuerte Rechenmaschine, von 1942 an entwickelte er mit Plankalkül die erste höhere Programmiersprache [6]. Die Mathematikerin Grace Hopper schuf 1949 den ersten Compiler, der Quellcode in Maschinencode übersetzt.[7]

QualitätskriterienBearbeiten

Die Qualität von Software entsteht zu großen Teilen im Rahmen der Tätigkeiten des Programmierens, besonders die folgenden Qualitätskriterien betreffend:

KorrektheitBearbeiten

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:

  1. 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.
  2. 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 vom 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.

RobustheitBearbeiten

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.

WartbarkeitBearbeiten

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 (oder Quellcode) erzeugen soll, der für andere Entwickler nicht oder nur mit hoher Einarbeitungszeit verständlich ist.

Um solche Probleme zu vermeiden, existieren eine Reihe von Konventionen wie die Verwendung von selbsterklärenden oder auch sogenannten sprechenden Variablennamen[8] 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.

EffizienzBearbeiten

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 ProgrammierungBearbeiten

Gemäß Niklaus Wirth zeichnet sich gute Programmierung[9] 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.

ArbeitsmittelBearbeiten

Theoretisch reichen 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 auchBearbeiten

WeblinksBearbeiten

  Wiktionary: Programmierung – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen
  Commons: Programmierung – Sammlung von Bildern, Videos und Audiodateien
  Wikibooks: Das Buchregal "Programmierung" – Lern- und Lehrmaterialien

EinzelnachweiseBearbeiten

  1. Wilhelm Pape, Max Sengebusch (Bearb.): Handwörterbuch der griechischen Sprache. 3. Auflage, 6. Abdruck, Vieweg & Sohn, Braunschweig 1914. 1914, abgerufen am 9. Dezember 2015.
  2. Lerne Programmieren lerneprogrammieren.com Unterschied zwischen Programmierung und Softwareentwicklung
  3. Sebastian Dörn - Programmieren lernen und Algorithmen verstehen. Abgerufen am 12. Januar 2018 (deutsch).
  4. http://www.computerhistory.org/babbage/engines/
  5. Ada Lovelace, aufgerufen am 7. Juni 2016
  6. https://link.springer.com/chapter/10.1007/978-3-642-18631-8_9
  7. Grace Hopper, Yale University, aufgerufen am7. Juni 2016
  8. 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“).
  9. 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]).