Einführung in die Programmierung (Kapitel 1, 2, 3)

Programmiersprachen - Gängige Hoch- und Skriptsprachen im Vergleich

2.1. Was soll ich lernen? Womit soll ich beginnen?

Dieses Kapitel soll eine Frage beantworten, die von Anfängern häufig gestellt wird:
Was - welche Programmiersprache - soll ich lernen? Womit soll ich anfangen?
Natürlich gibt es auf diese Frage keine eindeutige Antwort. Zweck dieses Kapitels ist es, eine Orientierungshilfe zu bieten. Die schlussendliche Entscheidung kann nur jeder selbst treffen.

Um zu zeigen, wie groß die Auswahl ist, werfen Sie kurz einen Blick in die Kategorie "Programmiersprache" auf Wikipedia: Kategorie:Programmiersprache (Wikipedia). Dort finden sich 240 Einträge (Stand: 31. Dezember 2008). Nicht alles ist eine Programmiersprache davon, die meisten aber sehr wohl. Manche bekannten Sprachen (insb. Skriptsprachen wie PHP und JavaScript) fehlen sogar noch, bzw. sind nur anderen Kategorien auf Wikipedia zugeordnet. Also längst keine vollständige Auflistung. Und natürlich sind nur solche genannt, zu denen schon einmal jemand einen Artikel geschrieben hat. Daneben existieren vermutlich noch hunderte bis tausende weitere Programmiersprachen, z.B. Eigenentwicklungen von Leuten mit zuviel Freizeit. ;-)

Tatsächlich kann jeder - die nötigen Kenntnisse vorausgesetzt - seine eigene Sprache samt Compiler entwickeln. Der "Pool" der Programmiersprachen lässt sich zum Glück auf eine - ich schätze - zweistellige Anzahl an Sprachen mit Relevanz und wirtschaftlicher Bedeutung reduzieren.

Immer noch zu viele, um sie hier zu nennen oder gar zu beschreiben. Das will ich mir bei Sprachen, mit denen ich keine persönlichen Erfahrungen gesammelt habe, auch gar nicht anmaßen. Dieses Kapitel soll als Auswahlhilfe zwischen den auf Tutorials.at veröffentlichten Tutorials dienen, aber darüber hinaus auch noch einige weitere Sprachen von Bedeutung erklären und beschreiben.

2.2. C, eine imperative Hochsprache

C hat unter den Hochsprachen besondere Bedeutung. C-Compiler sind für viele Plattformen (= Betriebssysteme) verfügbar. Ein Quelltext, der unter Windows geschrieben wurde, lässt sich demnach auch auf vielen anderen Plattformen compilieren und ausführen. Vorher ist evtl. eine Portierung notwendig, das gilt besonders dann, wenn Betriebssystem-spezifische Bibliotheken (libraries) verwendet wurden. Eine Portierung ist eine Veränderung des Quelltextes, sodass er auch auf einer anderen Plattform als der Entwicklungsplattform lauffähig ist. C eignet sich besonders zur System- und hardwarenahen Programmierung, aber auch zur Anwendungsentwicklung. Zahlreiche Betriebssysteme (Kerne) sind in C geschrieben, z.B. der Linux-Kernel.

C-Quellcode wirkt relativ kompakt und übersichtlich. Der vielleicht wichtigste Grund, mit C zu beginnen, ist aber, dass sehr viele wichtige Sprachen auf C aufbauen, C-Syntax (die Syntax ist quasi die "Grammatik" einer Programmiersprache) übernommen haben oder an C anlehnen. C hatte Einfluss auf viele Sprachen: (u.a.)

  • C++
  • C#
  • Java
  • JavaScript
  • Perl
  • PHP

Meiner persönlichen Meinung nach kann es nicht schaden, C zu lernen. Alleine schon wegen den darauf aufbauenden anderen Sprachen, mit denen Sie wahrscheinlich auch einmal in Berührung kommen.

