Überblick über verschiedene Programmiersprachen
Wer Programmieren lernen will, der muss sich nicht nur für ein Projekt, sondern auch für eine passende Programmiersprache entscheiden. Obwohl man die Sprache während des Lernens natürlich jederzeit wechseln kann, sollte man sich vorerst auf eine Sprache konzentrieren, um die grundlegenden Konzepte des Programmierens besser zu verstehen. Je mehr Erfahrung man dann gesammelt hat, umso leichter wird schließlich der Wechsel zwischen den Sprachen fallen. Die Frage ist nur: Welche Sprache ist wann am besten geeignet?
Grundsätzliches zu Programmiersprachen
Programmiersprachen sind grundsätzlich einfach nur formale Sprachen, um Datenstrukturen und Algorithmen zu formulieren. Dementsprechend bestehen alle modernen Programmiersprachen aus den mehr oder weniger selben Grundbausteinen, nämlich Ein- und Ausgabe, Variablen, Funktionen beziehungsweise Methoden, Objekten, Befehlen, Operatoren wie + und – und Kontrollflusselementen, also Bausteinen, die steuern wie der Code am Ende ausgeführt wird. Zu den Kontrollflusselementen zählen If-Anweisungen (Entscheidungsblöcke) und For– oder While-Schleifen (Wiederholungsblöcke). Auch Kommentare werden in fast allen Sprachen zugelassen. Allein bei Wikipedia gibt es allerdings mehr als 350 verschiedene Programmiersprachen mit unterschiedlichem Funktionsumfang, Anwendungsgebieten und Sprachbesonderheiten. Nur eine Handvoll dieser Sprachen sind wiederum weit verbreitet oder für den Einstieg geeignet.
Unterschiede und Einteilung von Programmiersprachen
Die oberflächlichen Unterschiede zwischen den einzelnen Sprachen liegen vor allem in der Syntax, also dem Regelwerk, nach dem die Sprachbausteine zusammengesetzt werden. Weitere Aspekte, nach denen Programmiersprachen unterschieden werden können, sind das Paradigma beziehungsweise der Programmierstil, den die Programmiersprache vorgibt, die Generation, zu der sie gehört, ihr hauptsächliches Anwendungsgebiet, ihr Umfang und ihre Schwierigkeit.
Die Programmierparadigmen
Ein wichtiger Aspekt bei der Einteilung von Programmiersprachen ist das Programmiermuster, auch Paradigma genannt, das die Sprache vorgibt. Man unterscheidet zwischen dem imperativen und deklarativen/prädikativen Paradigma.
In einer imperativen Sprache beschreibt der Programmierer einen Weg,
nach dem der Algorithmus ein Problem löst. Dazu werden Variablen Werte
zugewiesen und Anweisungsblöcke definiert, also aufeinanderfolgende
Befehle formuliert. Zu diesem Paradigma gehören beispielsweise C, C++
und Java.
Das imperative Paradigma kann noch weiter in prozedurale und objektorientierte Programmierung unterteilt werden. Bei prozeduraler Programmierung wird
eine Teilaufgabe einfach durch verschiedene Subroutinen und Funktionen
gelöst, bei objektorientierter Programmierung hingegen liegt die Logik
beziehungsweise Funktionsweise auf Objekten, die über einen Zustand und
Methoden verfügen.
Jünger als
imperative Sprachen sind deklarative Sprachen, bei denen der Entwickler
nur noch den gewünschten Endzustand beschreibt. Er sagt, was passieren
soll, aber nicht wie. Ein gutes Beispiel dafür ist SQL, auch wenn es
sich hierbei nicht explizit um eine Programmiersprache, sondern
lediglich um eine Datenabfragesprache handelt. Der Entwickler gibt in
einem Statement (Befehl) an, welche Eigenschaften die
abgefragten Werte aus der Datenbank haben sollen. Wie genau die Werte
dann von dem Programm ausgewählt werden beziehungsweise wie der
Algorithmus vorgeht, muss der Entwickler nicht wissen.
Die Generationen der Programmiersprachen
Insgesamt gibt es fünf Generationen von Programmiersprachen, die aufeinander aufbauen. Zu der ersten Generation gehören die Maschinensprachen,
die binär oder hexadezimal kodiert und damit fast unleserlich, aber
damit der Code funktioniert unerlässlich sind. Die zweite Generation
sind Assemblersprachen, die etwas besser lesbar sind, indem sie
für die binären Befehle Kürzel verwenden. Die dritte Generation wird
dann für die heutige Entwicklung schon interessanter: Hier handelt es
sich um die imperativen beziehungsweise problemorientierten Sprachen.
Man bezeichnet sie auch als höhere Programmiersprachen, die
mehr oder weniger menschenlesbar sind, da sie sich an der englischen
Sprache orientieren. C++ und Java sind unter anderem Vertreter dieser
Generation. Die Sprachen müssen bevor sie ausgeführt werden können kompiliert, also in Maschinencode übersetzt, werden.
Die
vierte Generation sind anwendungsbezogene, nichtprozedurale Sprachen,
die eine höhere Abstraktionsebene besitzen. Hier muss wie eben anhand
der Sprache SQL erläutert nicht mehr das “wie” in Form der genauen
Schrittfolge des Algorithmus definiert werden, sondern nur noch das
“was”. Sprachen der fünften Generation schlussendlich erlauben das
Beschreiben ganzer Sachverhalte und werden vor allem im Bereich der
künstlichen Intelligenz eingesetzt.
Programmier- oder Skriptsprache?
Für manche Sprachen wie JavaScript oder Python wird auch das Wort Skriptsprache verwendet. Grundsätzlich handelt es sich bei einer Skriptsprache auch nur um eine Programmiersprache. Skriptsprachen sind allerdings eher für kleine Programme ausgelegt und verzichten daher auf bestimmte Sprachelemente, die für große Projekte oder komplexe Aufgaben benötigt werden. Ein Beispiel dafür ist die Typsicherheit von Variablen. In Skriptsprachen muss der Programmierer zumeist nicht angeben, ob sich hinter dem Wert ein String, eine Zahl oder sogar ein Objekt verbirgt. Das ist gut, um schnell Funktionalität zu implementieren oder einen Prototyp zu entwickeln, führt in großen Projekten aber potentiell zu Problemen, beispielsweise wenn das Programm ausgeführt wird und die Datentypen nicht mehr zueinander passen.
Compiler und Interpreter
Wie
bereits erwähnt muss Quellcode für den Computer übersetzt werden. Dafür
gibt es zwei Möglichkeiten: Entweder, der Code wird durch einen Interpreter während der Ausführung zur Laufzeit Zeile für Zeile übersetzt, oder der Code wird einmal durch einen Compiler in
eine ausführbare Datei umgewandelt. Skriptsprachen wie Python nutzen
oft lediglich einen Interpreter, während C und C++ Beispiele für reine
Compilersprachen sind.
Beide Varianten
haben ihre Vor- und Nachteile: Durch die direkte Übersetzung des Codes
durch den Interpreter ist das Programm auf unterschiedlichen
Rechenarchitekturen lauffähig. Ein Compiler muss das Programm für jede
Zielarchitektur und auch bei jeder Codeänderung komplett neu erstellen,
sodass der initiale Aufwand höher ist. Dafür sind Interpretersprachen
zur Laufzeit deutlich langsamer, weil sich wiederholende Programmteile
beispielsweise immer wieder neu übersetzt werden müssen, was bei einer
fertig kompilierten Datei nicht nötig ist.
Um
die Vor- und Nachteile von beiden Ansätzen zu verbinden, gibt es
JIT(Just-In-Time)-Kompilierung, die beispielsweise von Java oder C#
verwendet wird. Sich oft wiederholende Programmteile, die einen Großteil
der Geschwindigkeit ausmachen, werden vorab zu hardware-unabhängigem
Bytecode kompiliert. Ansonsten findet die Übersetzung allerdings zur
Laufzeit statt. Das ermöglicht es, die Portabilität und die
Debugging-Möglichkeiten eines Interpreters beizubehalten und
gleichzeitig die Performance zu steigern.
Die beliebtesten Programmiersprachen
Die meisten beliebten Sprachen, die in der Praxis in einem breiten Spektrum eingesetzt werden, folgen dem imperativen Paradigma. Das heißt der Entwickler gibt vor, was das Programm auf welche Weise tun soll. Moderne Sprachen sind zudem oft auf Objektorientierung ausgelegt, unterstützen aber auch prozedurale Programmierung, bei der Probleme ohne Objekte und Klassen gelöst werden.
Java
Java ist eine der bekanntesten und beliebtesten Programmiersprachen. Einer der größten Vorteile von Java ist sein großer Anwendungsspielraum. Die Sprache ist plattformunabhängig, das heißt, sie läuft auf den Betriebssystemen Linux und MacOS genauso wie unter Windows. Gleichzeitig unterstützt sie die Anbindung an diverse Datenbanken und bietet Werkzeuge für die mobile Entwicklung, Cloud Computing und Apps. Java ist eine imperative Sprache und in den Grundlagen recht einfach zu erlernen – wobei der Schwierigkeitsgrad durch die schiere Menge an Möglichkeiten natürlich beliebig erweitert werden kann. Vor allem, wer auch beruflich programmieren will, sollte sich mit Java auseinandersetzen, denn die Sprache kommt in vielen Unternehmen zum Einsatz.
Wer Java lernen möchte, dem sei dieses Buch empfohlen.
C
C ist eine er der ältesten Programmiersprachen und eine imperative, hardwarenahe Sprache. Sie ist die Grundlage für viele Betriebssysteme und ermöglicht es dementsprechend, Systemaufrufe direkt an das jeweilige Betriebssystem durchzuführen. C wird sowohl für System- als auch für Anwendungsentwicklung verwendet. Die Sprache ist eher schwer zu lernen, ermöglicht es dafür aber, ein tiefergehendes Verständnis für die Funktionsweise von Betriebssystemen und Computern zu entwickeln.
C++
C++ ist die Weiterentwicklung von C insbesondere im Hinblick auf objektorientierte Programmierung und wird für die hardwarenahe Entwicklung eingesetzt. Die Sprache wird dort verwendet, wo man selbst Speicher manipulieren möchte oder es auf die Performance ankommt – unter anderem bei Google, Facebook und Apple. Allerdings ist C++ sehr schwierig zu erlernen und für Anfänger, die erst einmal Grundkonzepte verstehen und anwenden wollen, eher ungeeignet.
Wer C++ lernen möchte, dem sei dieses Buch empfohlen.
C# (C-Sharp)
C# gehört in das .NET-Framework, eine Softwareplattform zur Anwendungsentwicklung von Microsoft, und ist daher für alles, was mit Windows zusammenhängt, relevant. Mittlerweile gibt es die Möglichkeit, C# plattformunabhängig auch für Linux und Apple-Geräte zu entwickeln. Die Programmiersprache ist imperativ und hat syntaktische Ähnlichkeiten zu Java und C. Zudem ist sie umfangreich und wird wie Java gerne in Unternehmen verwendet. Interessant ist C# auch für die Spieleentwicklung, da die Unity Engine, eine Laufzeit- und Entwicklungsumgebung für die Entwicklung von 3D-Computerspielen, mit C# arbeitet.
Wer C# lernen möchte, dem sei dieses Buch empfohlen.
VB (Visual Basic)
Die Sprache Visual Basic (VB) gibt es in zwei Varianten, die beide imperativ beziehungsweise objektorientiert sind und eine ähnliche Syntax besitzen, ansonsten aber nicht miteinander zusammenhängen: Visual Basic Classic und Visual Basic .NET. VB Classic beziehungsweise VB 6 und seine Ableger sind alte Programmiersprachen, deren Hauptvorteil in der im Vergleich zu C und C++ einfacheren Syntax bestand. Heutzutage hat die Sprache außer in Alt-Code wenig Relevanz. VB.NET hingegen ist eine Entwicklung von Microsoft, die ebenfalls im vorhin erwähnten .NET-Framework entwickelt wird. Während VB.NET moderner als VB Classic ist, besitzt die Sprache weniger Features als C#. Wer also mit dem .NET-Framework arbeiten will, sollte lieber direkt mit C# beginnen.
Python
Python ist wie bereits erwähnt eine Skriptsprache, die im Grunde universell einsetzbar ist. Die Sprache unterstützt prozedurale Programmierung mehr als die beiden eher objektorientierten Sprachen Java und C#. Deswegen wird Python gerne als Einstiegssprache und zur Erläuterung grundlegender Programmierkonzepte verwendet. Python verfügt über sehr viele externe Bibliotheken mit Funktionen, die in ein Programm eingebunden werden, können. Daher wird die Sprache auch im wissenschaftlichen Kontext oft eingesetzt. Etwas gewöhnungsbedürftig ist, dass die Sprache einige syntaktische Eigenheiten hat: Beispielswiese wird der Programmcode nicht wie in den meisten anderen Sprachen mit Klammern strukturiert, sondern mit Einrückungen.
Wer Python lernen möchte, dem sei dieses Buch empfohlen.
Programmiersprachen für Webanwendungen
Grundsätzlich ist es in den eben genannten Sprachen möglich, Webanwendungen zu schreiben. Wer sich allerdings wirklich auf Webprogrammierung spezialisieren möchte, sollte auch eine Sprache wählen, die dafür vorgesehen ist. Bei den beliebtesten Vertretern dafür handelt es sich um JavaScript, PHP und Ruby. Daneben ist Python ebenfalls eine Sprache, die sich großer Beliebtheit unter den Webentwicklern erfreut.
JavaScript
JavaScript ist aktuell DIE Sprache für Webentwicklung. Ein großer Vorteil von JavaScript ist, dass keine eigene Entwicklungsumgebung zum Kompilieren des Codes nötig ist, da JavaScript von jedem geläufigen Browser verstanden und ausgeführt werden kann. Im Prinzip kann man also einfach einen Texteditor öffnen und loslegen. Vor allem für kleine Projekte ist JavaScript durchaus geeignet. Das Setup für größere Projekte erfordert allerdings etwas mehr Erfahrung.
PHP
PHP ist mit JavaScript eine der wichtigsten Sprachen im Internet, obwohl JavaScript in den letzten Jahren klar auf dem Vormarsch ist. Einer der wichtigsten Unterschiede zwischen PHP und JavaScript ist, dass JavaScript im Browser, auf Seite des Clients (der die Anfragen stellt) ausgeführt wird, während PHP auf Seite des Servers (der die Anfragen bearbeitet) läuft.
Wer PHP lernen möchte, dem sei dieses Buch empfohlen.
Ruby
Die Sprache Ruby ist von Grund auf objektorientiert und kann wie auch Python für diverse Anwendungen genutzt werden. Die größte Bekanntheit hat die Sprache allerdings durch das Web-Framework Ruby on Rails. Ein Framework ist ein Programmgerüst, das die Erstellung bestimmter Softwaretypen wie in diesem Fall Webapplikationen vereinfacht. Ruby ist zwar nicht ganz so verbreitet wie andere Sprachen, aber vergleichsweise leicht zu erlernen und insbesondere durch das Web-Framework für Einsteiger geeignet.
Deklarative Programmiersprachen
Die bis hierher genannten Sprachen folgen alle dem imperativen Paradigma. Die meisten deklarativen Sprachen sind für Einsteiger eher schwierig zu erlernen, weil sie auf den ersten Blick nicht intuitiv erscheinen. Vertreter dieser Sprachen sind beispielsweise Haskell und Prolog. Beide Sprachen finden insbesondere in der Wissenschaft, wenn es um die exakte Abbildung mathematischer Algorithmen, logischer Sachverhalte und technischer Zusammenhänge geht, Anwendung.
Fazit
Es gibt diverse Programmiersprachen, die sich anhand ihres Umfangs, ihrer Syntax und ihres Programmiermusters beziehungsweise Paradigmas unterscheiden. Die meisten Sprachen, die für Einsteiger geeignet sich, orientieren sich am imperativen Paradigma, das heißt, der Entwickler gibt eine Anweisungsabfolge an, die durch das Programm sequentiell abgearbeitet wird. Java und C#, zwei der heute am häufigsten verwendeten Programmiersprachen, folgen diesem Paradigma. Ebenfalls gut für Einsteiger geeignet, ist die Skriptsprache Python, die sowohl prozedurale als auch objektorientierte Programmierung unterstützt und sehr vielseitig einsetzbar ist. Zu beachten ist allerdings, dass sich die Syntax, also das Regelwerk für die Formulierung von Befehlen, bei Python von anderen Sprachen unterscheidet. Eine etwas kompliziertere Sprache für den Einstieg ist C/C++. Der Vorteil von C/C++ ist, dass man auch hardwarenahe Programme schreiben kann und einen sehr guten Einstieg in den Aufbau und die Funktionsweise von Computern beziehungsweise Betriebssystemen erhält. Zuletzt erwähnt sei die Skriptsprache JavaScript. JavaScript ist wie Python vergleichsweise einfach zu lernen und vor allem interessant, wenn man in Richtung Webentwicklung gehen möchte.
Sehr gut geschrieben !