Ein Computerprogramm oder kurz Programm ist eine den Regeln einer bestimmten Programmiersprache genügende Folge von Anweisungen (bestehend aus Deklarationen und Instruktionen), um bestimmte Funktionen bzw. Aufgaben oder Probleme mithilfe eines Computers zu bearbeiten oder zu lösen.ISO/IEC 2382-1:1993 definiert „computer program“: „A syntactic unit that conforms to the rules of a particular programming language and that is composed of declarations and statements or instructions needed to solve a certain function, task, or problem.“ Bis 2001 definierte die DIN 44300 „Informationsverarbeitung Begriffe“ identisch.

Die bekannteste Form von Programmen sind Anwendungsprogramme für Personal Computer oder Notebooks und Apps für Anwendungen von mobilen Computern (Smartphones und Tabletcomputer).

Seit den 2010er Jahren wird die Bezeichnung „Apps“ auch für Anwenderprogramme genutzt. Der Begriff Codes wird im wissenschaftlich-technischen Umfeld für spezielle Computerprogramme aus der Modellierung und Simulation genutzt.

Überblick mini|'Computerprogramm', Begriffszusammenhänge und im Sprachgebrauch auftretende Synonyme

Ein Computerprogramm gehört zur Software eines Computers. Es liegt meist auf einem Datenträger als ausführbare Programmdatei, häufig im sogenannten Maschinencode, vor, die zur Ausführung in den Arbeitsspeicher des Rechners geladen wird. Das Programm wird als Abfolge von Maschinen-, d. h. Prozessorbefehlen von dem oder den Prozessoren des Computers verarbeitet und damit ausgeführt.

Computerprogramme entstehen im Rahmen der Softwareentwicklung. Die dabei direkt auf einzelne Programme bezogenen Aktivitäten bezeichnet man allgemein als Programmierung oder auch als Implementierung. Dabei entsteht zunächst für jedes Programm ein sogenannter Quelltext, den Programmierer in einer Programmiersprache abgefasst haben. Er besteht aus einer Abfolge von (zumeist der englischen Sprache entnommenen) Anweisungen, die (für Programmierer) im Allgemeinen verständlicher sind (z. B. ADD, SUB, AND, OR) und durch menschliche Benutzer einfacher bearbeitbar sind als der später daraus entstehende Maschinencode.

Damit ein in einer Hochsprache geschriebenes Programm ausgeführt werden kann, muss sein Quellcode in Maschinencode übersetzt werden. Eine Anweisung einer höheren Programmiersprache wird im Allgemeinen in mehrere Maschinenbefehle übersetzt. Der Übersetzungsvorgang wird Kompilierung genannt. Um aus dem Quelltext den Maschinencode zu generieren, wird ein Assembler, Compiler oder Interpreter benötigt. Dieser übersetzt die Anweisungen der Programmiersprache in die semantisch entsprechenden Befehle der Maschinensprache des zu verwendenden Computers.

Der Programmcode kann in Dateien gespeichert werden, die meist durch eine Dateiendung gekennzeichnet sind. Quelltextdateien weisen damit auf die verwendete Hochsprache hin (<programm>.c: ein in C formuliertes Programm). Sie können im Allgemeinen mit einem einfachen Texteditor bearbeitet werden. Eine Datei, die dagegen Maschinencode enthält, besitzt keine oder eine betriebssystemspezifische Endung, die lediglich auf ihre Ausführbarkeit hinweist (<programm>.exe bei MS-DOS und Windows; <programm> bei unixoiden Systemen). Sie kann oft als Kommando in einem Terminal (Eingabeaufforderung) aufgerufen werden. Siehe auch Programmbibliothek.

Im Sprachgebrauch wird Computerprogramm meist zu Programm verkürzt oder der Begriff Software verwendet. Allerdings ist Computerprogramm kein Synonym zu Software; vielmehr ist ‚Software‘ ein IT-Sammelbegriff für Nicht-Hardware, zum Beispiel für Betriebssystem, Datenbank oder für eine komplette, für den Benutzer fertige IT-Anwendung – die Komponenten wie Grafik- und Audiodateien, Schriftarten, Hilfetexte usw. umfassen kann.

Ein größeres Computerprogramm besteht meist aus mehreren Modulen – die entweder zum Programm selbst gehören oder die als Bausteine (Unterprogramme) aus bereits bestehenden Programmbibliotheken bei der Ausführung des Programms benutzt werden. Im umgekehrten Fall können Computerprogramme Teil eines übergeordneten, ein größeres Aufgabengebiet abdeckenden Anwendungssystems sein; Beispiel: Gehaltsabrechnung, Finanzbuchhaltung, Meldewesen. Die Anweisungen, die (als Teil von Programmen) einen konkreten Lösungsweg repräsentieren, werden als Algorithmus bezeichnet; Beispiel: Berechnen der Mehrwertsteuer.

