Programmierung

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 30. Juni 2016 um 19:46 Uhr durch Emergency doc (Diskussion | Beiträge) (Änderungen von 176.7.91.81 (Diskussion) auf die letzte Version von Bimaterist zurückgesetzt). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Programmierung (von griechisch prógramma ‚Vorschrift‘) bezeichnet die Tätigkeit, Computerprogramme zu erstellen. Das ist ein Teilbereich der Softwareentwicklung[1] 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.

Geschichte

Charles Babbage entwarf die Analytical Engine, die jedoch nie gebaut wurde. Ada Lovelace übersetzte 1843 die Beschreibung aus dem Französischen und fügte eigene Notizen hinzu. Diese waren doppelt so lange wie der ursprünglich französische Text von Luigi Menabrea. Die Notes enthielten einen tabellarischen Plan zur Berechnung der Bernoulli-Zahlen, was als das erste Programm bezeichnet wird. Diese Notizen schrieb sie bereits 100 Jahre bevor der erste Computer gebaut wurde.[2] Die Mathematikerin Grace Hopper schuf 1949 den ersten Compiler, der den Quellcode in Maschinencode übersetzt.[3]

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:

  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 – müssen aber nicht!
  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 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 (oder Quellcode) 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 oder auch sogenannten sprechenden Variablennamen[4] 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.

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[5] 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 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 auch

Weblinks

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

Einzelnachweise

  1. Lerne Programmieren lerneprogrammieren.com Unterschied zwischen Programmierung und Softwareentwicklung
  2. Ada Lovelace, aufgerufen am 7. Juni 2016
  3. Grace Hopper, Yale University, aufgerufen am7. Juni 2016
  4. 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“).
  5. 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]).