Ein Dokument der Weisheit: Was macht einen Programmierer aus?



  • Habe einen geilen Text gefunden:

    **
    Ein Dokument der Weisheit:
    **

    Freundlicherweise vom Schreiber Sebastian Porstendorfer zur Verfügung gestellt (Danke)

    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 verbreitetem 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 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 sonst wo 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 grundlegenden 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 erst mal 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 frustrierendste, 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 sinnvoll 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 ihnen 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 hervorgegangen 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 Herausforderung 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 noch den Wunsch haben, Programmieren können zu wollen. Wenn Sie es wirklich wollen, werden sie es auch schaffen, dann wird sie nichts aufhalten können.

    Sebastian Porstendorfer

    sp_sebisoft@gmx.de

    PS : Bitte entschuldigen Sie die sicher vorhandenen Rechtschreibungs- und Grammatikfehler. Nobody is perfect.



  • das etwas hohe Sprachniveau in diesem Essay ist btw. Durchaus beabsichtigt

    Davon hab' ich nicht viel mitbekommen. Einige Grundgedanken sind ja gar nicht verkehrt, aber vielleicht sollte sich der Autor den Text nochmal durchlesen.



  • Hi,

    das steht doch auf codeworx.org, oder?

    ChrisM



  • "Nicht ist schlimmer als unformatierter Code, der einfach straight untereinandergeschrieben wurde, ohne ihn sinnvoll zu unterteilen oder ihn zu kommentieren und seine Funktion zu erklären. "

    Also ich setze das voraus, daß einem genau das klar ist bevor man überhaupt mal
    an das Programmieren gedacht hat!



  • 😮

    "xxx für Dummies"

    WO kann ich DIESES Buch kaufen???? 😃 😃



  • Ingo aka Desert Hawk schrieb:

    😮

    "xxx für Dummies"

    WO kann ich DIESES Buch kaufen???? 😃 😃

    Du wirst lachen: Sex Für Dummies



  • muahahaha, hätte echt nicht gedacht,dass es sowas gibt 😃

    Dinge gibts... 🙂

    🤡 Wenn das jetzt auch noch ein Buch von Bruce Eckel für fortgeschrittene gibt (alla "thinking in xxx"), dann fall ich vom Glauben ab 😉

    Um zurück zum Thema zu kommen:
    Irgendwie fehlt mir in dem Text, dass zum Programmieren auch das Designen von Software dazu gehört und ein wichtiger Bestandteil davon ist.

    Soweit ich das bisher mitbekommen habe, wird in der Praxis immernoch mehr Zeit für das Programmieren, als für das Design der Software verwendet. Aber eigentlich sollte das genau andersherum sein.
    Bevor man auch nur eine Zeile Code schreibt, sollte man ein ordentliches Design der Schnittstellen und des Ablaufes erstellt haben, da dadurch haufenweise Fehler vermieden werden und auch das Programmieren leichter von der Hand gehen wird. Dabei ist es dann relativ egal, in welcher Sprache das ganze dann implementiert werden soll.

    Desweiteren hat man natürlich einen wesentlich besseren Überblick über seine eigene Software und kann auch 1 Jahr später an seiner Software Änderungen ohne grosse Probleme durchführen.

    Ok, mit dem erlernen von Softwaredesgin würde ich allerdings auch erst beschäftigen, wenn ich mindestens eine Sprache einigermassen gut erlernt habe. 😉



  • Ingo aka Desert Hawk schrieb:

    Ok, mit dem erlernen von Softwaredesgin würde ich allerdings auch erst beschäftigen, wenn ich mindestens eine Sprache einigermassen gut erlernt habe. 😉

    Das machen viele so. Das ist ja der Grund, warum es viele gute "klein-klein-Entwickler" gibt, aber nur ganz wenige gute Designer. 😉



  • Den Text findet Ihr auf:
    http://de.geocities.com/throni3/



  • @Marc++us:
    Wobei man sagen muß, daß es auch nicht ganz unsinnig ist, wenn man einen Roman schreiben will zumindest eine Sprache zu beherrschen.



  • Hmm... ich sag mal, dass kann man so oder so sehen.
    Sicherlich kann man sich eine Geschichte ausdenken, dann Russisch/Italienisch/etc. lernen und sie dann in einer beliebigen Sprache aufschreiben 😉

    Ein fertiges Design auszuprogrammieren ist nicht schwer (mit ein wenig Disziplin).
    Einen guten Design zu entwerfen dagegen sehr und das kann (leider) nicht jeder.

    Genauso wie nicht jeder ein spannendes Buch schreiben kann, welches realistisch und nicht übertrieben wirkt und den Leser total fesselt, etc. ... .
    🙂

    Ob man nun eine Sprache gelernt hat und dann die Designmethoden erlernt, oder umgekehrt spielt dabei (so glaube ich) weniger eine Rolle...

    Man könnte natürlich auch Designs entwerfen, ohne jemals eine Programmiersprache gesehen zu haben... 🙂
    Das hätte den Vorteil, dass man nicht ständig gleichzeitig daran denkt, wie/ob man das jetzt auch implementieren könnte.

    Dann hätten wir allerdings auch eine saubere Trennung zwischen Programmierer, die nur die Sprachen und ihre Tricks kennen und Softwareentwickler, die die Designmethoden aus dem ff beherrschen und die Konsequenzen aus ihrem Entwurf im Blick haben 😃



  • Zitat:
    das etwas hohe Sprachniveau in diesem Essay ist btw. Durchaus beabsichtigt

    Soll vielleicht heissen:

    Ich habe absichtlich als Anrede "sie" benutzt...

    Fuer manche Leute ist das das Gleiche!



  • Also für einen vierzehnjährigen mag das ein hohes Sprachniveau sein... komischer Text.



  • MaSTaH schrieb:

    Also für einen vierzehnjährigen mag das ein hohes Sprachniveau sein... komischer Text.

    Wieso?

    Bist Du >14 oder was?



  • @Ingo:

    Ich bezweifle, daß jemand der keine einzige Sprache spricht in der Lage ist sich eine Geschichte auszudenken. Man kann das natürlich so hinschreiben, aber für möglich halte ich das nicht.



  • Oh doch, ich denke schon ...

    nehmen wir mal die vielen Borland C++ Builder Programmierer,
    (damit hab ich früher auch mal programmiert, als ich noch nicht wusste, was ich da tat) die viele kleine (inperformante) Anwendungen schreiben, ohne zu verstehen, was sie da eigentlich tun, bzw. die Sprache selber jemals verstanden zu haben.

    Genauso denke ich, dass jemand in der Lage ist, die Sprache UML zu lernen damit Objekte zu entwerfen und Objekt orientiert zu denken , ohne jemals eine einzige Programmiersprache gelernt zu haben.

    Ob dieser jemand dann auch gute Designs erzeugt, sei mal dahin gestellt 😉

    Oder frag mal einen großteil der Projektmanager, die haben keine Ahnung von dem, womit ihr Projekt hergestellt wird, wissen aber wie das ganze zu organisieren ist und wie sie Risiken erkennen und dagegen vorgehen können.

    Ich weiss, ich vergleiche wieder Äpfel mit Eiern, aber mir fällt gerade nix besseres ein 😃



  • Ingo aka Desert Hawk schrieb:

    Ob dieser jemand dann auch gute Designs erzeugt, sei mal dahin gestellt 😉

    Aber genau das ist doch der Punkt. Ein schlechtes Design erstellen ist einfach. Es geht hier aber darum ein gutes zu erstellen und dazu muß man programmieren können.

    Ich stelle jetzt mal folgende Behauptung auf:
    Wer UML-Diagramme baut kann auch mind. in einer Programmiersprache Programme schreiben.



  • Jester schrieb:

    Aber genau das ist doch der Punkt. Ein schlechtes Design erstellen ist einfach. Es geht hier aber darum ein gutes zu erstellen und dazu muß man programmieren können.

    Dass es ein "muss" ist, denke ich immernoch nicht 😉

    Jester schrieb:

    Ich stelle jetzt mal folgende Behauptung auf:
    Wer UML-Diagramme baut kann auch mind. in einer Programmiersprache Programme schreiben.

    Das ist allerdings meistens durch die Ausbildung bedingt.
    Das es nicht auch andersherum geht, oder nicht vielleicht sogar besser geht, wird wohl keiner von uns wissen 😉
    Vorstellen kann ich mir das schon.

    Zumindest geht mir das so, wenn ich ein Klassendesign entwerfe, bin ich mit meinen Gedanken zwischendurch immer bei der Implementierung. Das ist aber weniger hilfreich, da man so einige Möglichkeiten einfach nicht sieht und meine Gedanken schnell viel zu kompliziert werden.
    Mir hilft es immer, wenn ich die Implementierung bei der Entwurfsphase aussen vor lasse.


Anmelden zum Antworten