Tanterv


Egy teljes értékű Exercism-kurzusnak kétféle feladata van: tanulófeladatok és gyakorlófeladatok. Alapvetően különböznek, és remekül kiegészítik egymást.

A kurzus tanulófeladatai olyan feladatok, amelyek egy adott programozási nyelv alapját képező egyes fogalmak megtanítására készültek. Ezek a fogalmak alkotják a tantervet.

Ez a dokumentáció útmutatókat és tippeket tartalmaz arról, hogyan tervezz sikeresen tantervet a kurzusodhoz.

A tanterv célja

A tanterv végső célja, hogy a tanulók magabiztosan olvassanak és írjanak idiomatikus kódot a célnyelven.

Minden egyes tanulófeladat nagyon szűken fókuszált. Egy kicsi, célzott lépés, amely közelebb viszi a tanulót ahhoz, hogy megértsen valamit a nyelvből. Csak olyan fogalmakra épül, amelyeket korábban már bevezettünk.

A feladat megoldásával a tanuló elkezd ismerkedni a fogalommal. A megértés elsősorban a cselekvésen keresztül jön, sokkal kevésbé a magyarázatokon keresztül. A magyarázó tartalom bevezeti a tanulót azokba az ötletekbe, amelyekre a feladat megoldásához szüksége van (innen a fájlnév: „introduction.md”).

Szeretnénk, ha a tanulók azonnal elkezdhetnének kódot írni anélkül, hogy mindent előre meg kellene érteniük. Ennek érdekében elsiklunk a részletek felett, és sok mindent magyarázat nélkül hagyunk. Egyszerűsítünk, és ahol lehet, kódvázakat adunk. Ez csökkenti az indulás kognitív terhét, és teret ad az időnek, hogy a tudás elmélyüljön. Ezzel a megközelítéssel nem azt mondjuk, hogy a tanulónak nem kell tudnia ezeket, hanem azt, hogy még nem kell tudnia őket.

A legelső feladatokban gyakran szükségszerűen nem idiomatikus kód szerepel. Ez azért van, mert az elején a tanuló még a nyelv nagy részét nem ismeri, és a legtöbb fogalmat még nem vezettük be. Ha a legelső feladatokban megengedjük a nem idiomatikus kódot, a tanulók sok kisebb lépést tehetnek ismerős terepen, ahelyett hogy néhány nagyot lépnének az ismeretlenben. Ennek eredményeként gyorsabban és kevesebb súrlódással jutnak el az idiomatikus kód szintjére.

Alapvető felépítés

A feladatok fa szerkezetbe rendeződnek, amelynek csúcsán egy bevezető feladat áll kiindulópontként. A későbbi feladatok olyan fogalmakat tanítanak, amelyek korábban tanított fogalmak megértésére épülnek.

Átültetés és kölcsönzés

Érdemes lehet megnézni, hogyan építették fel más nyelvi kurzusok a tanulófeladataikat. Más nyelvi kurzusok tanulófeladataira itt találsz példákat.

Ha viszont úgy döntesz, hogy más feladatokat használsz kiindulópontként a sajátjaidhoz, figyelj rá, hogy a végeredmény egy olyan fogalomról szóljon, ahogyan az a te nyelvedben létezik. A fogalmak néha alig észrevehetően, néha gyökeresen különböznek. Néha pedig egyáltalán nem léteznek más nyelvekben.

A tantervnek, és így a fogalomfának is, az adott nyelvben létező fogalmakat kell tükröznie.

Ne vegyél fel fogalmakat csak azért, mert más kurzusokban is szerepelnek.

Bizonyos esetekben csábító lehet felvenni egy fogalmat, mert az emberek gyakran kénytelenek megkerülni a meglévő fogalmak használatával. Ahelyett, hogy ezt tennéd, vezettesd be azt a fogalmat, amelyet a nyelv valóban használ, és fontold meg egy olyan feladat hozzáadását, amely elmagyarázza, hogyan kell használni az ilyen helyzetekben.

