Uploaded avatar of angelikatyborska

Analyzer, Representer & Syllabi – Was ist neu bei Exercism?

@angelikatyborska
vor Etwa 5 jahre
Video

Anfang September 2021 ist Exercism v3 endlich erschienen. Angelika Tyborska ist eine der wichtigsten Maintainer, die uns über die Ziellinie gebracht haben. Sie ist nicht nur Mitentwicklerin der Elixir-Lernübungen und des Elixir-Syllabus, sie war auch eine wichtige Stimme während der gesamten Entwicklung von v3 und hat den Entwicklungsprozess mit Ideen und Einsichten bereichert. Sie ist eine der wichtigsten Contributor bei Exercism.

In dieser Videopräsentation erklärt uns Angelika, welche Probleme v3 lösen sollte, welche wichtigen Neuerungen die Plattform bekommen hat und wie alles zusammenpasst. Dabei geht sie auf Analyzer, Representer und die neuen Lernübungen ein.

Transkript

Die Geschichte von Exercism

Exercism gibt es schon eine ganze Weile. Es wurde 2013 von Katrina Owen als Werkzeug für ihre Lernenden entwickelt. In v1 war es einfach eine Sammlung interessanter Praxisübungen. In v2 wurde daraus eine Plattform für kostenloses Code-Mentoring.

v3 🚀 01.09.2021

Am 1. September wurde Exercism Version 3 veröffentlicht.

In diesem Video führe ich dich durch die Änderungen in v3, erkläre, warum sie vorgenommen wurden und wie sie deine Erfahrung auf Exercism verbessern werden.

Über mich

Das bin ich [Foto bei 0:38]. Ich bin Angelika. Zusammen mit meinem Co-Maintainer Tim habe ich die Tools und über 30 Lernübungen für den Elixir-Track von Exercism v3 entwickelt. Ich bin überzeugt, dass Exercism in seiner neuen Form das beste Werkzeug zum Erlernen neuer Programmiersprachen werden kann.

Was ist neu in v3?

Was ist neu in Exercism v3? Kurze Antwort: Eine Menge.

Alle großen Änderungen in v3 sollen die größten Probleme lösen, die die Menschen in v2 hatten.

Probleme in v2

Es gibt drei zentrale Probleme, die v3 angeht.

Erstens: schwierige Ersteinrichtung, zweitens: Code-Üben ohne Lernen, drittens: lange Antwortzeiten der Mentoren.

Problem 1. Schwierige Ersteinrichtung

Problem Nummer eins: schwierige Ersteinrichtung. Um mit Exercism anzufangen, musst du die Exercism CLI installieren, die Programmiersprache, die du ausprobieren möchtest, und du musst dich im Terminal wohlfühlen. Du musst deinen Editor so einrichten, dass er die Syntax der neuen Sprache farbig hervorhebt, und so weiter. Für erfahrene Entwickler ist diese ganze Einrichtung ein lästiger Zeitfresser. Für Anfänger kann sie aber eine unüberwindbare Hürde sein.

Die Lösung: Menschen direkt im Browser programmieren lassen. Keine Ersteinrichtung nötig.

Um das zu ermöglichen, gibt es bei Exercism jetzt einen Web-Editor, und jede Programmiersprache hat ihren eigenen Test Runner, der die Tests für die Exercism-Übungen ausführt.

Web-Editor

Das ist der Web-Editor [Screenshot bei 2:25]. Er hat zwei Bereiche: links den Quellcode, rechts die Anleitungen und die Testsuite.

Er hat keine ausgefallenen Funktionen, denn sein Ziel ist es nicht, deine Lieblingstools zu ersetzen. Sein Ziel ist es, dir das Installieren aller nötigen Tools und Abhängigkeiten so lange zu ersparen, bis du dich mit der neuen Programmiersprache wohler fühlst und weißt, dass du damit weiterarbeiten möchtest.

Der Web-Editor ist völlig optional. Du kannst weiterhin die CLI verwenden und auf deinem eigenen Rechner mit deinen Lieblingstools arbeiten.

Test Runner

Damit der Web-Editor nutzbar ist, muss es eine Möglichkeit geben, die Tests gegen die Lösung auszuführen, die du im Browser schreibst. Genau das ist die Aufgabe eines Test Runners.

