Szoftverfejlesztő vagyok, de nem fogom programozásra tanítani a gyerekemet, és neked se kéne
A Christophorus Waldorf Iskola folyamatosan bővülő közösségében viszonylag sokan informatikusok. Vajon miért választották ők is a Waldorf-iskolát, ahol bizony még csak digitális tábla sincs a termekben (és szándékosan nem is lesz)? Erre a kérdésre is választ ad az alábbi külföldi cikk…
A közelmúltban egy késő esti tápszervásárlás során lettem figyelmes egy nagy könyvstandra, amelyen gyerekeket programozásra oktató könyveket árultak. Láttam már korábban is ilyen könyveket, de sosem láttam ekkora standot, amely az általános iskolás gyerekeknek szólt. Ezek a könyvek is részei annak az oktatási áradatnak (nyári programozói táborok, iskola utáni programozó szakkörök, óvodásoknak szóló, a JavaScript alapjait oktató alkalmazások), amely a gyerekeket kívánja a jövőben is hasznosítható tudással felvértezni.
Könnyű megérteni, hogy miért akarják a szülők rányomni a programozást a gyerekeikre. Hiszen, hogyan is készíthetnénk fel gyermekeinket egy olyan világra, amelyet szoftverek irányítanak? Logikusan gondolkodva talán úgy, hogy megtanítjuk őket, hogyan készítsék el azokat. Ha már minden automatizált lesz, az a legjobb, ha mi irányítjuk az automatizálást. És ha a programozás hasznos dolog, akkor még hasznosabb, ha minél hamarabb elsajátítjuk azt. Lehet, hogy ezek az oktatóeszközök képesek megtanítani egy adott programozási nyelvet, de valójában nincsen túl sok közük ahhoz, ahogyan egy szoftver valójában készül.
Egy múltbéli kollégám egy olyan alap programozó táborban tanult, amelynek az volt a mottója, hogy „A programozás az új írástudás.” Ez a szemlélet az alapja valamennyi programozást oktató könyvnek és játéknak is. Az egyik népszerű könyv ismertetőjében az állt, hogy a programozás-tanulás korai elkezdése „elengedhetetlen ahhoz, hogy a gyerekeket felkészítsük a jövőre”. Ez azt a benyomást kelti, hogy, ha a gyerekeket nem tanítjuk meg programozni, az olyan, mintha nem tanítanánk meg írni és olvasni.
Ez persze nevetséges. A programozás nem az új írástudás! A legtöbb szülő ugyan tud írni és olvasni, és tudnak olvasni a gyerekeiknek, de legtöbbjük nem programozó és nem tudja, milyen tudásra van szüksége egy programozónak. A gyerekeknek programozást oktató könyvek úgy mutatják be a programozást, mint egy feladványhalmazt, amelyre vannak „helyes” megoldások. És amennyiben a gyermek képes elsajátítani a programozási nyelv szabályait, a szintaxist, akkor gyorsan és könnyedén tud majd létrehozni dolgokat. A programozás azonban nem így működik. A programozás komplikált. A programozás a kreativitás és az elszántság elegye. A szoftverfejlesztő élete nem csak a szintaxisról szól, és egyes készségeket csak nagyon fiatalon lehet megtanulni. Pályám kezdetén írtam egy programot, amellyel távoli szerverek egy csoportját lehetett irányítani. A program kiválóan működött. Legalábbis 18 órán keresztül azt hittem, amikor is az éjszaka közepén elkezdett pittyegni a telefonom, mert a szerverek egy része meghibásodott. Kimásztam az ágyból, laptop elé ültem, lefuttattam a programot és lecseréltem a hibás szervereket. Pár órával később pár másik szerver is leállt.
Nem a szintaxisban volt a hiba. Ha azzal lett volna gond, akkor a szerverek már eleve nem indultak volna el. Sokkal mélyebb volt a probléma oka. A hiba azonosítása és megoldása jó pár hétbe telt és számtalanszor vert fel álmomból.
Ilyen a programozás. Próbálj ki valamit! Nézd meg, hogy működik-e! Próbáld újra! Ha a problémák egyértelműek lennének, akkor a javításukat már automatizálták volna, vagy legalábbis valamilyen nyíltforrású programkóddal megoldhatóak lennének. Amihez továbbra is programozó kell, az az egyedi megoldások létrehozásának bonyolult feladata. Arra nincsen könyv, hogyan lehet megoldani olyan problémákat, amikkel még senki sem találkozott korábban. Ezért nem akarom, hogy a gyerekeim szintaxist tanuljanak. Azt akarom, hogy tanulják meg, hogyan kell problémákat megoldani, hogyan kell egy dolog mélyére ásni, hogyan legyenek kreatívak. És ezt, hogyan tudjuk megtanítani?
Az egyik nap a fiamat elkezdte zavarni, hogy az egyik széke túlságosan imbolygott. Megnéztük a széket, és segített nekem a probléma azonosításában: az egyik csavar kilazult. Megkerestem az egyik kallódó csavarkulcsot, és megmutattam neki, hogyan kell visszacsavarozni vele a csavart. Ezután kíváncsivá vált, hogy mi történik, ha a másik irányba csavarja a csavart, és addig forgatta, amíg ki nem esett. Végül teljesen szétszedtük a széket és össze is raktuk párszor. Gyakran rossz helyre kerültek a darabok, de végül elégedett volt az eredménnyel. Próbálj ki valamit! Nézd meg, hogyan működik! Próbáld újra!
Persze az, hogy valami működjön csak az első lépés a szoftverfejlesztésben. A következő az, hogy a programkód letisztázott, újrafelhasználható és rendezett legyen. Egyszer, a pályám elején írtam egy szoftverfunkciót, és átadtam egy tapasztalt fejlesztőnek, hogy nézze át. Ránézett a hanyag betűközökre, a nem egyező sorokra, a hibás nomenklatúrára, és csak annyit mondott: „Kezdd újra!” Pedig működött. A szintaxis helyes volt. Mégis rossz volt az egész. A jó programozók nem csak arra törekednek, hogy működjön valami. Azt akarják, hogy jó legyen a szoftver.
Sok programozó számára azt a legnehezebb elsajátítani, hogyan lehet ezt a minőségi érzetet megvalósítani. A jól megtervezett programkóddal jó dolgozni, a rondán megírt kódtól pedig akaratlanul is összerándul a fejlesztő arcizma. A legjobb szoftverfejlesztők megtanulják, hogyan lehet az absztrakt logikát egy művész érzékenységével ötvözni. Megtanulni bízni ebben az esztétikai megérzésben legalább annyira része a szoftverfejlesztésnek, mint bármely algoritmus vagy programkódminta.
Nemrég a feleségem és én együtt készítettünk sütiket a fiunkkal. Mindig, amikor egy újabb hozzávalót kevertünk a tésztához, egy kicsit megálltunk és megnéztük a tésztát, átbeszéltük az állagát és a színét. Csomómentes lett? Egységesen kevertük el a hozzávalókat? Amikor kinyújtottuk a tésztát, a fiam megnézte a felületét, és figyelte a feleségemet, aki megmutatta, hogyan lehet az egészet egységesen vékonyra nyújtani. A legnehezebb rész azonban a szaggatás volt. Mint minden gyerek, a fiam is ösztönösen a kinyújtott tészta közepébe vágta bele a formát, ezért folyamatosan magyaráznunk kellett, hogyan lehet a legjobban egymás mellé helyezni a formákat, hogy a lehető leggazdaságosabban használjuk fel a tésztát.
Minden egyes lépés – a pontosan kimért hozzávalók, a tészta szemrevételezése a csomómentesség és egységesség miatt, a veszteség minimalizálására törekvő szaggatóforma-használat – tanított neki valamit a minőségről. Nehéz elmagyarázni a különbséget a lépések puszta kivitelezése, például egy recept követése és a valóban jól elvégzett munka között. Ezt csak úgy lehet átadni, ha valaki ráérez és megtapasztalja. És minden egyes alkalommal, amikor bevonod a gyermekedet valami olyan munkába, amit nagy becsben tartasz, akkor azt tanítod neki, hogyan kell valamit jól elvégezni. Arra tanítod, hogyan kell programozni.
De nem csupán arra tanítod. Arra is, hogy a világ tele van érdekes, felfedezendő dolgokkal. Azt is megmutatod ilyenkor, hogyan dolgozzanak szenvedélyesen és törekedjenek arra a megfoghatatlan minőségi érzetre mindenben, amivel foglalkoznak. A legjobb az egészben, hogy, ha nem is válnak programozókká (a legtöbbjük nem fog, és nem is kell nekik), akkor is fel tudják használni ezeket a készségeket az élet bármely területén, a hivatásukban vagy éppen a hobbijukban. Ha a szintaxis megtanulását erőltetjük a gyerekekre, akkor azt a képzetet erősítjük, hogy, ha egy készségnek nincsen kézzelfogható haszna, akkor az nem is értékes. A szintaxist a felnőttek is meg tudják tanulni. De csak a gyerekek képesek felfogni a kíváncsiság értékét.
Joe Morgan
Forrás: SLATE (https://slate.com/human-interest/2018/12/against-teaching-kids-to-code-creativity-problem-solving.html)