Wie in der Überschrift genannt, zählt C zu den imperativen Sprachen. Imperative Programmierung (von lat. imperare = befehlen) ist ein sog. Programmierparadigma. Ein Paradigma ist ein grundlegendes Prinzip, hier das der Programmiersprache/-technik. Ein Programm besteht in der Imperativen Programmierung aus einer Folge von Befehlen, die der Rechner in in einer definierten Reihenfolge abarbeitet. Auf die Abarbeitung der Befehle kann mit Sprungbefehlen Einfluss genommen werden (Kontrollflussparadigma). In C gibt es dafür Schleifen und bedingte Anweisungen (if), beides Kontrollflusselemente. In anderen Programmiersprachen (BASIC, s.u.) wird häufig auch GOTO für Sprünge verwendet (umstritten). Zur Speicherung von Zwischenergebnissen werden Variablen (eine Variable ist in der Programmierung ein - zugewiesener - Bereich im Arbeitsspeicher, der verwendet werden kann) verwendet.

Nach diesen Definitionen wird es Zeit für ein Beispiel. Bücher und Tutorials zu Programmierthemen beginnen meistens mit einem Beispiel, das den Text hello, world! (oder Hallo Welt! in manchen dt. Büchern) auf dem Bildschirm ausgibt. Das hat Tradition, und geht auf ein Memorandum von C-Mitentwickler Brian W. Kernighan zurück (Kernighan, "Programming in C", 1974).

Hello, world! in C:

#include <stdio.h>
 
int main()
{
   printf("hello, world!");
   return 0;
}

2.3. C++, Weiterentwicklung von C

Eng mit C verwandt und mit diesem oft auch in Verbindung (C/C++) genannt, ist die höhere Programmiersprache C++. C++ ist zu C rückwärtskompatibel, d.h. dass Code, der in C geschrieben wurde, auch mit einem C++-Compiler übersetzt werden kann. C++ unterstützt - wohl der wichtigste Faktor - Objektorientierte Programmierung (auch ein Programmierparadigma).

In imperativen Programmiersprachen (u.a. C, siehe oben) steht der Ablauf im Vordergrund. Also: Welche Schritte sind durchzuführen? Die wesentliche Frage ist das Wie?. Die Objektorientierte Programmierung (OOP) versucht, der realen Welt und dem menschlichen Denken näher zu kommen. Kernstück ist dabei das sog. Objekt, das ein Ding der realen Welt abbildet. Ein Problem der realen Welt wird in einem Programm modelliert. Jedes Objekt hat dabei Eigenschaften und Verhaltensweisen. Nehmen wir Handy als Beispiel (in Programmierbüchern gibt es häufig Tierbeispiele ;-) ). Eigenschaften des Objekts sind etwa Form, Farbe, Größe oder techn. Parameter wie Speichergröße und Taktfrequenz. Verhaltensweisen sind z.B. Einschalten, Ausschalten und Anrufen. Ein ganz wesentlicher Punkt ist dabei, dass ein Objekt Daten und die Prozeduren, die diese Daten bearbeiten/verarbeiten, in sich zusammenfasst (Daten-Kapselung). Interne Abläufe (Wie werden Daten verarbeitet? Implementierungsdetails) sind von außen nicht erkennbar (werden verborgen), stattdessen bedient man sich sog. Schnittstellen.

Das soll nur ein kurzer Anriss des Prinzips der OOP sein. Zur wesentlichen Frage: Kann ich als Anfänger mit C++ beginnen? Für wen ist C++ der richtige Einstieg? Es kommt drauf an! Besonders interessant ist C++ für jene, die vor allem Spieleprogrammierung im Sinn haben. Stellen Sie sich allerdings auf eine lange Lernphase, viele theoretische Konzepte und eine "Flut" von Sprachelementen (C++ ist sehr umfangreich) ein. Wenn vor allem ein schnelles Ergebnis (Ich will ... dieses und jenes ... schreiben) im Vordergrund steht, rate ich eher zu anderen Sprachen als Einstieg (z.B. PHP).