Jede Sprache auf Exercism hat ihren eigenen Test Runner. Der Test Runner ist dafür zuständig, die Testergebnisse zu melden, aber das ist nicht alles. Er muss auch den Rumpf des Tests herausziehen, damit du weißt, welcher Code ausgeführt wird und die Fehlermeldung interpretieren kannst. Außerdem muss er die Ausgabe des Tests abfangen, damit du deinen Code im Browser mit puts, print, console.log oder welcher Ausgabefunktion deine Sprache auch bietet debuggen kannst.

Test Runner sind entscheidend, um Übungen im Browser zu lösen, aber sie werden auch für Lösungen verwendet, die über die CLI eingereicht werden. Wenn du die Community-Lösungen zu einer Übung durchstöberst oder jemanden mentorst, kannst du sehen, ob die Lösung die Tests besteht, ohne sie herunterladen und lokal ausführen zu müssen.

Problem 2. Code-Üben ohne Lernen

Problem Nummer zwei: Exercism ist eine Plattform zum Üben von Code, aber sie bot keine Ressourcen, um eine bestimmte Sprache von Grund auf zu lernen. Das musstest du vorher woanders machen.

Die Übungen auf Exercism waren darauf ausgelegt, interessant und herausfordernd zu sein, aber manchmal sind selbst die einfachsten zu schwer, um als Einstieg in eine neue Programmiersprache zu dienen. Das gilt besonders, wenn du eine Sprache lernen willst, die eine völlig andere Syntax hat oder sogar ein anderes Programmierparadigma verwendet.

Die Lösung: Lernen und Üben miteinander verbinden.

Mit dem Syllabus und den Lernübungen ist Exercism jetzt ein hervorragendes Werkzeug, um direkt in eine neue Programmiersprache einzutauchen.

Syllabus

Was ist ein Syllabus? Ein Syllabus ist ein Baum aus Konzepten, aus denen jede Programmiersprache besteht. Der Syllabus ist für jeden Track auf Exercism einzigartig, weil jede Programmiersprache anders ist und andere Konzepte hat.

Die Konzepte bauen aufeinander auf und bilden verschiedene Zweige des Baums. Du musst das vorherige Konzept im Zweig lernen, um das nächste Konzept freizuschalten.

Zum Beispiel ist das hier der Anfang des Elixir-Syllabus [Screenshot bei 5:10]. Er beginnt mit einem Konzept namens „basics", das behandelt: wie man ein Modul definiert, wie man eine benannte Funktion definiert und wo man die Dokumentation für die Standardbibliothek findet. Dieses Wissen ist für jede einzelne Exercism-Übung notwendig. Du musst „basics" lernen, um irgendein anderes Konzept freizuschalten. Du kannst zum Beispiel etwas über boolesche Werte lernen, und sobald du boolesche Werte kennst, kannst du etwas über den cond-Ausdruck lernen, und so weiter.

Zum Vergleich: Das ist der vollständige Elixir-Syllabus [Screenshot bei 6:16]. Im Moment enthält er über 50 Konzepte, aber er muss noch erweitert werden.

Ganz oben findest du Konzepte wie: Strings, Listen, Maps und Tupel. In der Mitte: das Enum-Modul, reguläre Ausdrücke, Structs und das Schreiben von Typespecs. Und am Ende: Protokolle, Prozesse und Tasks.

Lernübungen

Konzepte aus dem Syllabus lernst du, indem du Lernübungen löst. Lernübungen unterscheiden sich von Praxisübungen. Sie wurden entwickelt, um Lernenden Programmierkonzepte beizubringen, die die jeweilige Programmiersprache überhaupt nicht kennen, aber mindestens eine andere Sprache und grundlegende Programmierkonzepte beherrschen.

Einführung

Jede Lernübung beginnt mit einer Einführung. Die Einführung beschreibt grundlegende Informationen zu den Konzepten, die diese Übung vermittelt. Die meisten Lernübungen vermitteln ein einzelnes Konzept, aber es gibt Ausnahmen.

