Einstieg ins Programmieren
Abstract
Viele (vornehmlich) jüngere Menschen kommen auf den Gedanken, in die faszinierende Welt des Programmierens einzusteigen. Dabei unterschätzen sie leider oftmals den Aufwand und die Anfangsschwierigkeiten, die es zu überwinden gilt. Im folgenden halte ich ein kleines Plädoyer für den Einstieg mit der Programmiersprache Python.
Einleitung
Aufgrund vieler Anfragen von Anfängern in div. Foren habe ich mich einmal aufgerafft, einen kleinen Artikel über den perfekten und schmerzlosen Einstieg ins Programmieren zu schreiben.
Hier gilt es zunächst sofort einige Dinge zurechtzurücken:
Den "perfekten" Einstieg gibt es vermutlich nicht, oder aber er ist vom individuellen Standpunkt und der persönlichen Erfahrung im Umgang mit einem Computersystem abhängig. Daher sind meine folgenden Thesen auch alle sehr persönlicher Natur und sollen keinen Absolutheitsanspruch haben. Ich hoffe aber dennoch, dass das der ein oder andere eben doch auf viele Einsteiger zutrifft und der ein oder andere vielleicht doch von seinem bisherigen Weg umschwenkt und meinen Empfehlungen folgt.
Früher (Ende 80er, Anfang 90er Jahre) war der Einstieg ins Programmieren sicherlich einfacher, da die damaligen Systeme nicht mit komfortabler Bedienoberfläche daherkamen und viele gebräuchliche Homecomputer sogar mittels einer Programmiersprache bedient wurden (z.B. Commodores legendärer C64, auf dem ich das Programmieren lernte).
Desweiteren gab es schlichtweg viele Tools einfach nicht oder man kannte diese nicht und nahm die "Mühe" auf sich, selber eine Lösung zu programmieren.
Heute im Zeitalter des 3D beschleunigten Desktops und der permanenten Präsenz und Verfügbarkeit des Internets sieht die Sache ganz anders aus. Per Suchmaschine findet man zu fast jedem Problem in vertretbarer Zeit eine Softwarelösung. Dank der Open Source Scene auch viele kostenlose Tools, weswegen der Drang zum "Selberprogrammieren" oftmals schlicht nicht vorhanden ist! Dies ist an sich nichts negatives, ganz im Gegenteil hätte ich mich seinerzeit über eine solche Vielfalt von Software schlicht gefreut. Dennoch geht dadurch eben viel Enthusiasmus verloren!
Andererseits hat man durch das Internet auch sofort Zugriff auf viele Tutorials, Referenzen und Beispielprogramme. Auch kann man in Newsgroups oder Foren relativ einfach und schnell Hilfe finden - auch das war früher anders! Wie viele Stunden saß ich verzweifelt vor meinem Monitor und hasste das einzelne Buch oder die Zeitschrift dafür, dass sie für mein Problem keine Lösung parat hatten!
Insofern haben sich die Einstiegsschwierigkeiten eher verschoben, denn Schwierigkeiten wird es bei einem so anspruchsvollem Thema wohl immer geben!
Sprachen
Sicherlich gibt es so viele Sprachen, dass es schwer fällt eine besondere Empfehlung auszusprechen! Desweiteren hängt natürlich vieles vom Umfeld ab. Kennt man beispielsweise jemanden, der sich mit einer Sprache gut auskennt so sollte man sicherlich in Erwägung ziehen, genau diese zu lernen, da man von Beginn an einen Ansprechpartner hat!
Meiner Meinung nach geht viel am Anfangsenthusiasmus verloren, wenn man sich zu viel mit Dingen beschäftigen muss, die direkt nichts mit dem Programmieren zu tun haben! Daher plädiere ich zum Einstieg für eine Scriptsprache, speziell für Python.
Wieso nicht C++ oder Java? Nun, dafür benötigen diese imho zu viel "Overhead". Bevor auch nur das berühmte
Hello World!
auf dem Bildschirm steht, muss man einiges tippen, was einem am Anfang sicherlich sinnlos erscheint oder mindestens einmal verwirrend wirkt!
Hierzu möchte ich gerne ein paar Beispiele geben, damit man nachvollziehen kann, was ich meine. Die folgenden Beispielprogramme sollen nichts weiter tun, als Hello World! auf dem Bildschirm auszugeben:
"Hello World" in C++
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
cout << "Hello World!" << endl;
return EXIT_SUCCESS;
}
"Hello World" in Java
#import java.io.*
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Weitere Beispiele kann man sich hier ansehen.
Fakt ist nun einmal, dass man anstatt der eigentlichen Textausgabe noch vieles drum herum tippen muß! Klar ist das am Anfang evtl. sogar zu "akzeptieren", aber man möchte ja doch recht schnell mehr machen, als nur Text auszugeben, dazu noch immer denselben! Schnell möchte man etwas dynamisches erzeugen. Spätestens dann fängt es an zu "nerven", wenn man immer wieder denselben kryptischen Kram um den eigentlich interessanten und wichtigen Code herum eintippen muss.
Schauen wir uns einmal an, wie das ganze auf dem C64 im dortigen Basic Dialekt aussah:
"Hello World!" in Commodore BASIC V2.0
print "Hello World!"
Sieht das nicht schon ganz anders aus? Das beste daran war: Man tippte es ein und sofort nach Druck auf die Enter-Taste wurde das "Programm" ausgeführt. Sicher, es tat nicht viel, aber das tun die obigen Varianten auch nicht ;-)
Diese haben noch einen weiteren Haken: Man kann sie eben nicht so einfach starten und ausführen! Aus dem Quellcode muss erst noch Code erzeugt werden, der ausführbar ist! (Genau darin liegt der Unterschied zu sogenannten Script-Sprachen. Bei diesen kann ein spezielles, mit der Sprache mitgeliefertes Prgramm, auch Interpreter genannt, den Quellcode sofort ausführen!) Bei obigen C++-Beispiel wäre das z.B. folgender Befehl:
g++ -o Hello HelloWorld.cpp
sofern man den Code in einer Datei namens HelloWorld.cpp gespeichert hätte.
Nun hat man eine ausführbare Datei namens Hello erzeugt, die man nun in einer Shell starten kann:
So oder so ähnlich würde der Aufruf aussehen (In diesem Falle unter Kubuntu 6.10 in einer Konsole unter KDE 3.5.5).
Python
Wie ich am Anfang schon erwähnte würde ich jedem Einsteiger die Scriptsprache Python empfehlen. Bevor ich nun auf die Eigenarten und Vorteile eingehen will, die diese Sprache für mich so atraktiv machen, schnell unser obiges Beispiel einmal in der Python Fassung:
print "Hello World!"
Sieht das nicht einfach aus? Genaugenommen besteht zur alten C64 Variante genau kein Unterschied :-) Dies sollte man nun nicht falsch verstehen! Python ist eine sehr mächtige Sprache und in keinster Weise mit dem alten und aus heutiger Sicht wahrlich antiquirtem Basic Dialekt vergleichbar - ausser in seiner Einfachheit und Zugänglichkeit!
Einfachheit soll nicht bedeuten, dass das Programmieren in Python zum Kinderspiel wird - das ist es entweder in jeder oder in keiner Sprache und hängt vom Talent ab ;-) - nein, es soll bedeuten, dass die Sprache an sich mit einer sehr einfachen Syntax auskommt! Der Einsteiger muss nicht viele Besonderheiten, Befehle und Zeichenkombinationen erlernen, damit er alles programmieren kann, ein paar wenige reichen aus. Dies ist einer von vielen Gründen, weswegen Python so schön einfach wirkt!
Fairer Weise sollte man erwähnen, dass man obiges Programm ja auch in einem Editor schreiben und danach speichern muss, um es auszuführen. Das geschieht dann folgendermassen:
>python Hello.py Hello World >_
Wie man sieht, kann man das Programm ohne es voher zu kompilieren einfach dem Interpreter übergeben und es von diesem ausführen lassen.
Es geht aber noch einfacher! Der Python-Interpreter besitzt eine integrierte Shell, in der man sofort loslegen kann. Dies ist vom Konzept nahezu identisch zum guten, alten C64! Anhand des folgenden Screenshots kann man sich von der Mächtigkeit aber vor allem Nützlichkeit dieser Shell überzeugen.
Eigentlich mache ich da nicht viel. Zu Beginn das mittlerweile bekannte Programm, danach eine Konkatenierung von zwei Strings. Es folgt eine einfache Schleife, die bis 5 zählt. Danach das alte "Hello World", welches nur durch eine Schleife 3x ausgegeben wird.
Gerade der Anfänger wird diese Shell lieben lernen, kann er sich doch vollkommen auf die neu zu lernenden Konstrukte konzentrieren und on-the-fly Erfolg oder Misserfolg seiner Eingabe prüfen. Diesen Faktor sollte man nicht unterschätzen. Gerade am Anfang geht doch oftmals vieles schief und man kann sich auch an Kleinigkeiten festbeissen. Da ist es schon hilfreich sofort in einer Shell eine Rückmeldung zu seiner Eingabe zu bekommen, anstatt erst durch den Compiler viele Meldungen über Fehler zu erhalten, die man dann noch dem Fehler zuordnen muss.
Das soll es erst einmal zu Python gewesen sein - ich hoffe, der Leser konnte nachvollziehen, wieso ich eine Lanze für diese Sprache breche. Es sei noch erwähnt, dass ich diese Sprache immer noch liebe, obwohl (oder gerade weil?) ich mich sicherlich als durchaus erfahrenen und anspruchsvollen Programmierer bezeichnen würde. Python ist also seine sehr mächtige Sprache, mit der man so ziemlich alles machen kann, was auch die "großen" und bekannteren Vertreter wie etwa C++ oder Java können. Kann man mit Python einigermaßen umgehen, so fällt sicherlich der Umstieg auf andere imperative, objektorientierte Sprachen recht einfach!
Wer auf meinen Seiten stöbert, wird auch schnell feststellen, dass reichlich viele Sachen dort in Python implementiert worden sind. Dies kommt sicher nicht von ungefähr ;-)
Leider habe ich Python erst sehr spät kennengelernt, es muss so 2002 gewesen sein. Eigentlich ist Python (von PHP mal abgesehen, wobei ich mich damit eher rudimentär befasst habe) die bis dato letzte Sprache, die ich erlernte - schade! Hätte ich diese Sprache früher kennengelernt, so hätte ich sicher einiges in Python realisiert, wofür ich zuvor eher C, C++ oder Java genutzt habe.
Hilfsmittel
Zum Einstieg ins Programmieren gehört sicherlich ein anständiger Editor! Ich nutze hierfür Kate, imho den besten Allround-Texteditor den ich kenne. Generell arbeite ich gerne unter Linux, da dieses OS vom ganzen "Gefühl" her eine bessere Basis als Entwicklungsumgebung darstellt, als sämtliche Windowssysteme, die ich bisher nutzte. Dies ist sicherlich eine sehr persönliche Sicht der Dinge, aber ich will nicht verschweigen, dass ich sogar über das Programmieren zu Linux fand! Anno 1998 wollte ich gerne C erlernen und hatte da unter Windows einfach kein gutes "Gefühl". Die dortige Shell scheint bewusst vorm User versteckt zu werden und bietet im Vergleich zu einer Bash auch keinen Komfort. Da drängte sich Linux geradezu auf, zumal man eben doch das ein oder andere in einer Shell machen muss. Auch eine mächtige IDE "schützt" einen davor nicht unbedingt (oder sie versteckt die Aufrufe, indem man die komplizierten Parameter eben in einem Eingabefeld angeben muss - dies ist aber ja eher eine Mogelpakung, denn die Arbeit in einer Shell wird ja auch erst durch viele Paramater kompliziert!)
Sicherlich sieht die Sache dank cygwin und Editoren wie JEdit anders aus, aber dennoch bleibe ich dabei, dass Linux für den Programmiereinsteiger ideal ist!
Für komplexere Sachen bieten sich dann später sogenannte Integrated Development Environments kurz IDE an. Auch hier bieten sich verschiedene Umgebungen an - gleichwohl man auch einfach mit Kate und einer Konsole durchaus komplexe Ein-Mann-Projekte durchführen kann! Dennoch bieten diese Umgebungen einfach eine Menge Komfort, wie etwa in eine Oberfläche integrierte Debugger, Klassenhierarchien, automatisierte Makefiles und nicht zuletzte das Kompilieren per Knopfdruck. Solche IDEs findet man speziell für Linux, es gibt aber auch Plattform übergreifende, wie etwa Eclipse. Im folgenden möchte ich drei Vertreter nennen, wobei man als Faustregel folgende Zuteilung machen kann:
| IDE | Sprache | OS | Link |
|---|---|---|---|
| Eclipse | Java | Windows, Linux | www.eclipse.org |
| KDevelop | C++ | Linux | www.kdevelop.org |
| Eric3 | Python | Linux | www.die-offenbachs.de/detlev/eric.html |
Sicherlich gibt es für die beiden ersteren auch Plugins, wodurch sie nicht auf die angegebenen Sprachen fixiert sind, aber dies bedeutet wieder einiges an Konfigurationsarbeit. Auch daran lässt sich erkennen, dass man als Einsteiger sicherlich nicht auf eine IDE zurückgreifen sollte.
Fazit
Ich hoffe ich konnte vermitteln, dass man sich beim Einstieg in die Programmierung auf das eigentliche konzentrieren sollte, das Coden! Stundenlanges Herumkonfigurieren in komplizierten IDEs frustriert eher, als das es nützlich ist. Klar freut man sich später an den vielen Komfort-Funktionen, aber welcher Einsteiger braucht diese Sachen? Solange man keinen tieferen Einblick in eine Sprache oder grundlegende Programmierkonzepte hat, kann man die Features einer IDE noch nicht sinnvoll ausnutzen.
Ein komfortabler Editor, mit Syntaxhighlightung, evtl. Auto-Completion und guter Suchen-und-Ersetzen Funktion bringt da imho wesentlich mehr! Man wird beim Entwickeln sowieso eher früher als später feststellen, dass man oftmals ein Kleinigkeiten Stunden lang sitzen kann, ohne einen Schritt weiter zu kommen. Sind es programmiertechnische Probleme ist das schon nervig genug - handelt es sich um ein Problem mit einem Werkzeug, so ist das geradezu niederschmetternd!
Ich hoffe ich konnte meine Ansicht zu diesem Thema nachvollziehbar darstellen. Dass diese Sichtweise nicht auf jeden zutreffen muss und zutrifft, ist mir bewusst. Aber es wird hoffentlich auch einige Menschen geben, die dieser Sichtweise zustimmen oder dadurch gar auf den Geschmack gekommen sind und diese Vorschläge meinerseits beherzigen.
Ich wünsche jedem Leser nun noch viel erfolg beim Lernen oder Coden - wobei das eigentlich fast immer dassselbe ist ;-)
Kontakt
Bei Fragen / Anregungen wie immer eine Mail an christian.hausknecht at tu-clausthal.de
