Hallo und herzlich Willkommen zu meinem kleinen Essay
"Newbie's Guide to Programming"
Was ich hier vermitteln möchte, ist nicht irgendeine Programmiersprache
oder ein Programmierstil oder ähnliches.
Vielmehr möchte ich mich mit der Frage beschäftigen :
"Was macht einen Programmierer aus?"
Leider ist es gerade in der von mir angepeilten Zielgruppe oftmals so, dass
sich einige falsche Vorstellungen über das Programmieren herausbilden.
An dieser Stelle möchte ich dann auch gleich eine Warnung aussprechen :
Für manchen wird die Lektüre dieses Textes nicht gerade motivierend
erscheinen, geschweige denn wird es ihn erfreuen zu lesen, dass er eigentlich
lieber gleich die Programmierung sein lassen sollte. Dieser Text ist keine Do-it-Yourself-Anleitung,
die, nachdem man sie durchgearbeitet hat, sofort ungeheures Wissen in eure Köpfe
presst. Dieser Text mag unbequem sein, aber das ist die Arbeit als Programmierer
oftmals auch. Fall sich also jemand von diesem Text enttäuscht zeigen sollte,
bitte ich darum, keine Hassmails auf mich loszujagen, denn ich berichte nur
über die Realität und will etwas Licht ins Dunkel des Programmierdjungels
bringen.
Dass ich dabei einigen ihre Illusionen nehme, ist ein durchaus beabsichtigter
Nebeneffekt, der aber von ihnen nicht negativ gesehen werden muss : Nehmen sie
es als Anreiz, ihre Motivation, Programmieren zu lernen nochmals zu überdenken.
Um zu den angesprochenen falschen Vorstellungen zurückzukommen und zugleich
einen Einstieg in meine Ausführungen zu finden ( das etwas hohe Sprachniveau
in diesem Essay ist btw. Durchaus beabsichtigt, da es für diejenigen, die
über die nötige Intelligenz und den nötigen Sachverstand vermögen,
ganz sicher kein Problem darstellen mag, einen in höherem Schriftdeutsch
geschriebenen Essay zu verstehen und es gleichzeitig auch eine Art Vorbereitung
auf das Niveau "richtiger" Programmierbücher abseits der "in
21 Tagen" und "xxx für Dummies" Reihen darstellen soll ),
möchte ich nun mit einem gerade unter
Neueinsteigern verbreiteten Vorurteil aufräumen: Programmierer wird man
nicht, indem man ein Buch, ein Tutorial (wobei diese eher 2. Wahl darstellen)
oder sonstetwas liest, sondern indem man sich mit der Sprache auseinandersetzt.
Oftmals werden Programmiersprachen mit realen Sprachen verglichen, so dass
ich diesen Vergleich hier nun einmal aufgreifen möchte. Wie bei einer realen
Sprache muss man verschiedene Dinge lernen und beherrschen. So gibt es auch
in einer Programmiersprache "Vokabeln", dass sind die Anweisungen
und Komponenten der Sprache, als auch "Grammatik", also Syntax der
Programmiersprache und das Wissen um die Bedeutung des Kontextes. Wie bei einer
realen Sprache auch ist es unsinnig, nur die Vokabeln oder nur die Grammatik
zu lernen, da das Eine ohne das Andere keinen Sinn macht. Was nützt es
mir, jede französische Vokabel zu kennen, ohne einen einfachen Satz bauen
zu können ?
Nichts.
Genau so ist es bei einer Programmiersprache auch. Übrigens ist auch die
Lernmethode prinzipiell nicht anders als bei einer realen Sprache auch. Auch
eine Programmiersprache kann ich durch Anwendung dieser viel schneller verstehen
lernen als durch pures Auswendiglernen. Nur durch Auswendiglernen kann man noch
lange nicht programmieren.
Was bei reale Sprachen von Programmiersprachen unterscheidet, ist dass kein
Dialog stattfindet.
Das heißt, sie sagen dem Computer zwar was er tun soll, das heißt
aber noch lange nicht, dass er ihnen auch etwas anderes mitteilen will, als
das, was sie ihm sagen, was er ihnen mitteilen soll. In der Tat ist alles, was
er ihnen mitteilt, von ihnen bestimmt, da sie ihn per Anweisung auffordern,
irgendetwas auf dem
Bildschirm oder sonstwo auszugeben. Von daher müssen sie ein Programm
nur verstehen können, indem sie es lesen, und wissen, was es bewirkt, aber
sie müssen
es nicht wie der Computer übersetzen, weil sie dem Computer ja praktisch
beim Programmieren ihre Sprache aufzwingen, und er selbst dann die Übersetzung
vornimmt.
Wie sie vielleicht wissen, erfordert es eine Menge an Aufwand, um eine Fremdsprache
zu lernen.
Sie müssen regelmäßig ihre Vokabeln lernen, sie müssen
sich am Anfang genau über die Bedeutung von diesem oder jenem Gedanken
machen, aber sobald sie einen gewissen Grad an Erfahrung erreicht haben, relativiert
sich der Aufwand und sie müssen sich nicht mehr mit den grundlegenen Mechanismen
auseinandersetzen, weil sie sie gelernt haben.
Und nun raten Sie mal, wie man eine Programmiersprache am effektivsten lernt
?
Wenn Sie noch keinen blassen Schimmer von der Programmierung haben und ihnen
die meisten Vokabeln unbekannt sind, werden sie viel Zeit damit zubringen, indem
sie versuchen zu verstehen, wieso etwas so und so funktioniert und nicht anders.
Sie werden es mitunter nicht immer als Vergnügen ansehen, aber sobald
sie einen gewissen Kenntnisstand erreicht haben, können sie anhand der
Dinge, die sie bereits kennen, auf die Funktion der unbekannten Dinge schließen
und ihre Anstrengung so minimieren.
Spätestens zu diesem Zeitpunkt wird ihnen die Tätigkeit als Programmierer
Spaß machen. Sie kennen viele Dinge und es entsteht automatisch eine magische
Neugier auf die Dinge, die sie noch nicht kennen in ihnen. Auch komplexe Zusammenhänge
erscheinen ihnen immer klarer. Am Anfang hingegen steht erstmal langweiliges
Erlernen der Grundlagen. Das ist überall so, und wer hier nicht die Zähne
zusammenbeisst und durchkommt, der mag vielleicht frustriert sein, aber , und
das versichere ich ihnen, bei weitem nicht so frustriert
als wenn er gleich zu Beginn ein 10000-Zeilen Programm vorgesetzt bekommt und
einen Tippfehler oder ähnliches Suchen muss. So eine Fehlersuche ist das
frustrierenste, was die Programmierung zu bieten hat, aber sie gehört dazu.
Fehlerfreie Programme gibt es nicht. Auch wenn wir versuchen Fehler zu vermeiden,
irgendwo machen wir doch welche.
Das ist nicht schlimm, aber natürlich ist so ein "Showstopper"
auch nicht gerade etwas, was für Heiterkeit sorgt.
Deshalb komme ich nun zum zweiten Punkt :
Programmieren ist keine Hexerei, sondern in gewissem Sinne eine Wissenschaft.
Ein Programmierer sollte wissen, was er tut, und warum etwas so funktioniert,
wie es funktioniert. Um das zu erreichen, ist Konzentration und Sorgfalt nötig.
Das lässt sich schon dadurch erreichen, dass der Code lesbar gestaltet
wird. Nicht ist schlimmer als unformatierter Code, der einfach straight untereinandergeschrieben
wurde, ohne ihn sinnvol zu unterteilen oder ihn zu kommentieren und seine Funktion
zu erklären.
Schon diese recht einfachen Maßnahmen helfen, so manchen Bug zu vermeiden,
und ist er erstmal drin, so ist er in einem in Sinnabschnitte und formatierten
Quelltext sicherlich leichter aufzuspüren als in einer endlosen, verwirrenden
Textwüste.
Kommentare sind nicht nur für Feiglinge oder Dünnbrettbohrer, sondern
dienen einfach einer kurzen Erklärung und Beschreibung des Programmteils,
in dem sie stehen. Es mag einige Programmierer geben, die es vorziehen, sich
x-fache Arbeit zu machen, als dass sie kommentieren oder formatieren. Sie als
angehender Programmierer sollten darauf achten, dass der Code so gut lesbar
und verständlich wie möglich ist.
Ein weiteres Manko ist, dass viele Newbies, die in dem nun geschilderten Fall
eigentlich als "Lamer" bezeichnet werden, es sich sehr einfach machen
möchten, indem sie auf vorgekaute Lösungen von anderen, engagierten
Menschen hoffen, die ihen hoffentlich gleich funktionierenden Code liefern,
mitsamt einer Beschreibung wie er zu benutzen ist.
In der Tat wird man mit so einem Verhalten auf wenig Gegenliebe stoßen,
wie die vielen Flames in den einschlägigen Foren beweisen. Die Leute dort,
die einem einen Lösungsansatz liefern, und davon ausgehen, dass der Hilfesuchende
mit Hilfe dieses Ansatzes und vielleicht einer Beschreibung der Vorgehensweise
in der Lage ist, daraus die Lösung für das Problem zu entwickeln kann,
werden im Gegenteil oft genug noch als "arrogant" und "herablassend"
bezeichnet, weil sie die Meinung vertreten, dass man Programmieren nur dadurch
lernen kann, dass man es tut, und nicht dadurch, dass
man einfach ohne Nachdenken vorgekauten Code übernimmt, ohne sich damit
zu befassen.
Ein derartiges Verhalten zeigt vor allem eines : Derjenige hat kein Interesse
am Programmieren und an der Kunst, die das Programmieren darstellt, sondern
will vielmehr nur wenig tun und dafür auch noch bewundert werden. Das dies
der falsche Weg ist, dürfte aus meinen Ausführungen jawohl hervorgegegangen
sein.
Ich habe am Anfang des Artikels bereits gesagt, dass dies hier kein Patentrezept
ist.
Es gibt solche Patentrezepte nicht. Niemand lernt von heute auf morgen Programmieren,
das ist ein Prozess der sich oftmals über einen langen Zeitraum erstreckt.
Ja, im Prinzip lernen wir alle immer weiter, denn sobald wir aufhören zu
lernen, hieße das ja, dass wir alles könnten. Das würde aber
gleichzeitig bedeuten, dass man damit aufhören kann, da es keine neuen
Herausforderungen gibt, denen man sich stellen kann, und letztlich stellt jedes
noch so kleine Projekt eine solche Herausforderung dar. Die Hreausforderung
und der Willen zu Lernen sind der Hauptantrieb des Programmierers, ebenso wie
der Wunsch nach der
absoluten Kontrolle über die Maschine, und eben nicht das profane Geld,
das nicht wirklich genauso glücklich macht wie das Erreichen eines Ziels
dass man sich selbst gesteckt hat.
Ihr erstes Ziel sollte sein, eine Programmiersprache zu erlernen, und es spielt
dabei prinzipiell keine Rolle, welche. Auch wenn es oftmals anders aussieht,
wer wirklich etwas auf dem Kasten hat wird akzeptiert und angesehen und kann
etwas bewegen, egal welche Sprache er benutzt oder welche Art von Software er
schreibt. Allein das Können und der Lernwille zählen.
In diesem Sinne wünsche ich ihnen einen schönen Tag (oder eine gute
Nacht)
und möchte ihnen viel Glück wünschen, wenn sie immer npch den
Wunsch haben,
Programmieren können zu wollen. Wenn Sie es wirklich wollen, werden sie
es auch schaffen, das wird sie ncihts aufhalten können.
Sebastian Porstendorfer
sp_sebisoft@gmx.de
PS : Bitte entschuldigen Sie die sicher vorhandenen Rechtschreibungs- und Grammatikfehler.
Nobody is perfect, there's still something to learn - even if you are a genius
(which i am not, i think.)