fotolia_50889027.jpg

© lassedesignen, fotolia.com

print "Hallo Welt"

Programmieren für Einsteiger

09.07.2013
Programmierer haben Linux und die zahlreichen Linux-Anwendungen entwickelt. Auch für Neulinge auf diesem Gebiet bietet Linux zahlreiche Optionen – wie Sie hier einen Einstieg finden können, verraten die Artikel unserer aktuellen Titelstrecke.

Wenn Sie schon über 40 sind, haben Sie vielleicht Ihre ersten Computerschritte auf einem Homecomputer wie dem populären Commodore C64, einem Schneider CPC oder einem Atari-Gerät gemacht. Was diese Rechner von modernen PCs unterscheidet, ist (neben der uralten Hardware mit wenig Arbeitsspeicher und Kassetten- oder Diskettenlaufwerken statt Festplatten) vor allem die fest integrierte Programmiersprache BASIC [1]. Da man mit den Homecomputern nicht viel anfangen konnte außer Spiele von Datenträgern nachzuladen, haben sich viele Besitzer dieser Kisten auch an der Programmierung in BASIC versucht. Gehören Sie zu dieser Gruppe, dann sagen Ihnen vielleicht die Zeilen

10 PRINT "Hallo Welt"
20 GOTO 10

auf Anhieb etwas: Sie stellen ein minimales BASIC-Programm dar, das in einer Endlosschleife immer wieder "Hallo Welt" auf den Bildschirm schreibt, wenn man diese Zeilen und dann den Befehl RUN eingibt (Abbildung 1).

Abbildung 1: Ein Programm auf dem C64 gibt fünfmal "HALLO EASYLINUX" aus – das ist schon komplexer als das erste Beispiel.

Sind Sie unter 35, ist es wahrscheinlicher, dass Sie die ersten Erfahrungen bereits mit einem PC gesammelt haben; mit MS-DOS oder einer Windows-Version. Auf diesen Rechnern wurde anfangs auch noch ein BASIC-Interpreter mitgeliefert, aber der Computer startete nicht im BASIC-Modus.

Programmieren lernen

Mit unseren Schwerpunktartikeln wollen wir ein wenig von der Begeisterung vermitteln, die Sie empfinden können, wenn Sie Programme nicht nur verwenden, sondern selbst erstellen. Es gibt viele Gründe, eigene Programme oder Skripte zu schreiben, z. B. die Möglichkeit, regelmäßig wiederkehrende Aufgaben damit zu automatisieren und zu erleichtern, aber noch wichtiger als den praktischen Nutzen finden wir den Spaßfaktor: Programmieren hat oft etwas von "Frickelei", wenn das eigene Programm nicht auf Anhieb tut, was es soll, und wenn es schließlich doch gelingt, verschafft das dem Entwickler ein Erfolgserlebnis – wie bei Künstlern, die ein neues Werk geschaffen haben. Nicht umsonst heißt ein berühmtes Lehrbuch in der Informatik "The Art of Computer Programming" (Die Kunst der Computerprogrammierung) [2] (Abbildung 2). Dessen Lektüre würden wir zwar nur (angehenden) Informatikern empfehlen, aber der Titel drückt schön aus, dass Programmieren eine Kunstform ist, die man kultivieren kann und in der man sich durch regelmäßiges Üben verbessert und zum Meister wird.

Abbildung 2: "The Art of Computer Programming" ist ein mehrbändiger Wälzer, den Donald Knuth als Lehrbuch für Informatikstudenten geschrieben hat.

Doch zunächst geht es an die Grundlagen: Was bedeutet Programmieren eigentlich? Die Kernidee ist, dass ein Programm dem Computer sagt, was er tun soll. Als Programmierer legen Sie das selbst fest. Dabei können Sie sich Programme wie Kochrezepte oder auch die aus EasyLinux bekannten Schritt-für-Schritt-Anleitungen vorstellen: In der einfachsten Form eines Programms legen Sie nur eine Reihenfolge fest, in welcher der Computer bestimmte Schritte bearbeiten soll. Etwas komplizierter wird es, wenn Sie noch so genannte Schleifen ("tu dies solange, bis ein bestimmtes Ziel erreicht ist") und Fallunterscheidungen ("wenn der Wert kleiner als 100 ist, dann verdopple ihn – anderenfalls setze ihn auf 1") einbauen: Damit kann das Programm auf unterschiedliche Situationen geeignet reagieren.

