Ein Interview mit Erik Schierboom, in dem er und Jeremy Walker über funktionale Programmierung, die Wartung von Exercism-Tracks und die bevorstehende statische Analyse von Exercism-Lösungen sprechen.
Hi Erik. Danke, dass du im ersten Exercism Contributor Spotlight dabei bist! Wir wollten deine Arbeit hervorheben, weil es sich anfühlt, als würdest du zu jedem Teil von Exercism beitragen und dabei tolle Einblicke aus der Arbeit am ganzen Projekt mitbringst!
Zum Einstieg: Wie bist du zum ersten Mal zu Exercism gekommen?
2014 habe ich einen Kurs über funktionale Programmierung gemacht, in dem Scala die Programmiersprache war. Nach dem Kurs habe ich nach Material gesucht, um meine Scala-Kenntnisse weiter zu verbessern, und bin dabei auf Exercism gestoßen. Es dauerte nicht lange, da war ich begeistert und fing an, auch andere Sprach-Tracks auf Exercism zu machen. Weil mir die Kommentare, die andere zu meinen Lösungen hinterlassen hatten, sehr geholfen haben, begann ich anschließend, selbst Lösungen im C#-Track zu kommentieren. Irgendwann wurde ich gefragt, ob ich Maintainer des C#-Tracks werden möchte, was ich gerne annahm. Fünf Jahre später bin ich jetzt Mentor in den C#- und F#-Tracks, Maintainer der C#-, F#- und Scala-Tracks und arbeite an den track-übergreifenden Problemspezifikationen mit.
Schön. Du bist also sehr früh zu Exercism gekommen. Für alle, die es nicht wissen: Kannst du bitte erklären, was es bedeutet, Maintainer bei Exercism zu sein?
Klar. Abstrakt gesprochen ist ein Exercism-Maintainer für die „Gesundheit“ eines Tracks verantwortlich. In der Praxis kann das sehr vieles bedeuten, zum Beispiel neue Übungen zu implementieren, bestehende Übungen zu aktualisieren oder Pull Requests von anderen Maintainern zu reviewen. Ein weiterer wichtiger Aspekt ist die richtige Reihenfolge der Übungen eines Tracks, damit die Teilnehmer die bestmögliche Lernerfahrung haben. Beachte, dass es als Maintainer nicht bedeutet, dass man all die genannten Tätigkeiten ausüben muss; es ist völlig in Ordnung, wenn ein Maintainer sich nur auf ein oder zwei Tätigkeiten konzentriert.
Danke! Neben deinem Schwerpunkt auf C#, F# und Scala hast du so ziemlich jeden Sprach-Track auf Exercism durchgearbeitet. Hast du aus der Sicht eines Lernenden besondere Favoriten?
Obwohl ich von jedem Track, den ich durchgearbeitet habe, enorm viel gelernt habe, ist mein Lieblings-Track der Haskell-Track. Er ist nicht nur eine großartige Sprache mit vielen interessanten Konzepten, auch die Qualität seiner Mentoren war absolut beeindruckend. Weitere Favoriten sind die Kotlin- und F#-Tracks. Kotlin und F# sind extrem gut durchdachte und pragmatische Sprachen, in denen ich sehr gerne programmiere.
Ja, über die Haskell-Mentoren höre ich viele großartige Dinge! Ich stelle mir vor, dass dir das Durcharbeiten so vieler Tracks jede Menge interessante Einblicke ins Programmieren gegeben hat. Gab es etwas Konkretes, das du aus dieser Erfahrung gelernt hast?
Oh ja, jede Menge! Wenn man mit einer großen Vielfalt an Sprachen arbeitet, lernt man viele verschiedene Herangehensweisen an Probleme kennen. Diese unterschiedlichen Ansätze haben alle auf irgendeine Weise meinen Programmierstil beeinflusst, wobei die funktionalen Sprachen mich wohl am meisten geprägt haben. Heute stelle ich fest, dass ich funktionale Konzepte nutze, wann immer ich kann, sogar in nicht-funktionalen Sprachen (die nach und nach funktionale Features übernehmen).
Außerdem habe ich gelernt, dass viele Sprachen sich tatsächlich ziemlich ähnlich sind, obwohl jede Sprache anders ist. Dadurch wird es viel einfacher, eine neue Sprache zu lernen, wenn man schon ein paar kennt. Wer Haskell kennt, kann zum Beispiel wahrscheinlich relativ schnell F# oder Scala lernen. Neue Sprachen zu lernen kann deshalb auch ein guter Karriereschritt sein, weil man dann leichter zwischen Sprachen wechseln kann.
Und schließlich habe ich gelernt, dass es den Prozess viel angenehmer und effektiver macht, wenn einen Mentoren beim Erlernen einer Sprache begleiten.
Das geht mir genauso. Von anderen zu lernen bringt so viel! Praktisch gesehen: Wie bist du mit der ganzen Einrichtung für die verschiedenen Sprachen umgegangen? Ich finde den Gedanken, eine neue IDE zu lernen, oft ein wenig einschüchternd. Bist du bei den Sprachen bei einem Editor geblieben, den du kanntest, oder hast du gewechselt, um eine möglichst idiomatische Erfahrung zu bekommen?
Bei manchen Sprachen war es früher etwas mühsam, eine neue Entwicklungsumgebung einzurichten, aber heute lassen sich die meisten Sprachen ziemlich einfach einrichten. Danach versuche ich, eine IDE zu finden, die mir für genau diese Sprache das beste Erlebnis bietet. Da ich abwechselnd unter Windows und Mac OS arbeite, sollte die IDE außerdem plattformübergreifend sein. Ein Beispiel für eine großartige, plattformübergreifende IDE ist Visual Studio Code, den ich für die Tracks Haskell, JavaScript, TypeScript, Elm und Elixir nutze. Für die anderen Tracks verwende ich eine JetBrains-IDE: Rider für C# und F#, IntelliJ IDEA für Java, Scala und Kotlin und schließlich RubyMine für Ruby (Hinweis: auch diese IDEs sind plattformübergreifend). Wie du siehst, nutze ich mehrere Editoren, um für jede Sprache das beste Erlebnis zu bekommen (wobei sich die JetBrains-IDEs natürlich ziemlich ähnlich sind).
Profi-Tipp: Wenn du Kernentwickler eines Open-Source-Projekts bist, kannst du bei JetBrains eine kostenlose Open-Source-Lizenz beantragen!
Das ist super nützlich. Danke! Du bist also Maintainer für C#, F# und Scala. Was fasziniert dich besonders an diesen Sprachen?
C# wurde sofort meine Lieblingssprache, als es 2002 veröffentlicht wurde. Es ist eine gut durchdachte, elegante Sprache mit großartigen Tools und Dokumentation. Die Sprache entwickelt sich außerdem recht schnell weiter, sodass es immer etwas Neues zu lernen gibt! Ein letztes Plus: Sie läuft auf dem hervorragenden .NET-(Core-)Framework.
F# war ebenfalls Liebe auf den ersten Blick. Mit seiner eleganten Syntax und den vielen (funktionalen) Sprachfeatures konnte ich mit weniger Code mehr erreichen, besonders beim Domain-Modeling. F# ist außerdem eine sehr pragmatische Sprache mit objektorientierten Features und einer hervorragenden Interoperabilität mit bestehendem .NET-Code (sie läuft auf demselben .NET-(Core-)Framework wie C#). Eine weitere Stärke sind seine Tools, die zu den besten gehören, die es für funktionale Sprachen gibt. Als Bonus bietet sie außerdem eine meiner liebsten Spracheinführungen überhaupt, auf der Website fsharpforfunandprofit.
Scala war die Sprache, die mich in die funktionale Programmierung eingeführt hat, und deshalb hat sie einen besonderen Platz in meinem Herzen. Wie F# ist sie eine pragmatische Sprache, aus ziemlich ähnlichen Gründen. Durch ihre Integration in das Java-Ökosystem hat sie wirklich dazu beigetragen, die funktionale Programmierung bekannter zu machen.
Interessant, dass du über Scala zur funktionalen Programmierung gekommen bist, bei F# als Mentor tätig bist, aber Haskell als den besten Track einschätzt. Was würdest du jemandem empfehlen, der auf Exercism in die funktionale Programmierung eintauchen möchte, zuerst auszuprobieren?
Gute Frage! Meine Stimme geht an F#, weil ich finde, dass es die am leichtesten zu lernende Sprache ist. Das liegt vor allem daran, dass F# weniger komplex ist als die anderen beiden. Die hervorragenden Tools und die gute Dokumentation von F# sind beim Einstieg ebenfalls ein großes Plus. Trotzdem empfehle ich sehr, nach dem F#-Track auch beim Haskell-Track mitzumachen, denn Haskell hat einige fantastische, fortgeschrittene Features, die F# nicht hat.
Du bist in viele unserer Pläne für die Zukunft von Exercism eingeweiht. Gibt es etwas, worauf du dich beim Projekt besonders freust?
Von allen geplanten Verbesserungen freue ich mich am meisten über die statische Analyse von Lösungen. Die Idee ist, dass wir ein System aufsetzen, das automatisch Kommentare zu eingereichten Lösungen abgeben kann, indem es diese Lösungen programmatisch auf häufige Probleme und Verbesserungsvorschläge hin analysiert. Das dürfte den Mentoren stark helfen, weil sie dann nicht mehr zu diesen häufigen Problemen und Vorschlägen kommentieren müssen und sich auf interessantere Probleme konzentrieren können.
Wenn du neugierig bist, schau dir meinen (frühen) Prototyp eines C#-Track-Analyzers an, der die .NET Compiler Platform nutzt, um C#-Code statisch zu analysieren.
Ja, die statische Analyse ist für mich auch so ziemlich das Spannendste. Es ist großartig zu sehen, dass du schon einen Prototyp zusammenhast. Ich denke, die Geschwindigkeitsverbesserungen, die uns die statische Analyse bringen wird, werden Exercism dramatisch verbessern, und ich bin sehr gespannt darauf, wie wir sie erweitern können, um absoluten Anfängern das Programmieren beizubringen. Ich finde, das ist ein echter Gamechanger.
Letzte Frage: Gibt es persönliche Projekte oder Anliegen, die dir am Herzen liegen und die du gerne erwähnen möchtest?
Für mich war es eine unglaublich bereichernde Erfahrung, mich bei Exercism zu engagieren, zur Open-Source-Codebasis beizutragen und Menschen als Mentor zu begleiten. Ich habe jede Menge gelernt, einige wirklich großartige Menschen kennengelernt und habe das Gefühl, vielen Menschen helfen zu können.
Ich möchte die Leute ermutigen, zu schauen, ob sie sich ebenfalls einbringen können. Wenn du eine Sprache hast, für die du brennst, und anderen beim Lernen helfen möchtest, melde dich auf Exercism als Mentor an. Wenn du lieber Code schreibst, such dir ein Open-Source-Projekt und bring dich ein. Ich verspreche dir, es ist viel weniger beängstigend, als es klingt, und es wird sich großartig anfühlen!
Großartig! Danke, dass du dir die Zeit für das Gespräch genommen hast und für all deine Arbeit bei Exercism!