Die Entwicklung von Computerprogrammen ist das Gebiet der Softwaretechnik. Je nach Komplexität der zu entwickelnden Computerprogramme geschieht dies im Rahmen von Projekten. Die Aktivitäten der Beteiligten werden dabei meist unter Anwendung von Vorgehensmodellen, speziellen Methoden und Werkzeugen zur Softwareentwicklung ausgeführt. In den Anfängen der Programmierung wurde – bis zur Entwicklung von Programmiersprachen – ausschließlich in Maschinencode programmiert. Später kamen höhere Programmiersprachen zum Einsatz.

Je komplexer ein Computerprogramm ist, desto anspruchsvoller ist die vorbereitende Planung und desto wichtiger die Erfahrung der ausführenden Programmierer. Bei größeren Programmen kommt es aufgrund mangelnder Planung und Erfahrung der Programmierer oft zu unnötig komplexen und/oder ineffizienten Programmen oder Programmteilen (siehe auch Bloatware).

Klassifizierungsmöglichkeiten Neben den für Software im Allgemeinen geltenden Unterscheidungsmerkmalen lassen sich Computerprogramme (als Untervariante von Software) nach den folgenden, beispielhaft genannten Kriterien unterscheiden: Quellprogramme (in einer bestimmten Programmiersprache) oder Maschinenprogramme (ausführbar auf bestimmten Plattformen) oder Programme in einem Zwischencode Hauptprogramme (aufgerufen über Betriebssystem-Kommandos) oder Unterprogramme (aufgerufen durch andere Programme). Sonderformen treten auf, wenn Programme z. B. über technische Steuerungskomponenten aufgerufen werden, z. B. über serviceorientierte Architekturen, automatisiertes Workflow-Management. Stapelprogramme (verarbeiten ‚Stapel‘ von Daten) bzw. Shellskripte oder Dialogprogramme (stehen in Interaktion mit Benutzern, z. B. über Dialoge) Nach dem Ort der Speicherung und Programmausführung unterschieden können Programme lokal (auf einem Arbeitsplatzrechner) gespeichert und ausgeführt werden oder auf einem Server installiert sein und trotzdem lokal (nach dem Laden über eine Online-Verbindung) ausgeführt werden oder nur auf dem Server gespeichert und dort auch ausgeführt werden. Bei verteilten Anwendungen werden Programmteile auf unterschiedlichen Rechnern ausgeführt, z. B. die Geschäftslogik und Datenhaltung im Server, Funktionen der Benutzeroberfläche am lokalen Rechner; im rein technischen Sinn stehen hierbei verschiedene Programme miteinander in Verbindung.

Geschichte

Die Analytische Maschine von Charles Babbage Charles Babbage stellte bereits 1832 einen Demonstrator seiner Differenzmaschine No. 1 vor, verfolgte ab 1834 jedoch das Konzept einer per Dampfkraft betriebenen Rechenmaschine für die allgemeine Anwendung, die er nannte, „Analytische Maschine“. Diese hätte per Lochkarten programmiert werden können, unterschiedliche Rechnungen durchzuführen, sodass die Auswertung polynomialer Funktionen (die alleinige Funktion der Differenzmaschine) nur ein Programm unter vielen gewesen wäre.

Für die Entwicklung seiner universellen Rechenmaschine brachte Charles Babbage zwischen 1837 und 1840 insgesamt 27 Programme zu Papier. Einige der Designentscheidungen für die Analytischen Maschine lassen sich direkt im Quelltext der Programme nachvollziehen. So hat die Analytische Maschine bereits eine Trennung zwischen Speicher und Rechenwerk, was charakteristisch für Computer seit den 1940er Jahren ist. Obwohl nie gebaut, gilt die damit als der erste Computer der Geschichte, oder zumindest als dessen Vorläufer nach der Definition einer Universellen Rechenmaschine () nach Alan Turing.

Seine Notizen, die auch die Programme beinhalten, blieben unveröffentlicht und wurden 1937 wiederentdeckt. Die Quelltexte der Programme selbst wurden erst 1982 erstmals untersucht. Die Notizen von Charles Babbage zur sind in den ‚‘ des Science Museums von London frei, als Open Access, abrufbar.