Die Prinzipien, die für das Programmieren gelten, sind nicht sonderlich schwer zu verstehen. Dass sich nicht jeder PC-Besitzer damit beschäftigt, liegt unter anderem daran, dass es zahlreiche komplett unterschiedliche Programmiersprachen gibt: So wie Sie Englisch und Französisch erst lernen müssen, um mit einem Engländer oder Franzosen zu sprechen, so müssen Sie sich auch zunächst in den "Wortschatz" und die "Grammatik" einer Programmiersprache einarbeiten, damit der Computer versteht, was Sie von ihm wollen. Bei ersten Versuchen zeigt sich dann die recht begrenzte Intelligenz der Technik: Schon leichte Fehler bei der Wortwahl bemängelt das System als "Syntaxfehler" und verweigert die Zusammenarbeit. Es braucht also für die ersten Schritte etwas mehr Sorgfalt als beim Englisch- oder Französischsprechen, wo Ihr Gesprächspartner mit Nachsicht reagiert, wenn Sie ein unregelmäßiges Verb falsch verwenden.

Programmier-Grundlagen

Alle Programmiersprachen verwenden spezielle Befehle, mit denen Sie festlegen, was passieren soll. Im Beispiel am Anfang des Artikels tauchten z. B. die BASIC-Befehle PRINT und GOTO auf: Der PRINT-Befehl sorgt dafür, dass der Rechner Text ausgibt, und der GOTO-Befehl fordert dazu auf, die Programmausführung an einer anderen Stelle fortzusetzen – das ist vergleichbar mit einer Aussage wie "Kehren Sie zurück zu Schritt 3" in einer längeren Schritt-für-Schritt-Anleitung, bei der einige Aufgabenteile mehrfach zu erledigen sind.

Wenn Sie mehrere Befehle zu einem Programm zusammensetzen, werden diese später in derselben Reihenfolge ausgeführt, in der sie im Programm erscheinen. Schreiben Sie z. B.

PRINT "HALLO"
PRINT "WELT"

dann erzeugen Sie damit die Ausgabe "HALLO WELT" (und nicht etwa "WELT HALLO"). Programmierer nennen so etwas eine Sequenz (Abfolge, Reihenfolge). Viele Shell-Skripte unter Linux bestehen aus solchen (einfachen) Sequenzen, sie bündeln also mehrere Befehle in einem Skript und ersparen dem Anwender damit, die enthaltenen Kommandos einzeln (nacheinander) einzugeben.

Fallunterscheidung

Doch allein mit Sequenzen ist nicht viel Land zu gewinnen. Damit Programme wirklich nützlich sind, kommen weitere Elemente ins Spiel, darunter die Fallunterscheidung (Abbildung 3) und die Schleife. Der folgende BASIC-ähnliche Beispiel-Code sorgt dafür, dass ein interaktives Programm erst das Alter des Anwenders abfragt und dann entscheidet, ob es duzt oder siezt:

Abbildung 3: Bei einer Fallunterscheidung geht das Programm unterschiedliche Wege – abhängig davon, ob eine bestimmte Bedingung erfüllt ist oder nicht.

© lightwise, 123RF

PRINT "Bitte Alter eingeben:"
INPUT alter
IF alter < 18 THEN
  PRINT "Wie heißt Du?"
ELSE
  PRINT "Wie heißen Sie?"
END IF
INPUT name
PRINT "Hallo ", name

Hier sind alter und name so genannte Variablen: Das Wort kommt von "variabel" (veränderlich), und Sie können solche Variablen in Programmen benutzen, wenn Sie flexibel mit unterschiedlichen Werten umgehen wollen. Im Beispiel liest das Kommando INPUT einen Wert über die Tastatur ein und legt ihn dann in der angegebenen Variable ab. Später greifen Sie durch Nennen des Variablennamens erneut auf den Inhalt zu.

Der Schlüssel zum Erfolg liegt hier in den Befehlen IF (wenn, falls), THEN (dann) und ELSE (anderenfalls): Wenn das obige Programm läuft und der Anwender die Frage nach dem Alter mit einer Zahl beantwortet, die kleiner als 18 ist, dann ist der Test alter < 18 "wahr", und das Programm führt die Befehle aus, die zwischen THEN und ELSE stehen. Wird hingegen ein Wert eingegeben, der größer oder gleich 18 ist, kommt stattdessen der Block zwischen ELSE und END IF an die Reihe. Entsprechend stellt das Programm die Frage nach dem Namen in der Du- oder Sie-Form.