Dieses Beispiel zeigt eine Einführung über Maps in Elixir [Screenshot bei 7:12]. Sie erklärt, was Maps sind, wie man eine Map definiert, wie man auf einen Wert in einer Map zugreift und so weiter. Sie enthält einige Codebeispiele, um die neue Syntax zu zeigen, aber nicht zu viele, damit du die Einführung nicht einfach kopieren und einfügen kannst, um die Übung zu lösen.

Anleitungen

Dann gibt es die Anleitungen. Die Anleitungen für Lernübungen sind in kleine Aufgaben unterteilt. Die Aufgaben sollen die Lernenden dazu bringen, die wichtigsten Teile eines Konzepts zu verwenden.

Zum Beispiel lässt die Lernübung, die Maps vermittelt, die Lernenden erst eine Map erstellen, dann einen Wert aus einer Map lesen, dann einen Wert in einer Map aktualisieren, dann alle Schlüssel einer Map abrufen und so weiter.

Jede Lernübung hat eine Geschichte, aber die Geschichte ist nicht so wichtig. Sie ist da, damit du keine unsinnigen Werte wie „foo bar" und „1 2 3" verwenden musst, aber sie spielt keine große Rolle in der Übung, anders als bei den Praxisübungen.

Hinweise

Zu jeder Aufgabe gibt es eine kleine Liste mit Hinweisen, falls die Lernenden nicht weiterkommen. Die Hinweise verraten oft, welche konkrete Funktion in welcher Aufgabe verwendet werden soll, und führen dich zur Dokumentation dieser Funktion.

Konzepte üben

Aber eine einzige Lernübung zu lösen reicht nicht, um ein Konzept wirklich zu beherrschen. Du musst es auch üben. Deshalb haben wir alle Praxisübungen durchgesehen, die es in v2 schon gab, und einige ausgewählt, mit denen sich jedes Konzept üben lässt.

So sieht ein einzelnes Konzept im Baum aus [Screenshot bei 9:01]. Die Punkte stehen für Übungen. Der erste Punkt mit dem Glühbirnen-Symbol ist eine Lernübung, die anderen Punkte sind Praxisübungen.

So sieht ein Konzept aus, nachdem du ein paar Übungen gelöst hast [Screenshot bei 9:37]. Beachte, dass einige der Praxisübungen für dieses Konzept noch gesperrt sind, obwohl die Lernübung abgeschlossen ist. Der Grund ist, dass Praxisübungen nicht auf ein einzelnes Konzept beschränkt sind. Möglicherweise musst du mehr Konzepte als nur Atome [im Screenshot gezeigtes Konzept] lernen, bevor diese Übungen freigeschaltet werden.

Für Menschen, die eine Sprache schon fließend beherrschen, sollen Lernübungen trivial sein. Aber keine Sorge, sie sind völlig optional. Du kannst vom Lernmodus in den Übungsmodus wechseln. Damit bekommst du sofort Zugriff auf alle interessanten Praxisübungen, ohne dich erst durch den Syllabus zu arbeiten.

Der Syllabus ist ein riesiger Aufwand

Ein wichtiges Detail muss ich erwähnen, um deine Erwartungen zu dämpfen: Die Entwicklung des Syllabus ist ein RIESIGER Aufwand. Nicht jeder Track hat genug aktive Maintainer, um schon jetzt einen fertigen Syllabus zu haben.

Zum Zeitpunkt, an dem ich dieses Video aufnehme [4. September 2021], gibt es Lernübungen nur in: Common Lisp, C#, Elm, Elixir, F#, Go, Java, JavaScript, Python, Ruby, Rust und Swift. Der Julia-Track wird seinen Syllabus bald starten.

Problem 3. Lange Antwortzeiten der Mentoren

Problem Nummer drei: lange Antwortzeiten der Mentoren. Nicht jeder Track hat genug Mentoren. Manche Tracks haben so wenige Mentoren, dass die Wartezeit auf Mentoring bis zu einem Monat betragen kann. Das war für die Lernenden schon immer extrem entmutigend. Es ist ein so zentrales Problem für Exercism, dass es aus drei verschiedenen Richtungen angegangen wird.

Automatisiertes Feedback

Lösung Nummer 1 ist automatisiertes Feedback. Vieles von dem Feedback, das Mentoren den Lernenden schreiben, wiederholt sich. Häufige Fehler automatisch zu erkennen und sie den Lernenden direkt mitzuteilen, verändert alles.