Das erste Programm trägt den 4. August 1837 als Datum und befasst sich mit Simultangleichungen der Cramerschen Regel. Einige der späteren Programme sind relativ komplex, wie z. B. die Multiplikation von zwei Polynomen. Der Code enthält bereits Indirekte Adressierung und den bedingten Sprung (IF-THEN-ELSE-Befehle).

Das erste veröffentlichte Computerprogramm von Ada Lovelace Ada Lovelace, Tochter des britischen Dichters Lord Byron, traf Charles Babbage 1833 und unterhielt mit ihm bis zu ihrem Tod 1852 eine Freundschaft. Ab ca. 1841 arbeitete sie mit ihm zusammen an der Analytischen Maschine.

1843 übersetzte sie ein Manuskript des italienischen Ingenieurs Luigi Federico Menabrea über die ins Englische, versah die Übersetzung jedoch mit zahlreichen zusätzlichen Anmerkungen zum konzeptionellen Unterschied zwischen Babbage’s Differenzmaschine und der Analytischen Maschine. Dazu schrieb sie auch ein Programm, das die Bernoulli-Zahlen berechnet. Es ist die weltweit erste Publikation eines Computerprogramms, wodurch Ada Lovelace als die erste Programmiererin gilt.

Die 1980 veröffentlichte Programmiersprache Ada ist nach Ada Lovelace benannt.

Erste Programme auf Lochstreifen In den Jahren 1936 bis 1941 entwarf Konrad Zuse die Rechner Z1 und Z3, die lange Befehlsfolgen auf einem Lochstreifen verarbeiteten, die ersten Computerprogramme, die auf realen Maschinen ausgeführt werden konnten. Die Rechner beherrschten die vier Grundrechenarten und Quadratwurzelberechnungen auf binären Gleitkommazahlen, der Lochstreifen enthielt jeweils eine Rechenoperation und eine Speicheradresse.

Auf Zuse geht auch die erste höhere Programmiersprache Plankalkül zurück. Damit lassen sich Probleme maschinenunabhängig formulieren und später in eine maschinenlesbare Form überführen.

Programme im Arbeitsspeicher Der EDVAC-Rechner, der auf einem Entwurf von John von Neumann aus dem Jahre 1945 basiert, hatte einen Quecksilber-Verzögerungsspeicher für 1024 Fest- oder Gleitkommazahlen mit jeweils 44 Bit. Jede Speicherzelle konnte statt einer Zahl auch einen Befehl aufnehmen. Bei diesem Rechnerkonzept war es möglich, die Befehle eines Computerprogramms vor der Ausführung zuerst in den Arbeitsspeicher zu übertragen. Das ist heute noch üblich. EDVAC wurde jedoch erst im Jahr 1951 teilweise fertiggestellt. Der Demonstrationsrechner Manchester SSE und der auf dem EDVAC aufbauende EDSAC-Rechner hatten schon vorher Programme aus dem Arbeitsspeicher ausgeführt.

Höhere Programmiersprachen und Compiler Ende der 1950er-Jahre wurden Computer so leistungsfähig, dass spezielle Programme, Compiler genannt, Quelltexte in höheren Programmiersprachen automatisch in Maschinenbefehle, also ausführbare Programme, übersetzen konnten. Ausführbare Programme können dann, wie beim EDVAC, in den Speicher geladen und abgearbeitet werden.

Mit Fortran, COBOL, ALGOL und LISP entstanden in den späten 1950er-Jahren die ersten standardisierten höheren Programmiersprachen. Programme in diesen Sprachen laufen, durch einen entsprechenden Compiler übersetzt, auf unterschiedlichen Rechnern. Sie können teilweise auch noch auf modernen Computern eingesetzt werden.

Vom Algorithmus zum Programm Berechnung des größten gemeinsamen Teilers Es soll ein Programm zur Bestimmung des größten gemeinsamen Teilers (ggT) zweier Zahlen erstellt werden. Zunächst muss ein geeigneter Algorithmus gefunden werden.

Der Euklidische Algorithmus, der bereits um 300 v. Chr. beschrieben wurde, ermittelt den größten gemeinsamen Teiler (ggT) zweier natürlicher Zahlen a und b:

Sei a die größere der beiden Zahlen a und b.Wenn a kleiner als b ist, dann vertausche die Zahlen. Setze a auf den Wert a - b. Wenn a und b ungleich sind, dann fahre mit Schritt 1 fort.Wenn a und b gleich sind, dann ist der Algorithmus beendet.Diese Zahl ist der größte gemeinsame Teiler.