Diese Möglichkeit der Fallunterscheidung bietet jede Programmiersprache, nur sehen die nötigen Befehle (hier IF, THEN, ELSE und END IF) in jeder Sprache ein wenig anders aus. Das Prinzip müssen Sie aber nur einmal verstehen, dann können Sie es in allen Programmiersprachen nutzen, indem Sie einfach nachschlagen, wie man dort eine Fallunterscheidung formuliert.

Schleifen

Genauso läuft es mit den Schleifen: Sie dienen dazu, bestimmte Befehle mehrfach auszuführen und mit dieser Wiederholung abzubrechen, wenn ein bestimmer Zustand erreicht wurde. Eine simple Passwort-Abfrage, bei der das Programm erst weiter arbeitet, wenn der Anwender das korrekte Passwort eingegeben hat, könnte (wieder im BASIC-Dialekt) wie folgt aussehen:

passwort = ""
WHILE passwort <> "secret"
  PRINT "Bitte Passwort eingeben: "
  INPUT passwort
END WHILE
PRINT "Korrektes Passwort, danke."
...

Hier steht <> für den Test auf Ungleichheit. Der Code bewirkt, dass immer wieder die Aufforderung "Bitte Passwort eingeben" erscheint und das Programm (mit INPUT) Text einliest. Das geht solange weiter, bis der Anwender das gesuchte Passwort ("secret") eingibt. Der zu wiederholende Code-Block steht dabei zwischen den Schlüsselworten WHILE (solange; inklusive der zu testenden Bedingung) und END WHILE (Ende der While-Schleife). Die Schleife testet in diesem Beispiel die Bedingung immer am Anfang, es gibt aber auch Schleifen, die erst am Ende eines Durchgangs testen (also die Befehle im Inneren der Schleife mindestens einmal ausführen). In BASIC sieht die alternative Schleife wie folgt aus:

REPEAT
  PRINT "Bitte Passwort eingeben: "
  INPUT passwort
UNTIL passwort = "secret"

mit den Befehlen REPEAT (wiederhole) und UNTIL (bis; solange bis) oder auch

DO
  PRINT "Bitte Passwort eingeben: "
  INPUT passwort
WHILE passwort <> "secret"

mit den Befehlen DO (tue das folgende) und WHILE (solange). Egal, welche konkrete Syntax nötig ist – Sie erkennen diese zweite Variante einer Schleife daran, dass der Test auf Wiederholung der Schleife hier stets am Ende steht. Ist Ihnen aufgefallen, dass das obere Beispiel auf Gleichheit testet, während das untere auf Ungleichheit testet? Wie in der normalen Sprache gibt es auch beim Programmieren oft mehrere Möglichkeiten, um dieselbe Sache auszudrücken. Im Deutschen entsprechen die beiden Beispielprogramme den Sätzen "Frage das Passwort ab, bis der Benutzer 'secret' eingibt" und "Frage das Passwort ab, solange der Benutzer nicht 'secret' eingibt".

Schließlich gibt es in den meisten Sprachen noch die so genannte Zählschleife: Sie verwendet eine Variable, weist ihr nacheinander mehrere Werte zu und führt für jeden Wert die Befehle im Inneren der Schleife aus. Der folgende BASIC-Code gibt z. B. alle Zahlen zwischen 10 und 20 und deren Quadratzahlen (10*10, 11*11 usw.) aus:

FOR wert = 10 TO 20
  PRINT wert, "*", wert, "=" wert*wert
NEXT wert

Das Progamm erzeugt die Ausgabe im Kasten Quadratzahlen.

Quadratzahlen

10 * 10 = 100
11 * 11 = 121
12 * 12 = 144
13 * 13 = 169
14 * 14 = 196
15 * 15 = 225
16 * 16 = 256
17 * 17 = 289
18 * 18 = 324
19 * 19 = 361
20 * 20 = 400

Funktionen und Prozeduren

Das letzte Element, das für einfache Programme wichtig ist, ist die Zerlegung einer Aufgabe in Teilaufgaben. Die Idee dazu ist schnell erklärt, betrachten Sie dazu den folgenden Pseudo-Basic-Code:

PRINT "Berechne 3 + 4"
INPUT eingabe
summe = 3+4
IF eingabe = summe THEN
  PRINT "Richtig"
ELSE
  PRINT "Falsch"
END IF
PRINT "Berechne 5 + 2"
INPUT eingabe
summe = 5+2
IF eingabe = summe THEN
  PRINT "Richtig"
ELSE
  PRINT "Falsch"
END IF

(usw.) Was passiert hier? Das Programm stellt dem Anwender mehrere einfache Rechenaufgaben und überprüft das Ergebnis. Offensichtlich passiert dabei immer dasselbe, nur mit anderen Zahlen. Das geht auch einfacher:

