Golo Roden arbeitet auf freiberuflicher Basis als Wissensvermittler und Technologieberater für .NET, Codequalität und agile Methoden. Im Rahmen von .NET hat er sich auf die Sprache C# und die Architektur von Webanwendungen spezialisiert. Seit dem Jahr 2010 ist er Microsoft Most Valuable Professional (MVP) für C#, außerdem ist er zweifacher Microsoft Certified Professional (MCP), unter anderem für die Entwicklung .NET-basierter Webanwendungen. Sie erreichen ihn über seine Webseite und sein Blog.
N.N.: Golo, wie bist Du zur Softwareentwicklung gekommen? Wie und wann hast Du angefangen?
Golo Roden: Meinen ersten Kontakt zu Computern hatte ich, als ich zwölf Jahre alt war. Die Firma, in der mein Papa arbeitete, stellte damals auf PCs um, und er wollte sich besser einarbeiten können – also kaufte er sich einen PC. Ich weiß noch genau, dass ich eines Tages von der Schule nach Hause kam, die im Flur stehenden Pakete sah und fragte, ob ich die Pakete am Nachmittag auspacken dürfe, da meine Eltern beide wieder in die Firma gehen und arbeiten mussten.
Da sie nichts dagegen hatten, packte ich die Pakete nachmittags aus und schloss die einzelnen Kabel an und – schaltete den PC ein. Da Windows damals noch kaum verbreitet war, hatten wir nur MS-DOS zur Verfügung: Mir blinkte also ein Cursor auf der Kommandozeile entgegen und wartete auf Eingaben.
Ich hatte überhaupt keine Ahnung, was ich machen musste – wie gesagt, es war das erste Mal, dass ich überhaupt vor einem Computer saß – kannte aber die Enter-Taste von der Schreibmaschine. Also fing ich an, Befehle zu raten. Irgendwann habe ich durch Zufall „break“ eingegeben, woraufhin die Meldung „break on“ erschien. Durch Ausprobieren habe ich dann auch noch herausgefunden, dass man diesen Zustand mit Hilfe von „break on“ und „break off“ verändern konnte.
Den ganzen Nachmittag über habe ich nichts anderes mehr gemacht, als weiterhin Befehle zu raten, und gelegentlich auf meinen ersten Befehl zurückzugreifen – ohne auch nur ansatzweise zu verstehen, wofür er gut war.
Im Gegensatz zu meinen Altersgenossen, die größtenteils nur an Computerspielen und daher auch eher am C64 als an PCs interessiert waren, wollte ich etwas anderes: Ich hatte auf dem Firmen-PC meines Papas gesehen, dass man zu Beginn ein Kennwort eingeben musste. Das fand ich spannend! Und was ich wollte, war nichts anderes, als „unseren“ PC ebenfalls durch ein Kennwort zu schützen.
Zu Gute kam mir dann, dass mein Opa in Basic programmieren konnte. Er hatte zwar eigentlich ein Geschäft für Badmintonsport, hatte sich aber sein eigenes System für Warenwirtschaft und Rechnungsverwaltung entwickelt. Er zeigte mir bei einem Besuch, wie man Basic startete, ein kleines Programm eingab, es ausführte und Basic wieder beendete: Mehr als PRINT und INPUT kannte ich dann zwar noch nicht, aber ich war meinem Vorhaben, ein Programm zum Abfragen des Kennworts zu entwickeln, einen Schritt näher gekommen.
Ich weiß nicht, wie es damals weitergegangen wäre, wenn nicht auch mein Papa das Bedürfnis gehabt hätte, seine Kenntnisse zu erweitern: Gemeinsam haben wir einige Bücher zu MS-DOS durchgearbeitet, und uns irgendwann auch an GW-Basic gewagt.
Mein Interesse an Programmierung wuchs und wuchs, je mehr ich darüber lernte. Irgendwann kam dann der Umstieg auf QuickBasic, und irgendwann war auch der Punkt erreicht, an dem ich alleine weitermachen musste – schließlich wollte mein Papa kein Programmierer werden, sondern eigentlich nur seine Kenntnisse als Anwender für die Firma verbessern.
Ein Schritt hat dann zum nächsten geführt, und ich hatte das Glück, dass mich meine Eltern dabei unterstützt haben – zum einen im materiellen Sinne, da sie mir Bücher und Zeitschriften finanziert haben, zum anderen aber auch, weil sie sich so gut wie nie darüber beschwert haben, dass ich so viel Zeit vor dem Computer verbracht habe.
Während der nächsten Jahre bin ich an die Grenzen von QuickBasic gestoßen, außerdem wollte ich unbedingt die vermeintlich kryptische Syntax von C und C++ verstehen. Nach einem kurzen Ausflug zu Assembler habe ich daher begonnen, mich in C++ einzuarbeiten.
Zeitgleich bekam ein Klassenkamerad von seinen Eltern zum Geburtstag ein Modem geschenkt, mit dem es uns erstmals möglich war, in Mailboxen nach Gleichgesinnten zu suchen, und uns zusätzliche Software herunterzuladen. Auch meine Eltern zogen irgendwann nach, so dass ich zu Hause Zugriff auf das Internet hatte, was für das Lernen und den Austausch mit Gleichgesinnten enorm hilfreich war. Außerdem habe ich in dieser Zeit begonnen, mich mit den verschiedenen Webtechnologien wie HTML, CSS und JavaScript auseinanderzusetzen.
Nach meinem Abitur und einem Jahr als Zivildienstleistender lag auf der Hand, dass ich Informatik studieren würde. Meine Eltern haben mir unter anderem des Praxisbezugs wegen empfohlen, die FH zu wählen, ich wollte aber auf die Uni und mich mit den theoretischen Grundlagen beschäftigen – wenn ich damals geahnt hätte, worauf ich mich damit eingelassen habe, bin ich mir nicht sicher, ob ich genauso entschieden hätte.
Kurzum: Die Uni hat meine Erwartungen kaum erfüllt, wobei das eher an meinen Erwartungen als an der Uni lag. Wirklich spannend und von praktischem Nutzen war eigentlich nur ein halbjähriges Praktikum im Hauptstudium, in dessen Rahmen wir paarbasiert eine webbasierte Auktionsplattform entwickeln sollten. Trotzdem bin ich im Nachhinein froh, auf der Uni gewesen zu sein, denn auch wenn ich keinen direkten Nutzen daraus ziehen konnte, so glaube ich doch, dass die Zeit dort mein abstraktes, analytisches und systematisches Denken geschult hat.
N.N.: Du hast Dich auf die .NET-Plattform spezialisiert. Warum gerade .NET und nicht beispielsweise JEE (Java Enterprise Edition)?
Golo Roden: Als technische Grundlage für besagtes Praktikum diente damals J2EE mit Eclipse als Entwicklungsumgebung. Dass wir einige technische Probleme mit unseren Benutzerkonten hatten und die Versionsverwaltung nicht zuverlässig funktionierte, war dabei allerdings die kleinere Herausforderung: Sich in eine derart komplexe Technologie wie J2EE einzuarbeiten, war das eigentliche Kunststück.
Ich hatte immer das Gefühl, dass – egal an welchem Ende man anfängt – jede Antwort gleich wieder zehn neue Fragen nach sich zieht, und der Grad des Nichtwissens somit immer größer statt kleiner wird. So wohl mein Praktikumspartner wie auch ich hatten aber den Ehrgeiz, verstehen zu wollen, wie und warum diese Technologie funktionierte: Es hat uns verdammt viel Zeit gekostet. Wir haben jeden Tag von morgens bis spät Nachts ausschließlich für dieses Praktikum gearbeitet, aber wir haben unglaublich viel gelernt.
Bevor ich anfing, zu studieren, hatte ich noch einige Wochen Zeit, in denen ich mich zwar auch um Dinge wie Wohnungssuche und ähnliches kümmern musste, aber dennoch blieb viel Freizeit: Irgendwo habe ich damals auch zum ersten Mal davon gehört, dass Microsoft eine neue Entwicklungsplattform namens .NET mitsamt einer neuen Sprache namens C# plant.
Da ich Zeit hatte und ohnehin auf der Suche nach einem vernünftigen und sinnvollen Inhalt für meine Webseite war, beschloss ich, mir C# näher anzugucken und dazu ein kleines Tutorial – quasi vom Einsteiger für den Einsteiger – zu schreiben. Das Ergebnis war guide to C#, das meines Wissens nach erste deutschsprachige größere Tutorial zu C#.
Auf diese Weise hatte ich während der Zeit an der Uni einen direkten Vergleich zwischen C# und Java – und je geübter ich in C# wurde, desto mehr missfiel mir Java. Nach meinem Praktikum habe ich mir dann auch ASP.NET und ADO.NET als Alternativen zu J2EE angesehen und schließlich beschlossen, mich auf .NET und C# zu spezialisieren. Obwohl ich für diese Entscheidung und für meine generelle Begeisterung für Microsoft an der Uni stets schief angeguckt wurde, glaube ich im Nachhinein, dass es die richtige Entscheidung war.
Vergangenes Jahr habe ich mein Wissen um J2EE, das inzwischen übrigens nur noch JEE heißt, auf Vordermann gebracht – und bin dabei zu dem gleichen Ergebnis gekommen: Ich würde nicht wieder zu JEE zurück wechseln wollen.
N.N.: Deine Schwerpunkte liegen auf .NET, Codequalität und agilen Methoden. Wie hängen diese Bereiche zusammen?
Golo Roden: Die Plattform .NET bildet zusammen mit der Sprache C# die Basis. Beide zusammen befähigen einen Entwickler erst, überhaupt Anwendungen entwickeln zu können. Essenziell dabei ist, dass man als Entwickler seine Werkzeuge beherrscht. Dass dies bei .NET als Plattform nicht umfassend möglich ist, liegt auf der Hand – dafür ist .NET inzwischen viel zu umfangreich und komplex geworden.
Aus diesem Grund ist es empfehlenswert, sich auf einige wenige Bereiche zu spezialisieren. In meinem Fall sind dies die Sprache C# an sich sowie ASP.NET. Dennoch versuche ich, alle anderen Bereiche von .NET zumindest so weit zu kennen, dass ich beurteilen kann, welche Technologie ich wofür in welchem Kontext einsetzen könnte. Ich versuche auch, mich in jedem Bereich zumindest so weit auszukennen, dass es für einen ersten Einstieg genügt. Insofern bin ich in gewissem Sinne gleichzeitig ein Generalist und ein Spezialist.
Alleine der Wunsch, C# nicht nur irgendwie zu können, sondern diese Sprache wirklich zu beherrschen, ist eine Herausforderung: Angefangen bei nicht-alltäglichen Schlüsselwörtern wie yield bis hin zu Besonderheiten in der Sprachspezifikation wie dem null-Typ oder dem beforefieldinit-Flag bietet C#, aller Konsistenz zum Trotz, viel Potenzial für Stolperfallen.
Erst, wenn man eine Sprache als Entwickler wirklich beherrscht und verstanden hat, wie und warum sie intern auf ihre Art aufgebaut ist, erst dann ist man in der Lage, nicht nur effektiven, sondern auch effizienten Code zu schreiben. Das ist der erste Schritt.
Der zweite Schritt liegt darin, die Sprache in einen Kontext einzubetten. In meinem Fall ist das ASP.NET – denn eine Sprache alleine genügt noch nicht, um komplexe Anwendungen zu entwickeln. Natürlich muss jeglicher Code eine gute Architektur aufweisen, um wart- und evolvierbar zu sein. Das gilt für ASP.NET ebenso wie für jede andere Technologie. Deshalb liegt mir auch das Thema der Architektur von Webanwendungen sehr am Herzen.
Obwohl ein Entwickler mit diesen Bausteinen – C#, ASP.NET und Webarchitektur – bereits produktiv arbeiten kann, ist das Ergebnis noch nicht zwingend qualitativ hochwertig. Dazu gehört für mich nicht nur, dass das Produkt eine hübsche Fassade aufweist, auch das Innenleben muss gepflegt sein: Die Rede ist von sauberem Code, der ebenfalls wesentlich zu langfristiger Wart- und Evolvierbarkeit beiträgt.
Deshalb beschäftige ich mich auch mit dem Thema Codequalität. Dazu gehört für mich auf jeden Fall die Orientierung an CCD (Clean Code Developer), das Schreiben von Unittests, die Durchführung von Codereviews, der Einsatz von Werkzeugen zur statischen Codeanalyse, …
All dies mag aufwändig und vor allem teuer erscheinen. Allerdings ist es ein Trugschluss, zu glauben, dass man durch den Verzicht auf diese Themen Zeit oder Geld sparen könnte – denn letztlich werden die gleichen Fehler trotzdem gemacht, sie fallen nur erst später auf. Dann jedoch kostet ihre Behebung ein Vielfaches von dem, was eine von Anfang an durchgehaltene saubere Arbeitsweise gekostet hätte.
Daher ist es so wichtig, dass Entwickler ihr Augenmerk auch auf Codequalität richten – denn nur dann sind sie in der Lage, nicht nur effektiven und effizienten, sondern auch qualitativ hochwertigen Code zu schreiben.
Zu guter Letzt ist es ideal, wenn das Ausleben von Codequalität auch von einem entsprechenden Rahmenwerk getragen wird. Dieses Rahmenwerk betrifft dabei das Management, aber auch den Entwickler und dessen Team. Aus diesem Grund erachte ich es für wichtig, sich mit agilen Methoden zu befassen – denn sie bieten ein solches geeignetes Rahmenwerk. Scrum stellt dazu die äußere Hülle zur Verfügung, Extreme Programming (XP) füllt Scrum mit dem notwendigen Innenleben.
Nimmt man all diese Aspekte zusammen, dienen also alle drei Themen – .NET, Codequalität und agile Methoden – letztlich der Steigerung der Codequalität. Und genau darum geht es mir: Entwickler zu befähigen, rundum guten Code zu schreiben, anstatt sich mit halbgarem und ausgereiftem zufrieden zu geben.
N.N.: Ein wesentliches Merkmal der IT ist, dass man beständig mit neuen Entwicklungen konfrontriert wird, und diesen folgen muss. Woher nimmst Du die Motivation, Dich quasi jeden Tag weiterzubilden und mit Neuem zu beschäftigen?
Golo Roden: Um ehrlich zu sein: Ich weiß es nicht. In mir verspüre ich einen stetigen inneren Drang, mich verbessern zu wollen, mehr lernen zu wollen, immer weiter voranzukommen und dabei etwas zum Guten zu bewegen. Deswegen muss ich die Motivation nirgendwo hernehmen – ich habe sie einfach.
Natürlich gibt es auch immer mal Tage, an denen man sich nicht aufraffen kann. Mir hilft an solchen Tagen, mir zu sagen, dass es sehr schwer sein kann, einen Stein erst einmal ins Rollen zu bringen – ihn aber am Rollen zu halten, sobald er einmal am Rollen ist, ist deutlich einfacher. Übertragen auf die Softwareentwicklung soll das heißen: Auch wenn man sich zu nichts Großem aufraffen kann, genügt es häufig, mit Kleinigkeiten loszulegen.
Erstens summieren diese sich über den Tag verteilt auch auf, zweitens fällt es leichter, sich an große Aufgaben zu wagen, wenn man bereits im Fluss ist und einfach nur die nächste Aufgabe vom Stapel nehmen muss.
N.N.: 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?
Golo Roden: Ich glaube, dass es nur drei Voraussetzungen gibt, die einen guten Softwareentwickler ausmachen: Zum einen der eben erwähnte innere Drang, immer weiter vorankommen zu wollen. Wem das fehlt, der wird über kurz oder lang schlichtweg keinen Spaß mehr daran haben, ständig etwas Neues machen zu müssen. Das sind dann jene Entwickler, die sich Neuerungen per se verschließen, immer mit dem Argument spielend, dass ihre Vorgehensweise „früher auch schon so funktioniert“ habe.
Wer also von sich aus diesen inneren Drang verspürt, hat eine der drei größten Hürden meines Erachtens bereits genommen. Alles andere ist dann nur noch eine Frage der Zeit und des Aufwands, aber prinzipiell ist diese Motivation eine Schlüsselqualifikation. Das ist die gute Nachricht.
Zugleich ist es aber auch die schlechte Nachricht. Denn wer diesen inneren Drang nicht verspürt, der wird ihn sich, zumindest meines Erachtens, auch nie wirklich aneignen können. Entweder ist man so – oder man ist es eben nicht. Daran ändern kann man in der Regel kaum etwas – ebenso wenig wie an der Tatsache, ob man Links- oder Rechtshänder ist.
Als zweite Voraussetzung ist für einen guten Softwareentwickler Liebe zum Detail erforderlich. Zum einen, weil auch vermeintliche Kleinigkeiten sehr komplexe Auswirkungen haben können, zum anderen aber auch, weil sich Kleinigkeiten so schnell summieren – und das sofortige Beheben eines Fehlers so wohl zeitlich wie auch finanziell deutlich günstiger ist als wenn es zu einem späteren Zeitpunkt erfolgt.
Als Softwareentwickler muss man jederzeit exakt und mit Präzision arbeiten, wie wenn man ein Schweizer Uhrwerk zusammensetzen würde – und nur einen Versuch hätte. Das fängt bei einer wohlüberlegten und durchdachten Namensgebung an und hört bei der Rechtschreibung innerhalb von Kommentaren auf. Dies wird desto wichtiger, je eher man nicht als einzelner Entwickler, sondern im Team arbeitet.
Die dritte und letzte Voraussetzung ist meines Erachtens eine gewisse konstruktive und zugleich reflektierte Einstellung. Tritt ein Problem auf, so ist es für den Kunden zunächst einmal irrelevant, welcher Entwickler des Teams dafür verantwortlich ist – wichtig ist zunächst, dass der Fehler auf saubere Art behoben wird, auch hier spielt also wieder die Liebe zum Detail mit hinein. Zunächst gilt es also, konstruktiv nach vorne zu blicken und zu überlegen, was man machen kann, um die Situation zu verbessern.
Natürlich muss auch überlegt werden, wie es zu dem Fehler kam und wie man zukünftig mit solchen Situationen umgehen will. Eine Retrospektive tut also Not, in der rückblickend bewertet wird, was gut und was schlecht lief. Dies sollte jedoch regelmäßig und zu dedizierten Zeitpunkten stattfinden, um die konstruktive Arbeit nicht ständig zu unterbrechen.
Wer diese drei Voraussetzungen – einen stetigen Verbesserungsdrang, Liebe zum Detail wie auch eine konstruktive und zugleich reflektierte Einstellung – erfüllt, hat gute Chancen, als Softwareentwickler erfolgreich zu sein.
N.N.: Bei der Vielzahl an Technologien, die es heute gibt: Womit sollte ein Anfänger heutzutage anzufangen?
Golo Roden: Das Hauptproblem ist inzwischen, dass viele Anfänger zu viel auf einmal wollen: Da genügt es nicht mehr, eine statische Webseite zu entwickeln, sondern es muss von vornherein eine dynamische Webseite mit Datenbankanbindung und RIA-Frontend sein. Natürlich ist es möglich, sich in die dafür benötigten Technologien auf die Schnelle irgendwie einzuarbeiten – aber die Genauigkeit und Präzision geht dabei verloren.
Paradox an dieser Situation ist, dass die heute verfügbaren Technologien sehr stark von den Grundlagen abstrahieren und somit Glauben machen, man könnte sie so leicht erlernen. Gleichzeitig werden aber genau diese Grundlagen immer stärker gefragt, um mit Ungenauigkeiten in der Abstraktion umgehen zu können. Es schadet also auch heute nicht, sich mit gewissen Basics zu befassen.
Daher würde ich einem Anfänger raten, eine ähnliche Richtung einzuschlagen wie sie die Entwicklung der Technologien an sich genommen hat. Das heißt, er sollte mit kleinen Konsolenanwendungen beginnen und zunächst die jeweilige Sprache lernen. Erst wenn er das beherrscht, sollte er den Schritt zu grafischen Oberflächen oder Webtechnologien wagen. Erst danach sollte er sich mit Datenbankanbindung befassen – und auch hier wieder zuerst mit SQL, erst dann mit O/R-Mappern. Und so weiter …
Letztlich würde ich also dazu raten, Geduld zu haben, und Schritt für Schritt aufeinander aufzubauen, um sich solides Wissen als Fundament anzueignen. Auf anderem Wege kommt man auf den ersten Blick zwar deutlich schneller voran, scheitert aber auch wesentlich schneller – weil die besagten notwendigen Grundlagen fehlen.
N.N.: Welchen Rat würdest Du einem Anfänger abschließend mit auf den Weg geben?
Golo Roden: Wenn ein Anfänger die genannten Voraussetzungen erfüllt und bereit ist, eine gehörige Portion Zeit und Aufwand zu investieren, dann ist das bereits eine sehr gute Ausgangsbasis. Wer zudem nicht so schnell aufgibt und dazu neigt, allen Widerständen zum Trotz beharrlich und geduldig nach Lösungswegen zu suchen, der ist ebenfalls gut beraten.
Letztlich bleibt dann nur noch zu sagen: Auf geht’s!