Normalerweise sorgt die Arbeit dafür, dass ich genug auf meine Kosten komme, was das Programmieren betrifft. Zur Zeit ist das aber nicht so und ich vermisse das Programmieren inzwischen schon etwas. 🤔 Da dachte ich mir: warum nicht mal am Advent of Code teilnehmen?
Was ist „Advent of Code“?
Auf der Webseite des Advent of Code (AoC) wird das so formuliert: „Advent of Code is an Advent calendar of small programming puzzles for a variety of skill levels that can be solved in any programming language you like. People use them as interview prep, company training, university coursework, practice problems, a speed contest, or to challenge each other.“ Außerdem heißt es dort: „You don’t need a computer science background to participate – just a little programming knowledge and some problem solving skills will get you pretty far. Nor do you need a fancy computer; every problem has a solution that completes in at most 15 seconds on ten-year-old hardware.“
Nochmal auf Deutsch und in eigenen Worten, heißt es, der Advent of Code ist ein Adventskalender mit je einer weihnachtlich gestalteten Programmieraufgabe, die man lösen kann wie man will. D.h. es gibt keine Einschränkung auf die Programmier- oder Skriptsprache, Hardware, usw. Man kann das ganze (wie ich inzwischen weiß) auch so kompetitiv gestalten wie man will. Man kann die Aufgaben einfach für sich im Stillen Kämmerlein lösen, sich auf der Seite aber auch anmelden, einloggen und Lösungen checken lassen, um sich Sternchen ⭐ zu verdienen, die dann anzeigen wie viele Aufgaben man gelöst hat. Das sieht dann ungefähr so aus:
Es gibt wohl auch Leaderboards und Leute, die täglich sogar extra früh aufstehen, um die Aufgaben so schnell wie möglich zu lösen und ihre Coding-Muskeln spielen zu lassen. Ich gehöre nicht dazu 😉. BTW schrieb ich vor einer Weile schon mal über den AoC an dieser Stelle im Blog: Netzgeflüster: Geek-Weihnachten.
… jetzt mal Kotlin?
Mit meiner Programmiererinnen-Ehre konnte ich es ja nur schwer vereinen, dass ich noch nie teilgenommen habe, weswegen es nun irgendwie naheliegend war. Was ich hier und da schon mal gehört habe ist, dass sich der AoC wunderbar eignet um eine neue Programmiersprache zu lernen, da die Aufgaben meistens schon gelöst werden können, wenn man bestimmte Basics beherrscht. Na und wenn man die schon kennt, kann man natürlich bis ins unendlichste optimieren.
Als Kandidaten dachte ich an drei Sprachen. In Typescript und React muss ich dringend mal wieder mein Wissen auffrischen. Ich kann das nicht mehr aus dem Kopf schreiben, da ich schon seit Jahren keinen Frontend-Code mehr geschrieben habe, der über Vanilla Javascript hinausgeht. Auf Arbeit war ich zuletzt eher Microservice- und Backend-Spezi mit Ambitionen in Richtung Software Architektur. Aber sind die so super geeignet, um am AoC teilzunehmen? Typescript sicherlich. Aber bei React will man doch, dass es ein bisschen blinkt oder schön aussieht. Das wird wahrscheinlich zu viel, so mein Gedanke. Die dritte Sprache, die mich mal gereizt hätte, ist Kotlin. Die wird schon länger als sehr intuitiv lernbare Java-Alternative gehandelt. Also warum nicht? Wie ich auch schnell mitbekam veranstaltet die Firma JetBrains, die Kotlin entwickelt hat, einen eigenen Wettbewerb zum AoC mit Leaderboard und allem drum und dran. Sogar Streams gibt es, in denen die Lösungen besprochen werden. Da gibt es jetzt keine Ausreden mehr, oder? 😋
Und wie läuft das jetzt so?
Dadurch, dass ich komplett keine Ambitionen habe hier irgendwas zu gewinnen, sondern nur lernen und ein bisschen coden will, gehe ich das sehr entspannt an. An manchen Tagen passt es auch nicht und ich kann nicht teilnehmen (keine Zeit oder mir ging es nicht gut genug). Auf dem Screenshot oben sieht man beispielsweise, dass ich am 12. Dezember „erst“ drei Rätsel gelöst hatte. Eins davon mit Zusatzaufgabe, sieht man an den zwei Sternen ⭐⭐ rechts in der Tabelle. Ja, Zusatzaufgaben gibt es auch! Dass ich bisher nicht mehr Aufgaben gelöst habe, liegt daran, dass ich nebenbei noch Kotlin lerne. Das war ja schließlich mal Ziel der Übung. Ich löse übrigens meist dann keine Zusatzaufgabe, wenn ich das Gefühl habe, dass das nur „mehr Arbeit macht“, ich dort aber keine neuen Kotlin-Features lerne oder anwenden kann.
Ich habe mir nur eine Woche Vorlaufzeit gegeben und ein Kotlin-Buch angefangen zu lesen, was mich wegen des vielen Vorgeplänkels nicht „befähigt“ hat so schnell Kotlin zu programmieren. Dafür kenne ich jetzt die Vorteile gegenüber anderen Programmiersprachen … Coding-Bücher halt. So schaue ich nebenbei ein Coding-Tutorial über Kotlin, war dann aber tatsächlich so intuitiv und schnell drin, dass ich die ersten AoC-Aufgaben lösen konnte. Alles, was mir an Wissen über Kotlin fehlte, ergoogle ich mir ad hoc (wie man das eben so macht) und komme bisher eigentlich ganz gut durch die Aufgaben und meistens machen die auch echt Spaß. 😀 Cool, mal wieder so kleine Erfolgserlebnisse in einer „neuen“ Sprache zu haben.
Die Aufgaben löse ich stets zuerst in dem ich das Beispiel aus der Aufgabe nehme und dagegen programmiere (wäre auch gut für Unit-Tests, kneife ich mir dieses Mal) und danach den echten Input für die Aufgabe nehme, den man nur sieht, wenn man sich auf der Seite eingeloggt hat. Das wusste ich übrigens anfangs gar nicht und dachte ich bin schon fertig mit dem kleinen Beispiel. 😂 Nein, der echte Input ist viel größer. Dort kommt meist ein Ergebnis raus, dass man nehmen und auf der Seite eingeben kann, um sich einen der Sterne zu verdienen – wenn es denn richtig ist. Habe ich die Aufgabe selber gelöst, dann schaue ich mir den Kotlin Stream von JetBrains zu der Aufgabe an, um zu lernen, was ich hätte anders machen können. No spoilers! Dabei habe ich bis jetzt fast immer noch irgendwas kennengelernt, was ich über Kotlin nicht wusste, weswegen die Gold wert sind. Allerdings auch Werbung für JetBrains Produkte … kann man sich denken.
Gedanken einer Java-Programmierung zum AoC mit Kotlin (Fazit, so far)
Oben habe ich ja schon angedeutet, dass mein erster Gehversuch Kotlin mit Buch zu lernen so-so war. Zumindest, wenn man sich nur eine Woche Zeit gibt. Ich schreibe nochmal ausführlich darüber wie Kotlin so ist, mit welchen Tutorials ich dann wirklich weitergekommen bin und auch darüber, warum das Buch grundsätzlich trotzdem eine gute Idee ist. Hier sei erstmal nur so viel gesagt, dass Kotlin mit Java interoperabel ist. D.h. wann immer ich nicht weiß wie man etwas in Kotlin mit Kotlin-Methoden schreibt, könnte ich auch Java-Code schreiben oder Java-Code in meine Kotlin-Files pasten und die von der IDE (IntelliJ natürlich…) in Kotlin konvertieren lassen. Der Advent of Code mit Kotlin ist also tatsächlich sehr einfach zu machen, wenn man wie ich Java-Background hat. Natürlich auch durch die Streams, in denen man im Zweifelsfall auch noch einiges lernen kann.
Vielleicht hat man es zwischen den Zeilen schon herausgelesen: die Streams und der Wettbewerb sind natürlich auch eine Werbe-Plattform für das Team von JetBrains, um Features ihrer IDE (=„Programm mit dem man Programmieren kann“, muss man sich wie einen super fancy ✨ Text-Editor für Code vorstellen) und Kotlin selbst zu vermarkten. Die ersten 20-30 Minuten eines Livestreams kann man getrost vorspulen, soll das heißen. Zudem wäre es halt schon cool, wenn die JetBrains-Leute in ihren Livestreams auch den Code erklären, damit ein Lerneffekt da ist. Das hängt immer sehr von dem Gast bzw. der Gästin ab. Manche erklären ihren Code besser als andere, so hat man mal mehr oder weniger Lerneffekt durch die Videos (die für den Replay auf der Plattform bleiben). Insgesamt ist es aber schon sehr cool, dass es das gibt und ich mag die weihnachtlichen und insgesamt sehr positiven Vibes der Streams. 👍 Bisher macht der AoC echt Spaß.
Habt ihr jetzt Lust bekommen mitzumachen? Oder habt ihr vielleicht sogar schon mal am AoC teilgenommen? Gibt es für eure Hobbys, Branchen, Fachrichtungen vielleicht ähnliche Aktionen? Dieser Beitrag ist übrigens Teil meines Booleantskalenders 2024. 🎄 Der Link bringt euch zu allen Posts aus der Vorweihnachtszeit.
Netzgeflüster ist eine Kategorie meines Blogs in der ich mich immer zwischen dem 10. und 15. eines jedes Monats Themen aus IT, Forschung, Netzwelt und Internet widme genauso wie Spaß rund um die Arbeit mit Bits und Bytes. 🙂
Schreibe einen Kommentar