PROCEDURE mathetest (x, y)
  PRINT "Berechne", x, "+", y
  INPUT eingabe
  summe = x+y
  IF eingabe = summe THEN
    PRINT "Richtig"
  ELSE
    PRINT "Falsch"
  END IF
END PROCEDURE
mathetest (3, 4)
mathetest (5, 2)

In diesem Programm haben wir alle einheitlichen Schritte in eine Prozedur gepackt (andere Programmiersprachen verwenden dafür den Begriff "Funktion"). Das, was sich ändern kann, definieren wir dabei als so genannte Parameter und vergeben dafür Parameternamen (x und y). Im eigentlichen Hauptprogramm legen wir fest, dass die Befehle aus der Prozedur mathetest zweimal ausgeführt werden – einmal mit x=3 und y=4 und im zweiten Durchlauf mit x=5 und y=2. Die Reihenfolge ist wichtig, x muss der erste Parameter sein, y der zweite (auch wenn das für dieses Beispiel der Summenberechnung egal ist).

Je öfter Sie eine solche Prozedur benutzen, desto mehr Platz sparen Sie beim Eingeben des Programms. Prozeduren (oder Funktionen) dürfen auch selbst weitere Prozeduren benutzen. Der Fachausdruck für das Benutzen einer Prozedur oder Funktion heißt "Aufruf": Programmierer sagen, sie rufen eine Prozedur auf.

Parameter können Sie innerhalb der Prozedur wie Variablen nutzen, im Beispielprogramm ist summe eine Variable, und x und y sind Parameter. Der Unterschied ist, dass die Variablen nicht mit einem bestimmten Wert vorbelegt sind, während die Parameter beim Aufruf einen Wert erhalten (eben den, den Sie im Aufrufbefehl angeben).

Für den Anfang genug

Wenn Sie die Prinzipien von Sequenz, Fallunterscheidung und Schleife verstanden haben, beherrschen Sie schon die wichtigsten Regeln der universellen Programmier-Grammatik – was jetzt noch fehlt, ist das Vokabular, um sinnvolle "Geschichten" (eben: längere Programme) erzählen zu können. Und dieses Vokabular verschaffen wir Ihnen in den folgenden Artikeln.

  • Los geht es mit "Makros in LibreOffice": Ab Seite 44 geben wir eine kurze Einführung in die Programmiersprache LibreOffice Basic, mit der Sie z. B. in Calc-Tabellen automatische Berechnungen erledigen können, die zu komplex sind, als dass eine einfache Calc-Formel ausreichen würde.
  • Für alle Benutzer, die gerne mit der Shell arbeiten, verrät der Artikel "Bash-Skripte" in dieser Ausgabe, wie Sie Shell-Befehle zu leistungsfähigen Shell-Programmen zusammensetzen.
  • Mehr zur Programmiersprache BASIC folgt im Artikel "TrueBasic": Hier stellen wir Ihnen die BASIC-Entwicklungsumgebung TrueBasic vor, mit der Sie BASIC-Programme schreiben können, die unter Linux, Windows und OS X laufen.
  • Die unter Linux am häufigsten zu findende Programmiersprache ist C; so ist unter anderem der Linux-Kernel selbst (überwiegend) in C geschrieben. Für eine Einführung in C (die Sie zum C-Programmier macht) bietet ein EasyLinux-Artikel nicht genug Platz, aber wir können Ihnen helfen, C-Quellcode-Dateien zumindest ansatzweise zu verstehen (Abbildung 4) und diese mit einem C-Compiler zu übersetzen – damit sind Sie dann in der Lage, Programme zu installieren, die nur im C-Quellcode erhältlich sind.
Abbildung 4: C-Programme sind für Programmiereinsteiger zunächst komplett unverständlich. Zum C-Entwickler können wir Sie nicht machen, aber ein paar Tipps zum Umgang mit C-Dateien helfen trotzdem.
  • Zum Abschluss gehen wir zurück in die 80er Jahre und stellen Emulatoren für Homecomputer vor, die Sie in BASIC programmieren können (ab Seite 58). Das hat keinen praktischen Nutzen, macht aber Spaß – wie hoffentlich auch unsere anderen Vorschläge für den Einstieg in die Programmierung.

Infos

[1] Wikipedia zu BASIC: http://de.wikipedia.org/wiki/BASIC

[2] Donald E. Knuth, "The Art of Computer Programming", http://de.wikipedia.org/wiki/The_Art_of_Computer_Programming

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Related content

Kommentare