Például Go-ban nincsenek enumok. A Go fogalomfája helyette konstansokat vezet be, és megtanítja, hogyan használd a konstansokat olyan helyzetekben, ahol más nyelvekben enumokat használnál.

Segítségkérés

Ne habozz segítséget kérni. Jobb előre vagy a feladaton dolgozva kérdezni, mint a kódáttekintés során megvitatni.

GitHubon megemlítheted a @exercism/learning-mode csapatot. Az Exercism fórumon nyiss egy issue-t az Exercism Support kategóriában.

Első lépések

A tapasztalatunk azt mutatja, hogy a tanterv fejlesztésének legpragmatikusabb módja, ha a fogalomfát organikusan növesztjük, a legegyszerűbb fogalmakkal kezdve. Nem kell mindent előre megtervezni, sőt általában kifejezetten hasznos, ha nem gondolkodunk túl előre.

A fogalmak minimumával kezdünk: azokkal, amelyek a legfontosabbak ahhoz, hogy bármit írjunk a nyelven. Igyekszünk olyan fogalmakkal kezdeni, amelyek a legtöbb fejlesztő számára a legismerősebbek. Az ismerős jó. Az ismerős nem zavaró.

Ne feledd: bár a végcél az idiomatikus kód írása, a hozzá vezető kövek nem mindig idiomatikusak. Ha ismerős dolgokat használunk, még ha azok nem is remek példái az adott nyelv kódjának, az segít a tanulónak gyorsabban eljutni a nyelvre jellemzőbb kódhoz.

Az első feladat kidolgozása

Ahelyett, hogy előre megpróbálnád feltérképezni a teljes fogalomfát, egyszerűen kezdd az első feladattal. Az első feladat célja, hogy a tanuló a lehető legkisebb súrlódással kezdhesse el a tanulást. Ez a legelső lépés afelé, hogy megismerkedjen azzal, hogyan néz ki a kód ezen a nyelven. Lehet, hogy egy kis kódrészletet írnak, vagy csak egy-két kiegészítést tesznek egy vázba a feladat befejezéséhez. A tanulók már megoldották a „Hello, World!”-öt, hogy hozzáférjenek ehhez a feladathoz. De a „Hello, World!”-ben csak a szöveget változtatják meg. Lehet, hogy a nyelv szintaxisa még teljesen ismeretlen számukra. Törekedj a gyors sikerre, és arra, hogy a tanulók épp annyira ismerjék meg a szintaxis legszükségesebb elemeit, hogy magabiztosan tovább tudjanak lépni.

További részletek az első feladat kidolgozásáról.

A következő feladatok

Az első feladatnak ki kell nyitnia néhány olyan feladatot, amelyek alapvető fogalmakat vezetnek be. Ezek olyan dolgok lesznek, mint a primitívek vagy alaptípusok, és az ezeken végzett egyszerű műveletek.

További részletek a következő feladatok kidolgozásáról.

És aztán?

Itt kezd gyakran igazán érdekessé válni. Ezen a ponton rengeteg mindent bevezethetsz. Hogyan döntöd el, melyik fogalmakat vedd sorra ezután?

Igazából nem igazán számít. Amíg valahol ésszerűnek tűnő módon kezded, rendben lesz.

További részletek arról, hogy mit értünk „ésszerű” alatt a fogalomfa bővítése kapcsán.

Ne alakítsd át a gyakorlófeladatokat

Egy jó tanulófeladat rendkívül fókuszált, és ideális esetben csak egy fogalmat tanít. Általában csak egyetlen elvárt megközelítés van a megoldására. Ez ellentétben áll a gyakorlófeladatokkal, amelyek nyitottak, és kifejezetten a felfedezésre ösztönöznek.

Egy jó tanulófeladat általában rossz gyakorlófeladat, és fordítva. Mivel a gyakorlófeladatok és a tanulófeladatok célja teljesen más, nem alakítunk át gyakorlófeladatokat tanulófeladatokká. Minden tanulófeladatot nulláról írunk, vagy olyan történetekre alapozzuk őket, amelyeket kifejezetten egyszerű fogalmak tanítására alkottak.

