herbivore arbeitet als freiberuflicher Informatiker und ist Administrator von myCSharp.de. Nach ersten Schritten auf programmierbaren Taschenrechnern bekam er über das Informatikstudium Zugang zur strukturierten Programmierung. Inzwischen entwickelt er schwerpunktmäßig mit C++ und C#. Sie erreichen ihn über myCSharp.de.
Golo Roden: herbivore [tatsächlicher Name ist der Redaktion bekannt], wie bist Du zur Softwareentwicklung gekommen? Wie und wann hast Du angefangen?
herbivore: Bei mir hat alles mit einem programmierbaren Taschenrechner angefangen. Andere für den Privathaushalt erschwingliche Computer gab es zu diesem Zeitpunkt noch nicht. Ich hatte mir den Taschenrechner aber gar nicht gewünscht, weil man ihn programmieren konnte, sondern weil er zehn Speicherregister hatte. Meine Berechnungen damals hatten immer viele Nebenrechnungen, und ich kam mit dem einen Speicherregister meines alten Taschenrechners nicht mehr hin.
Der neue Taschenrechner war eine Offenbarung für mich. Ich stellte dann schnell fest, dass er 49 Programmschritte speichern konnte. Allerdings gingen diese nach dem Ausschalten verloren, so dass die Programme deshalb jedes Mal neu eingegeben werden mussten. Eine andere Speichermöglichkeit als einen Stift und ein Blatt Papier gab es nicht. Jedenfalls war die erste Programmiersprache, die ich lernte, die Programmiersprache dieses Taschenrechners.
Mein erster „echter“ Rechner – nur ein oder zwei Jahre später – hatte 32KB Hauptspeicher und man konnte einen handelsüblichen Kassettenrekorder als Hintergrundspeicher anschließen. 32KB Hauptspeicher waren damals unglaublich viel. Das Basismodell wurde mit 8KB Speicher ausgeliefert. Eine ausführliche Beschreibung des Hardware-Aspekts meiner ersten Schritte findet sich unter Eure ersten Rechner / Schritte mit Rechnern.
Auf diesem Rechner konnte man mit einem sehr einfachen Basic programmieren. Das habe ich mir selbst mittels des beigelegten Handbuchs beigebracht. Im Nachhinein bin ich glücklich, dass sich der dadurch verursachte Schaden in Grenzen gehalten hat – denn strukturierte Programmierung war das nicht. Ich wusste zu diesem Zeitpunkt aber noch nicht einmal, dass es so etwas überhaupt gibt.
Das lernte ich erst im Informatikstudium, das ich zwei Jahre später begonnen habe. Wenn man so will, war das Studium für mich der eigentliche Beginn dessen, was ich als Softwareentwicklung bezeichnen würde. Für mich standen ab dieser Zeit gute und saubere Lösungen im Vordergrund. Dass ein Programm einfach nur das machte, was es sollte, war mir nicht mehr genug.
Golo Roden: Du bist bei myCSharp.de der mit Abstand aktivste Benutzer, und zugleich jemand, der unglaublich kompetent ist. Wie bist Du zu diesem breitgefächerten Wissen und zu myCSharp.de im Speziellen gekommen?
herbivore: Mit dem Studium habe ich mein Hobby zum Beruf gemacht. Und jeder weiß, wieviel Energie man in eine Sache stecken kann, die einen wirklich interessiert und einem wirklich Spaß macht. Darum habe ich dankbar alle Möglichkeiten angenommen, mein Wissen zu erweitern. Mich haben viele unterschiedliche Themen interessiert, also habe ich mich auch mit sehr vielen verschiedenen Themen beschäftigt.
Das Lernen war bei mir immer ein Dreiklang aus Aufnehmen, Ausprobieren und Weitergeben. Natürlich muss man zu einem Thema erst einmal etwas lesen oder hören, um überhaupt eine Basis zu haben. Aber das allein genügt nicht – man muss das Gelernte auch ausprobieren und anwenden. Ich habe in meinem Leben bestimmt schon einige tausend Mini-Testprogramme geschrieben, um irgendwelche Zusammenhänge untersuchen zu können. Und zu guter Letzt trägt es zur Vertiefung und Verbreiterung des Wissen entscheidend bei, das Gelernte anderen zu erklären.
Um Wissen weiterzugeben, muss man es so formulieren, dass andere es verstehen. Dabei merkt man dann auch schnell, wenn einem selbst etwas noch nicht ganz klar ist, und man kann die Lücke schließen. Außerdem profitiert man von den Nachfragen, die andere stellen, weil man dadurch auf neue Aspekte aufmerksam wird.
Das ist auch der Grund, warum ich auf myCSharp.de lieber Fragen beantworte als Fragen zu stellen. Man lernt einfach mehr dadurch.
Dennoch bin ich ganz profan durch eine eigene Frage zu myCSharp.de gekommen, auf die ich eine gute Antwort gesucht und bekommen habe. Das hat mich motiviert, mich zu revanchieren, und auch ein paar Fragen zu beantworten. Auf myCSharp.de habe ich in Was bewegt euch zum Helfen im Forum? beschrieben, was mich zum Helfen motiviert.
Dabei war es inbesondere zu Anfang so, dass ich viele Antworten, die ich gegeben habe, selbst nicht kannte, bevor ich mich mit der Frage beschäftigt hatte. Hier kommen dann wieder die Mini-Testprogramme, aber auch das Stöbern und Nachschlagen in der Dokumentation und eigenes Nachdenken über die Frage ins Spiel.
Golo Roden: Ein wesentliches Merkmal der IT ist, dass man beständig mit neuen Entwicklungen konfrontiert wird, und diesen folgen muss. Woher nimmst Du die Motivation, Dich quasi jeden Tag weiterzubilden und mit Neuem zu beschäftigen?
herbivore: Die Motivation kommt aus der Einsicht in die Notwendigkeit. Wenn man nichts Neues lernt, fällt man zurück. myCSharp.de ist mein Weg, in dieser Hinsicht auf dem Laufenden zu bleiben. myCSharp.de macht mir zum Glück nach all der Zeit immer noch Spaß und ich bin täglich dort aktiv. Es ist ja nicht so wichtig zu wissen, dass es eine neue Entwicklung gibt, denn es gibt viele neue Entwicklungen und die meisten verschwinden scheller als sie gekommen sind – wenn aber wirklich etwas beginnt, sich durchzusetzen, häufen sich auf myCSharp.de die Fragen dazu. Dann weiß ich, dass es Zeit ist, mir dieses Thema genauer anzuschauen.
Die kurze Halbwertszeit des Wissens sollte es übrigens jedem leicht machen, sein Wissen mit anderen zu teilen. Ich hatte nie die Befürchtung, dass ich meinen Wissensvorsprung dadurch verlieren könnte, dass ich mein Wissen mit anderen teile, weil ich genau wusste, dass immer wieder neues Wissen dazu kommt. Und das hat sich auch in der ganzen Zeit, in der ich mich mit Informatik beschäftige, bewahrheitet. Man sollte also nicht auf seinem Wissen hocken, bis es wertlos geworden ist, sondern sein Wissen vorher weitergeben.
Golo Roden: Wenn sich ein Anfänger heute mit dem Thema Softwareentwicklung befassen will - welche Voraussetzungen sollte er Deiner Meinung nach dafür mitbringen, und was siehst Du als No-Go an?
herbivore: Ein Anfänger sollte Eigeninitiative und Experimentierfreude mitbringen. Konkretes Wissen ist weniger wichtig. Man braucht eher die Fähigkeit, sich Wissen zu erwerben. Man sollte sich nicht scheuen, Bücher gründlich durchzuarbeiten. Durchlesen alleine hilft nicht. Auch und gerade wenn es in dem Buch keine vorgegebenen Arbeitsaufgaben gibt, sollte man versuchen, das Gelesene sofort umzusetzen und sei es in Form der schon genannten Mini-Testprogramme. Und das auch nicht erst am Ende des Kapitels, sondern möglichst Seite für Seite.
Natürlich kann man durch Ausprobieren nicht alles erschlagen. Gerade bei Architekturfragen zählen abstraktes Denken und vor allem Erfahrung, die man sich natürlich erst nach und nach erwerben kann.
Golo Roden: Bei der Vielzahl an Technologien, die es heute gibt: Womit sollte ein Anfänger heutzutage anzufangen?
herbivore: Man sollte nicht gleich zu hoch hinaus wollen und sich nicht zu schade sein, ganz zu Anfang auch wirklich einfache Programme zu schreiben. Lieber in kleinen Schritten alles gründlich verstehen, als zu versuchen, durch unreflektiertes Zusammenkopieren von Code ein möglichst eindrucksvolles Programm zu Stande zu bringen. Insofern sind einfache Kommandozeilenprogramme für mich auch heute noch das Mittel der Wahl für den Einstieg. Allerdings darf man dabei nicht zu sehr in die imperative Programmierung verfallen.
Es ist wichtig, sich von Anfang an mit der Objektorientierung zu beschäftigen. Das bedeutet unter anderem, den Code an Hand von Klassen und nicht an Hand von Funktionen zu strukturieren. Funktionen in dem Sinne gibt es gar nicht mehr. Bei aller Ähnlichkeit zu einem Funktionsaufruf ist ein Methodenaufruf konzeptuell etwas ganz anderes, nämlich das Senden einer Nachricht an ein Objekt. Die Implementierung einer Methode ist dementsprechend die Vorschrift, wie ein Objekt auf eine solche Nachricht reagiert.
Im Prinzip ist der Begriff „objektorientiertes Programm“ ein Widerspruch in sich. Eigentlich gibt es in einer objektorientierten Anwendung nur eine Menge von Objekten, die miteinander kommunizieren. Der Anstoß, was die Objekte machen, kommt nicht mehr von einem fest vorgegebenen Programm, sondern aus den Nachrichten, die der Benutzer durch seine Eingaben an die Objekte schickt. Das nennt sich dann ereignisgesteuerte Programmierung und ergänzt die objektorientierte Programmierung ideal.
Wenn man Interesse, Spaß, Ausdauer und Beharrlichkeit mitbringt, wüsste ich keinen Grund, warum man keinen Erfolg in der Software-Entwicklung haben sollte. Ich persönlich finde das Vorhandensein eines mathematischem Hintergrunds hilfreich, aber es gibt auch viele, die ohne diesen gute Informatiker geworden sind.