Hello, world! in C++:

#include <iostream>
 
using namespace std;
 
int main()
{
   cout << "hello, world!";
   return 0;
}

2.4. Java

Java hat sich in der letzten Jahren sehr stark verbreitet. Im schulischen und universitären Bereich wird als erste Sprache meist Java gelehrt. Java-Programme sind plattformunabhängig, d.h. dass sie - normalerweise - ohne Portierung unter jedem anderen Betriebssystem laufen, für die ein Java-Interpreter (die Java Virtual Machine, Java-VM) verfügbar ist. Java-Quellcode wird im Gegensatz zu anderen Hochsprachen nicht direkt in Maschinencode übersetzt (obwohl auch das möglich ist). Stattdessen erstellt der Java-Compiler einen "Zwischencode", den sog. Bytecode. Der Bytecode wird dann zur Laufzeit interpretiert.

Java gehört zu den objektorientierten Programmiersprachen und hat starke syntaktische Ähnlichkeit mit C++ (s.o.). Java verzichtet aber auf einige low level-Sprachelemente, insb. auf Zeiger (ein Zeiger zeigt auf einen bestimmten Bereich im Arbeitsspeicher). Java eignet sich nicht zur hardwarenahen Programmierung.

Mit Java ist es auch möglich, Anwendungen zu schreiben, die im Webbrowser laufen (Java-Applets). Java-Applets werden am Rechner des Website-Besuchers (Client) ausgeführt. Nachdem das Applet vom Webserver geladen wurde, ist keine Internetverbindung mehr nötig. Damit Java-Applets ausgeführt werden können, wird am Client-Rechner die Java-VM benötigt, bzw. ein entsprechendes Browser-Plugin. Applets wurden in den letzten Jahren aber eher von anderen Technologien verdrängt. Was früher mit einem Java-Applet realisiert wurde, wird heute meist mit Flash oder JavaScript gemacht. (Anmerkung: JavaScript hat abgesehen vom Namen und einer ebenfalls C-ähnlichen Syntax mit Java nicht viel gemeinsam!)

Hello, world! in Java:

class HelloWorld
{  
   public static void main(String args[])
   {
      System.out.println("hello, world!");
   }
}

Aufgrund der starken Verbreitung, wirtschaftlichen Bedeutung, syntaktischen Ähnlichkeit zu C und den Verzicht auf einige Sprachelemente (verglichen mit C++), eignet sich Java auch gut für Programmieranfänger. Java setzt das Konzept der Objektorientierten Programmierung sehr konsequent um (fast alles ist ein Objekt in Java). Das hilft, sich an die Denkweise der OOP zu gewöhnen.

2.5. PHP

PHP, Kurzform für PHP Hypertext Preprocessor (eine rekursive Abkürzung, d.h. die Abkürzung "PHP" kommt noch einmal in der ausgeschriebenen Form vor; das wiederholt sich immer wieder und endet nie), gehört zu den serverseitigen Skriptsprachen. Das heißt, dass PHP-Quelltext zur Laufzeit interpretiert wird.

PHP wird meistens zur Erstellung von dynamischen Webseiten verwendet. Gehen wir einen Schritt und ein paar Jahre (zeitlich) zurück. Sie erstellen eine statische Webseite, das heißt, die Seite wird 1:1 so wie Sie sie auf Ihrem PC geschrieben und gestaltet haben, später im Web erscheinen. Dabei gibt es keine veränderlichen Elemente, der Text etwa, der angezeigt wird, bleibt immer gleich (statisch). Nehmen wir zum Vergleich ein Diskussionsforum. Im Vorhinein ist nicht klar, welche Texte später angezeigt werden. Es muss ja erst über ein Thema diskutiert werden, Besucher müssen die Texte noch schreiben, können diese wieder verändern und einiges mehr. Das Design und die Funktionen des Forums haben Sie im Vorhinein festgelegt (programmiert). Ruft nun jemand das Forum auf, wird Ihr PHP-Skript ausgeführt: Es stellt eine Verbindung zur Datenbank her (die speichert die Texte, die Benutzerdaten usw.), liest die benötigten Datensätze aus und erstellt die Webseite (dynamisch!), die der Benutzer später angezeigt bekommt. Damit sind wir schon beim wichtigsten Punkt: Das PHP-Skript erzeugt die Webseite!

