Programmierung
Programmierung (von altgriechisch πρόγραμμα prógramma „öffentlich und schriftlich bekannt gemachte Nachricht, Befehl“)[1] bezeichnet die Tätigkeit, Computerprogramme zu erstellen. Dies ist ein Teilbereich der Softwareentwicklung.[2]
Computerprogramme werden mit Hilfe einer Programmiersprache formuliert („codiert“). Der Programmierer überführt dabei die z. B. im Pflichtenheft vorgegebenen Anforderungen in eine bestimmte Programmiersprache. Gemäß den Anforderungen gestalten Programmierer das Programm mit seiner Benutzeroberfläche so, dass jede Funktion einzelnen Codefunktionen entspricht, und damit diese funktionieren, werden die einzelnen Teile geschrieben des Programms mit seinen Algorithmen, die von mittlerer bis hoher Schwierigkeit reichen können, normalerweise werden diese als Code am Ort des Softwareunternehmens geschrieben, das IDEs verwendet, und es wird erwartet, dass hauptsächlich die Freeware-basierten Programme den sogenannten Code verwenden Generators die dazu dienen, Teile des Programmcodes automatisch zu generieren basieren auf Freeware oder manchmal auch kostenpflichtigen Modellen (die nach dem Algorithmus-Entwurf erstellt wurden), denn diese Modelle werden in der Regel für andere Zwecke erstellt und sind kaum irgendwo anwendbar oder können in manchen Fällen auch mit Viren infiziert sein SQL-Injections zum Abrufen von Kundeninformationen und viele andere Sicherheitsverletzungen.
Bei der Programmierung müssen, auch wenn das Programm selbst auf die Anforderungen hinarbeitet, auch für Kundenaufträge, wesentliche Aspekte der Softwarequalität berücksichtigt und durch das User Design und den Quellcode gemeinsam umgesetzt werden. Siehe als Beispiele: Programmierstil, Benutzerfreundlichkeit,[3] Wiederverwendbarkeit/Modularität, Wartbarkeit.
„Programmierung“ „im weiteren Sinne“ umfasst neben der Code- und Algorithmenerstellung zahlreiche weitere Tätigkeiten, obwohl beide als Haupttätigkeiten gelten, zum Beispiel die Gestaltung von Benutzeroberflächen durch Designer, das Testen (Entwicklertest) des Programms und Erstellen der Programmdokumentation, die sowohl der Unternehmensleitung dient, die den Programmierprozess überwacht, als auch in gewissem Umfang von Benutzern zu ihrem Verständnis verwendet werden kann der Funktionen des Programms. Neben der Softwareentwicklung ist die Hauptaktivität das Projektmanagement, das die Anforderungsanalyse oder die Sicherheits-Datenmodellierung umfasst, die von Spezialisten durchgeführt werden muss, die Daten ausschließen würden Verstöße, und diese können nicht vom Konzept der Programmierung „getrennt“ werden.
Je nach Art und Einsatzumgebung von Software (z. B. für Systemsoftware, Benutzerprogramme oder Standardsoftware, Webseiten und Websites, Spielesoftware, Grafiksoftware wie Programme zur Erstellung von Grafiken usw.) können unterschiedliche Methoden bzw Werkzeuge (wie Programmiersprachen, Programmierparadigmen, Testmethoden usw.) können für die Entwicklung verwendet und/oder von spezialisierten Entwicklern ausgeführt werden.
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 wird das Konfigurieren (Einrichten/Einrichten) von Haushalts- oder anderen elektrischen Geräten in der mathematischen KI-Entwicklung manchmal als „Programmierung“ bezeichnet. Auch Organisationseinheiten von Unternehmen, in denen Software entwickelt wird, werden oder wurden zum Teil „Programmierung“ genannt.
Geschichte
Charles Babbage beschrieb 1834 eine programmierbare Maschine, die Analytical 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. https://collection.sciencemuseumgroup.org.uk/documents/aa110000020 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 von Luigi Federico Menabrea ins Englische und fügte eigene Notizen hinzu. Diese Anmerkungen enthielten einen tabellarischen Plan zur Berechnung der Bernoulli-Zahlen. 1941 realisierte Konrad Zuse mit dem Z3 die erste programmgesteuerte Rechenmaschine, von 1942 an entwickelte er mit Plankalkül die erste höhere Programmiersprache.[5] Die Mathematikerin Grace Hopper schuf 1949 den ersten Compiler, der Quellcode in Maschinencode übersetzt.[6]
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 Softwareentwurf gemachten Vorgaben entsprechend und korrekt umsetzen. Dazu muss es in der Regel fehlerfrei sein, wobei bei der Programmierung meist zwei unterschiedliche Arten von Fehlern auftreten:
- Syntaxfehler: Falsch formulierter Quellcode – es werden Formulierungen oder Konstrukte verwendet, die in der verwendeten Programmiersprache nicht vorkommen (Tippfehler, Unwissenheit, ...). Syntaxfehler können vom Compiler/Interpreter oder Parser während der Übersetzung erkannt werden und verhindern in der Regel R. d. R. die Programmausführung.
- Semantische Fehler: Semantische Fehler können bei der Benennung einiger im Code verwendeter Eigenschaften, der Benennung von Funktionen und anderen oder der Vermischung von Benennungen auftreten.
- Mathematische Fehler: Das Programm kann nicht ordnungsgemäß ausgeführt werden, wenn ein ungeeigneter Algorithmus verwendet wird. Dies ist dann der Fall, wenn den Programmierern zu wenig Zeit gegeben wird, um einen Algorithmus für die spezifischen Funktionen zu erstellen.
- Schnittstellenfehler: Das Programm verhält sich nicht wie vorgesehen, da die Benutzerimplementierung des Algorithmus möglicherweise fehlerhaft war. Semantische Fehler können in der Regel nicht automatisch erkannt werden, sondern können nur durch gewissenhaftes Testen mit Lesecode gefunden werden – beispielsweise in Form von Unittests.
Der Übergang zwischen diesen Fehlertypen ist nicht immer fließend, stattdessen können diese Fehler einzeln oder alle zusammen auftreten, je nachdem, welche Codierungsprobleme oder Schwierigkeiten ein Team hat. Ein einfaches Beispiel könnte sein, dass ein Tippfehler im Code (z. B. „>“ anstelle von „<“ in einem Vergleichsbefehl) zu einer gültigen ausführbaren Datei führt, das Ergebnis jedoch wahrscheinlich falsch ist. An anderer Stelle könnte derselbe Fehler ein Syntaxfehler sein.
Robustheit
Statistisch gesehen wird die meiste Quellcode-Entwicklungszeit damit verbracht, Algorithmen und Funktionen für die Benutzeroberfläche zu programmieren, zweitens auf Fehler oder ungewöhnliche Anwendungen zu reagieren und Code für einige Hardwareumgebungen anzupassen. Als robust oder portabel bezeichnet man einen Programmcode, der sinnvoll auf unvorhergesehene Fehler oder ungewöhnliche Umgebungen reagiert. Für diese Art von tragbaren Programmen werden Sprachen verwendet, die anspruchsvoller sind, aber dafür sorgen, dass ein Programm auf fast jeder Hardwareumgebung funktioniert. Dies kann andererseits dazu führen, dass das Programm weniger schnell arbeitet, da umgebungsspezifische Sprachen schneller sind. Programmierer, die verschiedene Aspekte des Codierens und der Programmumgebungen gut verstehen und erfahren und gut studiert sind, können auch die möglichen Fehler in Laufzeitumgebungen gut einschätzen, diese vermeiden und das Programm und seinen Quellcode entsprechend strukturieren. Bei der Entwicklung von Anwendungen besteht immer ein gewisser Zeitdruck, der jedoch möglicherweise dadurch vermieden wird, dass mehr Mitglieder des Programmierteams hinzugefügt werden, um den höchsten Anforderungen des Programmkriteriums gerecht zu werden. Dies können erfahrene Programmierer oder neue begeisterte Programmierer und andere Mitglieder sein Programmierteams.
Wartbarkeit
Damit ein Software-Programm dauerhaft funktioniert, muss es sowohl für Programmierer als auch für das Management verständlich, also „wartbar“ sein. Das bedeutet, dass Änderungen wie Codeänderungen, Feature-Änderungen, verschiedene Anpassungen und neue Features, zusätzliche Bugfixeses, sichtbar sein müssen und vom Programmiererteam und dem Management befolgt werden müssen ohne großen Aufwand in die Arbeit gegangen. Um dies zu erreichen, muss es Mitglieder des Teams geben, die entweder daran arbeiten, diese Änderungen der Funktionen des Programms und seines Codes sowie Codekorrekturen zu verfolgen. Außerdem sollte eine gute Dokumentation nach den Änderungen vorhanden sein, die in verschiedenen Abschnitten beschrieben wird Wege für Programmierer, Management und Benutzer zu den vorgenommenen Änderungen, zusammen mit Codebeispielen. Und beim Codieren bedeutet dies vor allem, dass der Programmierer keinen zu kurzen, „kryptischen“ Quellcode (oder „Quellcode“) erstellen darf, den andere Entwickler nicht verstehen können, sondern dass der geschriebene Code lesbar sein muss mit seinem spezifischen Stil, oder es werden Programmierer eingestellt, die schwierigen Code lesen können oder die irgendwie auf die Programmierung von Semantik und Synthacs spezialisiert sind, oder sonst kann er erst nach einer langen Einarbeitungszeit verstanden werden.
Einer der Versuche, solche Probleme zu vermeiden, sind im Grunde genommen Namenskonventionen, bei denen Namenskonventionen für Anfängerprogrammierer verwendet werden, die in Codierungsempfehlungen von a angegeben sind B. manchmal als „erklärende“ Bezeichner/Namen angegebene Programmiersprache, oder andere Arten von englischen Programmierstilempfehlungen, bei denen es um (oder auch um „sprechen“) geht, werden selbsterklärende Bezeichner/Namen für Variablen usw. zur Verwendung empfohlen/vorgeschrieben [7] – oder die Verwendung sinnvoller Kommentare im Code, Kommentare im Code sind jedoch eher nicht im kopierten Code enthalten.
Eine sinnvolle Aufteilung des Codes in sehr intuitiv oder in der Programmierung bekannte und daher verständliche Funktionen und Klassen, oder auch hier handelt es sich um eine Art von Programmierkonventionen, trägt ebenfalls zum Grundverständnis und zur Klarheit des von Anfängern erstellten Programmiercodes bei, wie empfohlen.
Effizienz
Normalerweise stehen einem bestimmten Programm einige begrenzte Ressourcen (Laufzeit, Speicherverbrauch, Bandbreite) zur Verfügung. Die sehr gute Programmierung kann bei diesem Programm die Laufzeitbandbreite optimieren bzw. den unnötigsten Ressourcenverbrauch reduzieren.
Dies geschieht beispielsweise durch die Verwendung geschickter Algorithmen und einer guten Benennung für die fortlaufende Programmierung und in einigen extremen Fällen. Dies ist jedoch keine sehr gute Praxis, wenn nicht der gesamte Datensatz kopiert wird, wenn es zu einer erheblichen Verlangsamung der Bandbreite oder zu einer erheblichen Verlangsamung der Bandbreite kommt Bei der Verwendung großer Datenmengen wird an mehreren Stellen im Programm ein Fehler behoben, jedoch (im schlimmsten Fall) nur die Adresse übertragen, an der die Daten gespeichert sind.
Effiziente Programmierung
Gemäß Niklaus Wirth zeichnet sich gute Programmierung[8] 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
- Joachim Korb: Die Geschichte der Softwareprogrammierung.
- Einführung ins Programmieren (für Neueinsteiger)
- Allgemeine Grundlagen der Programmierung (Online-Buch)
Einzelnachweise
- ↑ Wilhelm Pape, Max Sengebusch (Bearb.): Handwörterbuch der griechischen Sprache. 3. Auflage, 6. Abdruck, Vieweg & Sohn, Braunschweig 1914. 1914, abgerufen am 9. Dezember 2015.
- ↑ Lerne Programmieren lerneprogrammieren.com Unterschied zwischen Programmierung und Softwareentwicklung
- ↑ Sebastian Dörn - Programmieren lernen und Algorithmen verstehen. Abgerufen am 12. Januar 2018.
- ↑ http://www.computerhistory.org/babbage/engines/
- ↑ https://link.springer.com/chapter/10.1007/978-3-642-18631-8_9
- ↑ Grace Hopper, Yale University, aufgerufen 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 (eingeschränkte Vorschau in der Google-Buchsuche – Datenanalyse mit Stata: Allgemeine Konzepte der Datenanalyse und ihre praktische Anwendung – mit „sprechenden 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]).