Bátorítjuk, hogy siklj el a részletek felett

Néha úgy érzed majd, hogy holtpontra jutottál. Az A fogalom megértéséhez a B fogalom kell, a B megértéséhez pedig az A.

Ebben az esetben egyszerűsíts. Siklj el az egyik bonyolultsága felett, hogy a tanulók megismerkedhessenek a másikkal. Teljesen rendben van azt mondani, hogy valamit később részletesebben bevezetünk, és hogy egyelőre a tanulónak csak ezt az egy darabot kell megértenie.

A fogalmakat szakaszosan és idővel értjük meg egyre mélyebben.

Történetek kiválasztása

Egy tanulófeladatnak mindig van története.

Ha egy feladatot más kurzusból forkoltál, akkor annak már lesz története. Ebben az esetben készen is vagy.

Ha meg akarod nézni, vannak-e használható meglévő történetek vagy forkolható feladatok, nézd meg a történetek listáját.

Ha van egy fogalmad, de nincs történeted, akkor azt javasoljuk, hogy írj egy kicsi, egyszerű kódpéldát, amely használja a bevezetni kívánt fogalmat. Ezután dolgozz visszafelé, és alkoss egy történetet a kód köré. Tartsd a történetet bután egyszerűnek. Nem kell jó szépirodalomnak lennie. Nem kell erős cselekmény vagy karakterfejlődés. Akár csak néhány soros is lehet.

Beszéld meg a történetötleteidet az Exercism csapatával. Nagy tapasztalatunk van megfelelő történetek kitalálásában.

Amint megvan a történet, valószínűleg kicsit igazítanod kell a kódon, hogy illeszkedjen hozzá.

Közreműködések a közösségtől

A tanterven való munka két különálló, de egymással összefonódó tevékenységet foglal magában:

  1. Tantervtervezés: fogalmak kiválasztása és sorrendbe állítása
  2. Feladatmegvalósítás: dokumentáció írása és feladatok létrehozása e fogalmak tanítására

Úgy tapasztaltuk, hogy egyszerre szórakoztató és gazdagító, ha a szélesebb közösséget is bevonjuk a feladatok megvalósításába. Maga a tantervtervezés viszont könnyebben megoldható egy kis közreműködői csapattal, amelynek minden tagja azon dolgozik, hogy megértse a teljes tantervet annak minden bonyodalmával együtt.

Mindazonáltal azt javasoljuk, hogy a tantervtervező csapat először az első öt-hat fogalmat valósítsa meg, mielőtt megnyitná a terepet a közösségi közreműködés előtt. Ez segít abban, hogy a tantervtervező csapat tagjai maguk is megértsék a folyamatot, mielőtt a szélesebb közösség pull requestjeit kellene átnézniük.

Ezenkívül könnyebb issue-kat létrehozni ezekhez a magasabb szintű fogalmakhoz, és a közösség tagjai is szórakoztatóbbnak szokták tartani a velük való munkát, mivel kevesebb megkötéssel kell törődniük.

Issue-k létrehozása

Még mindig nem jöttünk rá, hogyan a legjobb issue-kat létrehozni a tanulófeladatok elkészítéséhez.

Néhány kurzusban megpróbáltunk külön issue-kat létrehozni magához a fogalomhoz és a feladathoz. Másokban olyan issue-kat próbáltunk létrehozni, amelyekben egy végigyeendő ellenőrzőlista van. Összességében úgy gondoljuk, hogy ez még mindig túl ijesztő, és szeretnénk jobb megoldást találni.

Kérünk, beszélj velünk a folyamatról, amikor elkezdesz issue-kat készíteni, és mindent megteszünk, hogy segítsünk kitalálni, hogyan tovább.

Frissíteni fogjuk a dokumentációt, ahogy jobb megoldásokat ismerünk meg erre.