Entwickler sind ein besonderes Völkchen. Ich erinnere mich noch ganz genau daran, was mich zu Beginn meiner beruflichen Laufbahn daran gereizt hat, meine ersten Programme zu entwickeln. Ich wollte kreativ sein, mich in komplexe Problemstellungen hineindenken und Programme erschaffen, die mir und anderen Menschen das Arbeiten erleichtern und Zeit einsparen. Ich denke, vielen von Euch ging es ähnlich.
Meine erste, in der freien Wildbahn eingesetzte Anwendung war die elektronische Kundenverwaltung einer Pizzeria (eine simple CRUD-Anwendung) - damals noch komplett ohne Grafik. Textmenüs und Auswahl per Tastatur waren die Mittel der Wahl. Nach Eingabe einer Kundennummer wurden die Daten der Kunden (Name, Anschrift, Telefonnummer) angezeigt und mussten nicht mehr bei jeder Bestellung erfasst werden. Der Pizzeria sparte das Zeit und erhöhte die Qualität bei der Auslieferung, mir brachte es Bezahlung in Form von lecker belegten Teigfladen. Eine Win-Win-Situation. ;-)
Wer sich bewusst für den Weg des Informatikers entschieden hat, dem war klar, dass es nicht damit getan ist, seine Ausbildung zu beenden; dafür ist das Themengebiet viel zu innovativ und schnelllebig. Neue Frameworks, Programmiersprachen und Paradigmen sprießen wie Pilze aus dem Boden, Dinge, die man vor ein paar Jahren gelernt hat, sind heute längst wieder out und verpönt.
Leider ist es im Projektgeschäft in der Regel so, dass man Bestandsprojekte wartet und weiterentwickelt. Wenn man Glück hat, bekommt man Zeit und Geld für das Refactoring älterer Komponenten. Aus meiner langjährigen Erfahrung in verschiedenen Projekten ist dies allerdings eher die Ausnahme denn die Regel. Somit ist man einen Großteil der Zeit damit beschäftigt, den nächsten REST-Webservice anzubinden, ein Formular zusammenzustellen, mit Validierungsregeln zu bestücken und in einem Backend abzuspeichern - Routinearbeit.
Die Innovation bleibt dabei meistens auf der Strecke. Programmieren ist in einem solchen Umfeld Handwerk - keine Kunst.
„Erschwerend“ kommt dann noch dazu, dass es für nahezu jedes Problem schon eine Lösung im Internet gibt. Stößt man auf Probleme, schaut man auf Stack Overflow oder Github nach Lösungen.
Möchte man etwas Neues lernen, muss man sich nicht mehr auf die Dokumentation des Frameworks / der Programmiersprache verlassen, sondern surft eine der vielen Tutorialseiten im Netz an und arbeitet vorbereitete Wissenshappen ab. Für Java beispielsweise auf Baeldung.
In beiden Fällen kann der Entwickler auf Copy&Paste- bzw. Clipboard-Development zurückgreifen um im Anschluss den kopierten Code mit meist geringem Aufwand den eigenen Bedürfnissen anzupassen.
In diesem Blogpost möchte ich die eine oder andere Möglichkeit aufzeigen, wie man als Entwickler der Routine-Tristesse entgehen kann.
Programmieraufgaben
Ein Weg, sich immer wieder neuen Problemstellungen zuzuwenden sind kleine, künstlich konstruierte Programmieraufgaben. Eine Seite, die sich hierfür eignet ist CodinGame
Anhand von vorbereiteten Spielen können in mehr als 25 Sprachen Programmierkonzepte, Paradigmen und Algorithmen ausprobiert werden. Man kann seine erarbeitete Lösung mit der Lösung von anderen Mitgliedern der Community vergleichen und so auf neue Ideen kommen, Probleme zu lösen. Steckt man fest, kann man andere Mitglieder um Hilfe bitten und sogar seinen Quellcode reviewen lassen. Belohnungen, Bestenlisten, und Programmierwettbewerbe halten die Motivation hoch.
Eine weitere kleine, aber feine Seite für kleine Programmieraufgaben ist Advent of Code. Seit 2015 wird dort zur Weihnachtszeit ein Adventskalender angeboten. Anhand einer Weihnachtsgeschichte werden Probleme beschrieben, die sich mittels Programmierung lösen lassen. Die Lösung des Problems kann auf der Seite eingegeben werden. Bei richtiger Eingabe wird täglich ein zweiter Teil freigeschaltet, der ebenfalls bearbeitet werden kann. Für jede erfolgreich gelöste Aufgabe bekommt man einen Stern. Ist man unter den ersten einhundert Einsendern, erhält man Punkte für die Bestenliste. Die Programmiersprache ist frei wählbar und unterliegt keinen Einschränkungen. Lösungen werden auf reddit diskutiert. Dort bekommt man auch einen guten Überblick über die verwendeten Programmiersprachen (es existieren sogar Lösungen in Minecraft (sic!)).
Pair Programming
Eine weitere Möglichkeit sich neue Horizonte zu erschließen ist das Pair Programming. Hier sitzt man mit einem Kollegen zusammen an einem Arbeitsplatz und entwickelt Lösungen für Problemstellungen. Während ein Entwickler den Code schreibt, sitzt der andere Entwickler daneben, denkt über die Problemstellung nach und kontrolliert den geschriebenen Code auf Schwachstellen. Sobald etwas auffällt, wird es angesprochen und mittels persönlichem Dialog beseitigt. Die Rollen der beteiligten Personen werden regelmäßig getauscht. Die Vorteile dieses Verfahrens liegen klar auf der Hand: Steigerung der Code-Qualität, Wissensvermittlung, Aneignen neuer Programmiermuster durch Ideen des Pair Programming Partners.
Coding Dojos
Eine bei Entwicklern beliebte Form der persönlichen Weiterentwicklung sind Coding Dojos.
Hier trifft man sich mit einer Gruppe von Gleichgesinnten und trainiert Techniken und Methoden der Softwareentwicklung anhand neuer Programmiersprachen, Frameworks und Tools. Es geht darum, miteinander und voneinander zu lernen. Zu Beginn werden ein Thema, eine Timebox und ein Vorgehen festgelegt.
Es kann parallel in Gruppen programmiert werden, es kann zyklisch nacheinander entwickelt werden, sogar das Entwickeln in der gesamten Gruppe mit Hilfe eines Beamers ist möglich. Wichtig ist, dass über den entstandenen Code diskutiert wird um Vor- und Nachteile bestimmter Lösungen herauszuarbeiten. Nicht das perfekte Ergebnis, sondern der Weg zu einer von allen Beteiligten akzeptierten Lösung sollte im Vordergrund stehen.
Erlernen neuer Programmiersprachen
In der Projektarbeit ist man als Entwickler oftmals auf eine, eventuell auch zwei Programmiersprachen eingeschränkt. Dadurch verfällt man bei der Umsetzung von neuen Funktionalitäten oftmals in einen Standardmodus. Dies kann von Vorteil sein, da ähnliche Anforderungen mit bekannten Mitteln schneller umgesetzt werden können. Ein Nachteil ist, dass der Entwickler in Versuchung gerät, einfach seinen Standardweg zu programmieren und sich nicht mehr ausreichend darüber Gedanken macht, ob es vielleicht sinnvoll wäre, das vorliegende Problem auf eine andere Art zu lösen.
Ein Ausweg aus diesem Dilemma ist das Erlernen einer neuen Programmiersprache. Dies kann das Mindset eines Entwicklers spürbar erweitern, da jede Sprache ihr eigenes Paradigma mitbringt und neue Lösungsstrategien für bekannte Probleme bietet.
Da das Erlernen einer neuen Programmiersprache aufwändig ist, sollte sich der interessierte Entwickler erst einmal einen groben Überblick über die Sprache verschaffen. Ein guter Einstiegspunkt hierfür ist die Seite „Learn X in Y minutes“. Hier findet man kleine Übersichten zu einer Vielzahl von Sprachen. Die Übersichtsseiten sind dabei immer ähnlich aufgebaut: eine kleine Einführung stellt die Kernfeatures der vorgestellten Sprache in den Vordergrund, danach folgt Beispielcode, der die Grundlagen der Sprache vorstellt. Abschließend gibt es Links zu weiterführenden Informationen und Tutorials.
Videokurse
Abseits des selbständigen Lernens gibt es im Internet eine weitere populäre Methode, um neue Sachverhalte zu erlernen. Zu vielen Themen der Entwicklung existieren Vorträge und Kurse auf diversen Plattformen. Als freie Alternative sei zuerst einmal youtube genannt. Nach Eingabe eines Themas findet der geneigte Entwickler nicht nur zu Programmierthemen wie Frameworks, APIs, Design Patterns und Programmiersprachen Videos, sondern auch zu Softwarearchitektur, DevOps, Agilität, Anforderungsmanagement und Projektleitung. Ein Nachteil dieser Art von Wissenserarbeitung ist die schwankende Qualität der Vortragenden.
Eine in der Regel bessere Qualität findet man auf Onlinekurs-Seiten wie https://udemy.com, https://www.edx.org/, https://www.udacity.com/ oder https://www.coursera.org/. Dort findet man komplette Kurse zu allerlei Themen der Informatik. Diese Kurse sind kostenpflichtig, dafür bekommt man aber neben den Videos, welche in einzelne Lektionen aufgeteilt sind, Unterrichtsmaterialien und Übungsaufgaben. Der reguläre Preis der Kurse ist etwas höher, oftmals gibt es aber Rabattaktionen, so dass man auch vergünstigt an die Kurse kommen kann.
Als Letztes möchte ich noch gesondert auf eine weitere Lernplattform hinweisen, die iTunes University von Apple. Dozenten von Universitäten und Schulen können Vorlesungsmaterialien und Übungsaufgaben erstellen und der Allgemeinheit zur Verfügung stellen. Hier findet man beispielsweise auch Kurse der Universität von Stanford. Einzige Zugangsvoraussetzung ist eine gültige Apple-ID.
Fazit
Nichts ist für einen Entwickler tödlicher als Langeweile und Routine im Berufsalltag. In diesem Blogpost habe ich verschiedene Möglichkeiten aufgeführt, wie man es als Entwickler schaffen kann, sein Mindset zu schärfen, neue Dinge zu lernen und agil im Kopf zu bleiben. Natürlich setzen alle vorgestellten Konzepte ein gewisses Maß an Eigenverantwortung und Motivation voraus. Von Nichts kommt Nichts.