Interjú Erik Schierboom-mal, amelyben ő és Jeremy Walker a funkcionális programozásról, az Exercism kurzusainak karbantartásáról és az Exercism-megoldások közelgő statikus elemzéséről beszélgetnek.
Szia Erik! Köszönjük, hogy szerepelsz az első Exercism Közreműködői Reflektorfényben! Azért szerettük volna kiemelni a munkádat, mert úgy tűnik, hogy az Exercism minden zugában közreműködsz, és remek meglátásaid vannak abból, hogy az egész projekten dolgoztál!
Akkor egy kis háttér: hogyan kerültél először kapcsolatba az Exercism-mel?
2014-ben elvégeztem egy funkcionális programozási kurzust, amelynek a nyelve a Scala volt. Miután befejeztem a kurzust, olyan anyagokat kerestem, amelyekkel tovább fejleszthetem a Scala-tudásomat, és így találtam rá az Exercism-re. Nem sok idő telt el, és már teljesen beszippantott, más nyelvek kurzusaival is elkezdtem foglalkozni az Exercism-ön. Miután nagy hasznát vettem a megoldásaimra írt hozzászólásoknak, magam is elkezdtem hozzászólni a C#-kurzus megoldásaihoz. Egy ponton felkértek, hogy legyek a C#-kurzus karbantartója, amit örömmel elfogadtam. Öt évvel később már mentor vagyok a C# és F# kurzusokban, a C#, F# és Scala kurzusok karbantartója vagyok, és segítek a kurzusok közötti feladatspecifikációk kidolgozásában.
Remek. Tehát nagyon korán, még az Exercism életének elején bekapcsolódtál. Azok kedvéért, akik nem tudják, elmagyaráznád, mit jelent Exercism-karbantartónak lenni?
Persze. Elvontan fogalmazva egy Exercism-karbantartó egy kurzus „egészségéért” felelős. A gyakorlatban ez rengeteg mindent jelenthet, például új feladatok megvalósítását, a meglévő feladatok frissítését vagy más karbantartók pull requestjeinek átnézését. Egy másik fontos szempont a kurzus feladatainak helyes sorrendbe állítása, hogy a tanulók a lehető legjobb tanulási élményt kapják. Fontos, hogy a karbantartói szerep nem jelenti azt, hogy valakinek minden fent említett tevékenységben részt kell vennie; az is teljesen rendben van, ha egy karbantartó csak egy-két tevékenységre összpontosít.
Köszönöm! A C#-ra, F#-ra és Scala-ra összpontosító figyelmed mellett szinte az Exercism összes nyelvi kurzusát végigcsináltad. Van olyan, amelyet a tanuló szemszögéből különösen kedvelsz?
Bár minden kurzusból rengeteget tanultam, amelyikkel foglalkoztam, a kedvencem egyértelműen a Haskell-kurzus. Nemcsak nagyszerű nyelv rengeteg érdekes fogalommal, hanem a mentorai is elképesztően jók voltak. További kedvenceim a Kotlin- és az F#-kurzus: a Kotlin és az F# rendkívül jól megtervezett és pragmatikus nyelvek, amelyekben imádok programozni.
Igen, sok jót hallok a Haskell mentorairól! El tudom képzelni, hogy ennyi kurzus végigcsinálása rengeteg érdekes meglátást adott neked a programozásról. Volt valami konkrét, amit ebből a tapasztalatból tanultál?
Ó, igen, rengeteg mindent! Ha az ember sokféle nyelvvel dolgozik, az sok különböző problémamegközelítéssel ismerteti meg. Ezek a különböző megközelítések mind hatottak valamilyen módon a programozási stílusomra, bár valószínűleg a funkcionális nyelvek hatottak rám a legjobban. Ma már azon kapom magam, hogy amikor csak lehet, funkcionális fogalmakat használok, még a nem funkcionális nyelvekben is (amelyek lassan magukba építik a funkcionális jellemzőket).
Az is megtanultam, hogy bár minden nyelv más, sok valójában meglehetősen hasonló. Ezért sokkal könnyebbé válik egy új nyelv megtanulása, ha már ismersz néhányat. Például ha ismered a Haskellt, valószínűleg viszonylag gyorsan el tudod sajátítani az F#-ot vagy a Scala-t. Az új nyelvek megtanulása így jó karrierlépés is lehet, hiszen könnyebben tudsz váltani a nyelvek között.
Végül azt is megtanultam, hogy ha mentorok vezetnek egy nyelv tanulása közben, az sokkal élvezetesebbé és hatékonyabbá teszi a folyamatot.
Ugyanezt tapasztaltam. A másoktól tanulás igazán megsokszorozza a fejlődést! Gyakorlati szempontból hogyan boldogultál a különböző nyelvek összes beállításával? Számomra gyakran egy kicsit ijesztő a gondolat, hogy egy új IDE-t kell megtanulni. Kitartottál egy ismert szerkesztő mellett, miközben a nyelvekkel foglalkoztál, vagy váltogattad, hogy idiomább élményt kapj?
Néhány nyelvnél régen kicsit macerás volt egy új fejlesztői környezet beállítása, de manapság a legtöbb nyelvet meglehetősen könnyű beállítani. Ilyenkor igyekszem olyan IDE-t találni, amely a legjobb élményt nyújtja az adott nyelvhez. Mivel felváltva dolgozom Windows-on és Mac OS-en, az IDE-nek platformfüggetlennek is kell lennie. Egy nagyszerű, platformfüggetlen IDE például a Visual Studio Code, amelyet a Haskell, JavaScript, TypeScript, Elm és Elixir kurzushoz használok. A többi kurzushoz JetBrains IDE-t használok: Rider-t a C# és F# kurzushoz, IntelliJ IDEA-t a Java, Scala és Kotlin kurzushoz, végül RubyMine-t a Ruby kurzushoz (megjegyzés: ezek is platformfüggetlen IDE-k). Amint láthatod, több szerkesztőt használok, hogy minden nyelvnél a legjobb élményt kapjam (bár a JetBrains IDE-k nyilvánvalóan meglehetősen hasonlóak).
Profi tipp: ha egy nyílt forráskódú projekt alapvető közreműködője vagy, a JetBrains lehetővé teszi, hogy ingyenes nyílt forráskódú licencet igényelj!
Ez nagyon hasznos. Köszönöm! Szóval a C#, F# és Scala karbantartója vagy. Mi vonz különösen ezekhez a nyelvekhez?
A C# azonnal a kedvenc nyelvemmé vált, amikor 2002-ben megjelent. Jól megtervezett, elegáns nyelv, remek toolinggal és dokumentációval. A nyelv ráadásul meglehetősen gyorsan fejlődik, ami azt jelenti, hogy mindig van mit tanulni! Végül egy pluszpont, hogy a kiváló .NET (Core) keretrendszeren fut.
Az F# is első látásra szerelem volt. Az elegáns szintaxissal és a (funkcionális) nyelvi jellemzők gazdag készletével azt vettem észre, hogy kevesebb kóddal többet tudok elérni, különösen a domainmodellezés során. Ez is egy nagyon pragmatikus nyelv, objektumorientált jellemzőkkel és remek együttműködéssel a meglévő .NET-kóddal (ugyanazon a .NET (Core) keretrendszeren fut, mint a C#). További erőssége a tooling: a funkcionális nyelvekhez elérhető legjobbak közé tartozik. Ráadásként a fsharpforfunandprofit weboldalon található az egyik kedvenc nyelvi bevezetőm.
A Scala volt az a nyelv, amely megismertetett a funkcionális programozással, ezért különleges helyet foglal el a szívemben. Az F#-hoz hasonlóan ez is pragmatikus nyelv, nagyjából ugyanezen okokból. A Java ökoszisztémájába való integrációjával igazán segített népszerűsíteni a funkcionális programozást.
Érdekes, hogy a Scalán keresztül ismerkedtél meg a funkcionális programozással, F#-ot mentorálsz, mégis a Haskellt tartod a legjobb kurzusnak. Ha valaki be szeretne merülni a funkcionális programozásba az Exercism-ön, melyiket ajánlanád neki elsőként?
Remek kérdés! Az én szavazatom az F#-é, mert úgy érzem, ezt a legkönnyebb elsajátítani. Ez főként azért van, mert az F# nyelv kevésbé összetett, mint a másik kettő. Az F# kiváló tooling és dokumentáció is nagy előnyt jelent a kezdésnél. Mindezek mellett nagyon ajánlom, hogy az F#-kurzus befejezése után csatlakozz a Haskell-kurzushoz is, mert a Haskellnek vannak olyan fantasztikus, haladó funkciói, amelyekkel az F# nem rendelkezik.
Beavatva vagy az Exercism jövőjével kapcsolatos terveink jó részébe. Van valami, ami különösen izgat a projekttel kapcsolatban?
Az összes tervezett fejlesztés közül a megoldások statikus elemzése izgat a legjobban. Az elképzelés az, hogy létrehozunk egy rendszert, amely automatikusan hozzászól a beküldött megoldásokhoz azzal, hogy programozottan elemzi őket gyakori problémákra és javaslatokra. Ez sokat segíthet a mentoroknak, mert többé nem kell ezekhez a gyakori problémákhoz és javaslatokhoz hozzászólniuk, és az érdekesebb problémákra összpontosíthatnak.
Ha érdekel, nézd meg a C#-kurzus-elemző (korai) prototípusát, amely a .NET Compiler Platform-ot használja a C#-kód statikus elemzéséhez.
Igen, a statikus elemzés számomra is szinte a legizgalmasabb dolog. Fantasztikus látni, hogy már van egy kész prototípusod. Úgy gondolom, hogy a sebességjavulás, amelyet a statikus elemzés hoz majd nekünk, drámaian javítja az Exercism-öt, és nagyon izgat, hogyan tudjuk kiterjeszteni arra, hogy teljes kezdőket tanítsunk programozni. Szerintem ez igazi áttörés.
Utolsó kérdés: van olyan személyes projekted vagy ügy, amely közel áll a szívedhez, és szeretnéd megemlíteni?
Számomra hihetetlenül jutalmazó élmény volt bekapcsolódni az Exercism-be, közreműködni a nyílt forráskódú kódbázisában és mentorálni az embereket. Rengeteg dolgot tanultam, megismertem néhány igazán remek embert, és úgy érzem, sokaknak tudtam segíteni.
Szeretnék mindenkit bátorítani, hogy nézze meg, ő is be tud-e kapcsolódni. Ha van egy nyelv, amely iránt lelkes vagy, és szeretnél segíteni az embereknek megtanulni, akkor jelentkezz mentornak az Exercism-ön. Ha inkább kódot írnál, válassz egy nyílt forráskódú projektet, és járulj hozzá. Ígérem, sokkal kevésbé ijesztő, mint amilyennek hangzik, és nagyszerűen fogod érezni magad közben!
Fantasztikus! Köszönjük, hogy időt szántál a beszélgetésre és az Exercism-ön végzett munkádért!