Automatisiertes Feedback zu häufigen Fehlern ermöglicht es den Lernenden, ihre Lösung zu verbessern, noch bevor sie um Mentoring bitten. Das macht auch die Arbeit der Mentoren leichter. Sie müssen dann keine mühsamen Details wie snake_case vs. camelCase erwähnen und können sich auf das Wesentliche der Lösung konzentrieren. In manchen Fällen reicht das automatische Feedback den Lernenden schon aus, und sie fragen gar kein Mentoring an.

In v3 gibt es zwei Arten von Tools für automatisiertes Feedback: Analyzer und Representer.

Analyzer

Der Analyzer ist ein Tool, das nach bestimmten Merkmalen in einer Lösung sucht und den Lernenden eine Liste vordefinierter Kommentare zu seinen Ergebnissen zurückgibt. Welche Merkmale das sind, hängt ganz von der Sprache und der konkreten Übung ab.

Zum Beispiel hat Elixir eine ganz bestimmte Namenskonvention für Funktionen und Variablen. Eine der Prüfungen, die der Elixir-Analyzer für jede einzelne Übung durchführt, ist die Kontrolle aller Variablen- und Funktionsnamen. Findet er einen Namen, der nicht in snake_case geschrieben ist, erinnert er die Lernenden an die Namenskonvention.

Eine weitere Prüfung, die der Elixir-Analyzer durchführen kann, ist das Erkennen der Verwendung eines bestimmten Moduls. Zum Beispiel ist diese Prüfung [Screenshot bei 13:20], die die Verwendung des Enum-Moduls bemängelt, spezifisch für die Lernübung zur Rekursion. Die Verwendung des Enum-Moduls untergräbt den Zweck der Lernübung, also erinnert der Analyzer die Lernenden daran, das nicht zu tun und stattdessen Rekursion zu verwenden.

Representer

Das zweite Tool, das uns beim automatisierten Feedback auf Exercism helfen wird, ist der Representer. Der Representer nimmt die Lösung und entfernt die nicht wesentlichen Teile. Er normalisiert die Formatierung, entfernt Kommentare und Dokumentation und ersetzt Funktions- und Variablennamen durch Platzhalter.

Das Ergebnis des Representers heißt Repräsentation. Jede bei Exercism eingereichte Lösung wird an den Representer übergeben, und ihre Repräsentation wird zusammen mit der Lösung auf der Plattform gespeichert.

Mentoren haben dann Zugriff auf eine Oberfläche, in der sie die Repräsentationen eingereichter Lösungen durchstöbern können. Zu jeder eindeutigen Repräsentation kann ein Mentor Feedback hinterlassen. Dieses Feedback wird dann jedem Lernenden angezeigt, der eine ähnliche Lösung mit derselben Repräsentation einreicht. Ein Mentor muss das Feedback nur einmal schreiben, und es erreicht alle, die es brauchen.

Die Representer selbst sind für einige Sprachen bereits implementiert und ausgerollt, aber zum Zeitpunkt, an dem ich dieses Video aufnehme [4. September 2021], fehlt die Oberfläche für Mentoren noch auf der Plattform. Wir müssen also noch etwas warten, bis dieses Feature vollständig verfügbar ist.

Unerwünschte Mentoring-Sessions vermeiden

Eine weitere Lösung für lange Mentoring-Warteschlangen ist es, unerwünschte Mentoring-Sessions zu vermeiden. In v2 war Mentoring für Kernübungen Pflicht. Eine Kernübung einzureichen bedeutete, dass du automatisch Mentoring angefragt hast, und ohne die Zustimmung eines Mentors konntest du nicht zur nächsten Kernübung übergehen. Viele Lernende lernten die Sprache, indem sie die Kernübungen durcharbeiteten, also brauchten sie das Mentoring, um sie durch den Lernprozess zu führen.

Das ist nicht mehr so. Die lehrende Rolle der Kernübungen und die Zustimmung durch Mentoren wurden von den Lernübungen und den Analyzern übernommen. In v3 ist Mentoring immer optional und muss ausdrücklich angefragt werden.

Mentoring-Anfrage