Der Reihe nach:

  1. Der Benutzer ruft eine Seite im Internet auf (z.B. http://www.example.com/index.php), der Browser fordert darauf die entsprechende Datei (index.php) vom Server www.example.com an.
  2. Der Webserver verarbeitet die Anforderung (HTTP-Request) und liest die Datei index.php von der Festplatte. Der Webserver wurde vorher so konfiguriert, dass er Dateien mit bestimmter Endung (hier .php) nicht direkt an den Browser schickt, sondern zuerst an den PHP-Interpreter weiterleitet. Der Server übergibt die Datei an den PHP-Interpreter.
  3. Der PHP-Interpreter führt das Skript aus, erstellt die (X)HTML-Seite (es kann übrigens auch alles andere - ein Bild, ein PDF, ... - erzeugt werden) und schickt das Ergebnis zurück an den Webserver.
  4. Der Server leitet das Ergebnis (und nur das Ergebnis, den Quellcode werden Sie bei einem korrekt konfigurierten und fehlerfreien Skript nie zu sehen bekommen) an den Rechner des Benutzers weiter.
  5. Dessen Browser zeigt daraufhin die soeben dynamisch generierte (X)HTML-Seite an.

Was das PHP-Skript im Hintergrund macht, bleibt dem Besucher verborgen. Ob Sie auf eine Datenbank zugreifen, Dateien auslesen, Berechnungen durchführen, hier bestehen zahlreiche Möglichkeiten. PHP beschränkt sich nicht auf die Erstellung von dynamischen Websites. PHP können Sie wie eine normale Skriptsprache einsetzen, ja selbst Programme mit grafischer Benutzeroberfläche sind möglich (PHP-GTK).

PHP hat eine C-ähnliche Syntax. PHP wird häufig zusammen mit MySQL - einem relationalen Datenbankmanagementsystem - eingesetzt. Wird PHP dann unter Linux und Apache als Webserver eingesetzt, spricht man von einem LAMP-System (Linux-Apache-MySQL-PHP), ähnliches gilt für Windows und Mac (WAMP, MAMP). Aufgrund zahlreicher Vereinfachungen und der leichten Erlernbarkeit eignet sich PHP sehr gut als Einstiegssprache für Anfänger.

Hello, world! in PHP:

<?php
   echo "hello, world!";
?>

2.6. Pascal, Delphi (Kylix, Lazarus)

Pascal wurde ursprünglich als Lehrsprache entwickelt, um Schülern/Studenten die Strukturierte Programmierung (ein Programmierparadigma) beizubringen (Wikipedia, engl.). Damit lässt sich die immer wirtschaftlich geringe Bedeutung erklären. Bedeutsamer wurde Pascal erst durch Turbo Pascal, einem Compiler der Firma Borland, der eine monopolartige Stellung unter den Pascal-Compilern erreichte und Turbo Pascal zum Quasi-Standard unter den Pascal-Dialekten erhob.

Ich habe 2001, als ich die erste Version dieses Dokuments geschrieben habe, Pascal als geeignete - ja fast ideale - Einstiegssprache bezeichnet. Und das, obwohl Pascal auch damals kaum noch Bedeutung hatte. Heute muss ich diese Empfehlung abändern. Pascal lernen? Nur mehr wenn es sein muss (meiner Meinung nach). So kommt es noch hin und wieder vor, dass Pascal an Schulen unterrichtet wird.

Hello, world! in Pascal:

PROGRAM HelloWorld;
USES Crt;
BEGIN
   Write('hello, world!');
END.

Pascal hat zahlreiche Erweiterungen erfahren. So wurde von Borland, auf Pascal aufbauend, die Programmiersprache Object Pascal entwickelt. Auf Object Pascal basiert die Entwicklungsumgebung Delphi, mit der sich grafische Windows-Programme erstellen lassen. Für Linux gab es die Entwicklungsumgebung Kylix (an der die Entwicklung bereits eingestellt wurde).

Für Pascal-Interessierte dürfte die Entwicklungsumgebung Lazarus (Download) ein besonderer Tipp sein. Lazarus basiert auf dem Free Pascal Compiler und ist kostenlos verfügbar (freie Software; wird unter der GLP und LGPL verbreitet). Dabei orientiert sich Lazarus an Borland Delphi (wenn auch kein Klon). Das Besondere: Programme, die mit Lazarus entwickelt werden, lassen sich unter allen unterstützten Plattformen - Windows, Linux, FreeBSD und Mac OS X - compilieren ("write once, compile anywhere" laut den Entwicklern).

Im Pascal-Tutorial wird ebenfalls Lazarus (bzw. Free Pascal) verwendet, allerdings, um textbasierte Programme zu schreiben.

2.7. BASIC

BASIC, Abkürzung für Beginner's All-purpose Symbolic Instruction Code, ist eine imperative höhere Programmiersprache, die heute in ihrer "Ur-Form" nicht mehr eingesetzt wird. BASIC hatte allerdings Einfluss auf zahlreiche andere Sprachen, wobei Microsoft einen entscheidenen Beitrag dazu geleistet hat. Auf BASIC basieren u.a. Visual Basic, mit dem sich Windows-Programme erstellen lassen, Visual Basic for Applications (VBA), Skriptsprache für Microsoft Office und VBScript. Mit VBScript lassen sich clientseitige und serverseitige Skripte erstellen. Clientseitige Skripte laufen im Webbrowser (ohne Plugin nur im Internet Explorer), das Anwendungsgebiet ist vergleichbar mit JavaScript. Serverseitig können mit VBScript dynamische Webseiten erzeugt werden (ähnlich zu PHP).

BASIC-Kenntnisse, bzw. eher Kenntnisse der Nachfolgetechnologien, sind heute vor allem für Windows-Entwickler von Bedeutung. Mein BASIC-Tutorial ist aber auch für jene interessant, die "nostalgische" Software, z.B. QBasic oder einige Textadventures ausprobieren wollen. :-)
Programmier-Einsteigern rate ich aber zu anderen Sprachen, etwa C/C++, PHP oder Java.

Hello, world! in BASIC:

PRINT "hello, world!"

Heute erinnert man sich an BASIC vor allem in negativer Hinsicht, etwa in Zusammenhang mit sog. Spaghetti-Code. Darunter versteht man ein Programm, dessen Struktur und Ablauf komplex und schwer nachzuvollziehen sind. Grund ist, dass in vielen - schlechten - BASIC-Programmen häufig GOTO-Befehle verwendet wurden. GOTO dient dazu, um zu einer anderen Programmierzeile zu springen. Ähnlich wie Sie ein Buch von oben nach unten lesen (bzw. von links nach rechts), wird auch ein Programm zeilenweise, von der ersten bis zur letzten Zeile abgearbeitet. Springen Sie nun aber in Zeile 50 angelangt, wieder zurück zu Zeile 10, dann - wenn eine Bedingung erfüllt ist - zu Zeile 95 und wieder zurück zu 15, wird der Programmablauf irgendwann nicht mehr nachvollziehbar. :-)

Vorheriges Kapitel Nächstes Kapitel