Codewars
Informatik und Softwareentwicklung sind permanent im Wandel. Programmiersprachen kommen und gehen. Meistens kommen sie allerdings, d.h. es gibt eine riesige Auswahl und ständig werden neue erfunden. Auch wenn man als Softwareentwickler zuweilen jahrelang ausschließlich oder doch hauptsächlich mit der selben Sprache arbeitet (welche aber in der Zeit auch ihre ganz eigene Evolution durchmachen kann), so ist es interessant und lehrreich, sich mit anderen Sprachen zu beschäftigen. Diese enthalten oft neue Konzepte und Ideen, die einem ein besseres Verständnis der eigenen Arbeit eröffnen. Und vielleicht findet man ja doch die neue Lieblingssprache, nach der man schon lange gesucht hat. Das bekannte Zitat „Learn at least one new language every year.“ von David Thomas und Andrew Hunt in „The Pragmatic Programmer“ mag vielleicht etwas übertrieben klingen, denn wer hat schon so viel Zeit, aber man muss eben gelegentlich auch mal über den eigenen Tellerrand schauen, um nicht zu sehr in alten und vielleicht nicht mehr zeitgemäßen Gewohnheiten und Denkmustern stecken zu bleiben.
Aber wie geht man das am besten an? Bücher lesen ist schön und gut, aber die rein theoretische Auseinandersetzung reicht selten aus, um eine Programmiersprache wirklich zu begreifen. Praktisches Arbeiten bringt da schon wesentlich mehr. Der Versuchung, die neue Sprache direkt als erstes in einem realen (Arbeits-) Projekt einzusetzen sollte man vielleicht lieber widerstehen. Der Einarbeitungsaufwand ist nicht zu unterschätzen und vielleicht ist es ja gar nicht die richtige Wahl und man steht dann später vor der Situation, dass man unnötigerweise alles wegwerfen und neu machen muss oder niemand mehr weiß, wie die Software weiterentwickelt oder gewartet werden kann. Langweilige „Hello World“-Tutorials (Literaturverwaltung, Fahrzeugtypen, Mitarbeiter, blablabla) haben wir aber auch alle schon zu Genüge gemacht und sie zeigen ohnehin meist nur die oberflächlichsten Sprachfeatures.
Eine sehr schöne und spaßige Alternative bietet die Webseite codewars.com („Improve your skills by training with others on real code challenges“). Dort kann man, nach einer kostenlosen Registrierung, eine Vielzahl von interessanten und neuen Programmieraufgaben (aber auch alten Klassikern) lösen und seine Lösung, die automatisch mittels geheimer Unittests überprüft wird, mit den Lösungen der anderen User vergleichen. Dabei stehen aktuell bis zu 43 unterschiedliche Programmiersprachen zur Auswahl. „Bis zu“, weil zwar nicht alle Aufgaben in jeder Sprache zur Verfügung stehen, sie dies aber könnten: User können Aufgaben (hier „Katas“ genannt) von einer Sprache in eine andere übersetzen, so wie sie auch selbst neue Aufgaben erstellen können. Beides allerdings nicht von Anfang an, sondern erst, nachdem eine gewisse Punktzahl („Honor“) erreicht wurde. Durch diesen Gamification-Aspekt macht das Programmieren direkt noch mehr Spaß, da sich jeder Erfolg in messbaren Punkten niederschlägt, durch die man sich weitere Rechte freispielt und welche man auch mit Freunden und Kollegen vergleichen kann. Die überschaubaren, abgeschlossenen Aufgaben erzeugen auch für sich schon nötige Motivation, Antworten zu finden und die Möglichkeiten der einzelnen Sprachen zu erforschen.
Der Schwierigkeitsgrad der Aufgaben reicht dabei von „sehr einfach, wenige Minuten“ („Invertiere die Reihenfolge der Worte in dieser Zeichenkette“) über „simpel“ („int32 to IPv4“) und „etwas knifflig“ („Finde die nächstgrößere Zahl mit den selben Ziffern“) bis zu „extrem schwierig, dauert Stunden – wenn man es überhaupt schafft“ („Löse Minesweeper“, „Schreibe einen Compiler für eine kleine Programmiersprache“) und sind in Ränge vom 8.Kyu bis zum 1.Kyu eingeteilt. So kann man sich immer solche Aufgaben suchen, die dem eigenen Entwicklungsstand in der jeweiligen Sprache angemessen sind. Man langweilt sich also nicht, aber wird auch nicht unnötig frustriert. Wenn man etwas nicht direkt kann, dann googelt man es eben, so wie im echten Leben auch. Und hinterher sieht man dann an den Lösungen der Profis, wie die Best Practice für diese Sprache tatsächlich ausgesehen hätte. Dies kann sehr verblüffend sein, wenn man z.B. sieht, dass es bereits eine Standardfunktion gibt, die mit einer einzigen Zeile riesige Blöcke der eigenen Lösung ersetzen kann. Dies begründet auch den großen Lernvorteil, den diese Puzzle-Spielereien sogar gegenüber echter Projekterfahrung bieten: normalerweise sieht man nur die eigene Lösung, und erfährt nicht, ob der Stil gut ist oder man es besser machen könnte. Wenn man Glück hat hat man Teamkollegen, die Verbesserungsvorschläge machen können, aber das sind ja nur wenige und bei codewars sind es Tausende – worunter mit Sicherheit auch welche sind, die mehr Erfahrung haben als das eigene Team.
Allen, die auch nur einen Funken Neugier für die Programmierung besitzen, sei daher wärmstens empfohlen, einfach mal einen Blick auf codewars.com zu werfen. Aber Vorsicht: dabei könnte schnell mehr Zeit verstreichen als man gedacht hätte 😉