Um Mentoring anzufragen, musst du 2 Fragen beantworten: „Was erhoffst du dir von diesem Track zu lernen?" und: „Wie kann dir ein Mentor mit deiner Lösung helfen?" Wenn der Mentor im Voraus weiß, was die Lernenden von der Mentoring-Session erwarten, kann er die Mentoring-Anfragen auswählen, die am besten zu seinem Wissen und seinem Mentoring-Stil passen. So ist es wahrscheinlicher, dass beide Seiten die Mentoring-Session zufrieden verlassen.

Mentoring-Warteschlange & Favoriten

In der neuen Mentoring-Warteschlange sehen Mentoren Statistiken über die Mentoring-Historie der Lernenden. Sie sehen, welche Lernenden noch nie mentoriert wurden und vielleicht eine sorgfältigere Betreuung brauchen, und welche schon oft mentoriert wurden und wissen, wie es funktioniert.

Mentoren können endlich auch Lernende wiederfinden, die sie schon einmal mentoriert haben, und eine Beziehung zu ihnen aufbauen. Mentoren können Lernende sogar zu ihren Favoriten hinzufügen und damit diejenigen bevorzugt betreuen, mit denen sie zuvor gute Erfahrungen gemacht haben.

Blocklisten

Nach jeder Mentoring-Session können sowohl die Lernenden als auch der Mentor die jeweils andere Person blockieren. Es gibt zwei Blocklisten: blockierte Lernende und blockierte Mentoren. Wenn ich dich als Mentor blockiere, kannst du mich später trotzdem noch mentorieren. Die andere Person erfährt natürlich nicht, dass sie blockiert wurde, und kann sich deshalb nicht rächen.

Du kannst jemanden aus beliebigem Grund blockieren, aber wenn die Person gegen den Verhaltenskodex verstößt, melde sie bitte zusätzlich ausdrücklich, um andere Nutzende zu schützen.

Negative Folgen langer Wartezeiten abmildern

Der letzte Schritt im Umgang mit dem Problem langer Wartezeiten ist schließlich, dafür zu sorgen, dass die negativen Folgen des Wartens minimal sind, auch wenn du manchmal warten musst. In v3 hält dich das Warten auf Mentoring nicht davon ab, andere Übungen zu lösen. Du kannst im Track trotzdem weiterkommen.

Eine Mentoring-Session kann von beiden Seiten beendet werden. Wenn dir die Herangehensweise eines bestimmten Mentors nicht gefällt, kannst du jederzeit um eine andere Herangehensweise bitten oder die Session verlassen. Egal wie die Mentoring-Session endet, die Lernenden können für dieselbe Lösung eine neue Mentoring-Session mit einem anderen Mentor anfragen.

Mentoring-Slots

Pro Track kannst du 1 bis 4 Mentoring-Slots haben. Mehrere Mentoring-Slots helfen dir, wenn du für eine schwierige Übung Mentoring anfragen möchtest, bei der es unwahrscheinlicher ist, schnell betreut zu werden. Gleichzeitig kannst du für andere Übungen trotzdem Mentoring bekommen.

Mentoring-Slots lassen sich durch das Sammeln von Reputation freischalten. Reputation bekommst du, wenn du deine Lösungen veröffentlichst, damit alle sie durchstöbern können, wenn du Lernende mentorst und wenn du zu einem der Repositories von Exercism beiträgst. Das heißt, Lernende, die mehr zur Plattform beitragen, bekommen mehr Mentoring.

Zusammenfassung

Das sind einige der wichtigsten Veränderungen, die Exercism am 1. September 2021 erfahren hat.

Wir haben Lernübungen hinzugefügt, damit du lernen kannst, ohne die Plattform zu verlassen, einen Web-Editor, damit du programmieren kannst, ohne etwas zu installieren, und Analyzer und Representer, damit du sofort automatisiertes Feedback bekommst. Außerdem haben wir viele frustrierende Hürden aus dem Mentoring-Prozess entfernt.

Und es gibt noch so viel anderes Neues zu entdecken: unseren Contributing-Bereich, Badges, neue Profile, eine Journey-Seite mit deiner gesamten Exercism-Historie und vieles mehr.

Komm vorbei auf exercism.org und probier es aus.

Danke.

11. September 2021 · Fandest du ihn hilfreich?