Kicsit talán még tartja magát az a sztereotípia, hogy a programozó zsíros hajú, pattanásos, szódásüveg-szemüveges, szociális téren kihívásokkal küzdő, magának való lúzer. A valóságban természetesen programozóból is sokféle van, és – mivel a mindennapi életünkben egyre fontosabb szerephez jut a valamilyen értelemben vett programozás – a programozók sokfélesége egyre csak fokozódik.
Nyugodtan kijelenthetjük, hogy a XXI. századi digitális írástudásnak része a programozás alapjainak ismerete. Egyre több programozható eszköz vesz körbe bennünket. A zsebünkben hordott okostelefonjaink számítógépként jóval többre képesek, mint a húsz évvel ezelőtti asztali számítógépek. Otthonaink egyre szélesebb körben automatizálhatók. Lassan elmosódnak a határok; az informatika mindenhova beszivárog a tévéktől kezdve az autókon át a karórákig. Ezeknek az ,,okos" eszközöknek a működését jobban megérthetjük, hibáik előtt kevésbé állunk tanácstalanul, ha a programozás alapfogalmaival tisztában vagyunk – ha van intuitív képünk arról, hogyan épül fel egy program, és milyen programozási hibák milyen működési hibákat eredményeznek.
Jelen sorok írója tízéves korában kezdett programozni tanulni, és ez meghatározó tapasztalat volt annak ellenére, hogy az akkori számítógépek (például az, amelyen a szerző is tanult: a Sinclair ZX81) nyújtotta felhasználói élményt össze sem lehet hasonlítani a ma megszokottal. A programozni tanulás egy mai gyerek számára is ugyanilyen lenyűgöző tud lenni, és pusztán a logikus, analitikus gondolkodást, a végrehajtó működéseket, a dekompozíciós készséget fejlesztő hatása miatt azok számára is hasznos, akikből később nem lesz programozó.
Tudtommal egyetlen kifejezetten gyerekeknek szóló programozás-könyv van a magyar könyvpiacon, ez pedig a Carol Vorderman-féle, amely a HVG Kiadó gondozásában jelent meg 2016-ban Budapesten (fordította Csitári Gyula és Csordás András). Az alábbiakban ezt a könyvet mutatom be röviden.
Bevallom, a szerző neve ismeretlen volt a számomra, és amikor rákerestem, elsősorban az derült ki róla, hogy műsorvezető; szakmai sovinizmusom rögtön lebiggyesztette az ajkát és nagyképűen azt kérdezte: ,,ugyan mit tudhat egy tévés személyiség a programozásról?". Miután a szakmai sovinizmusomat sarokba állítottam, továbbolvastam és megtudtam, hogy a hölgynek mérnöki diplomája van, a könyvet pedig további mérnökökkel és természettudósokkal együtt írta. Hihetővé vált, hogy a könyvből valóban meg lehet tanulni egyet s mást a programozásról.
A könyvet nyolcéves fiamon teszteltem, akit eleve érdekelt a téma, és már olvasott kb. fél oldalnyit a Scratch nyelvről egy másik könyvben. Örömmel forgatta a Programozás gyerekekneket, és szerintem többször is elolvasta, de nem elejétől a végéig, hanem a fejezetek között ugrálva.
A könyv általános bevezetővel kezdődik; érdemi első fele a Scratch nevű, kifejezetten kezdőknek való programozási nyelvről és a hozzá tartozó fejlesztőkörnyezetről szól. A Scratch nagy előnye, hogy a programozás folyamata teljesen vizuális. A gyerekeknek nem kell egy formális szintaxist (egy programozási nyelv elemeit és helyesírását) megjegyezniük, hanem kész utasításblokkokat huzigálhatnak egymás alá az egérrel, és elegendő egy-egy paramétert beállítani itt-ott. Nagyon kevés tanulás után is látványos eredményeket lehet elérni: a könyv több mini játékot is tartalmaz, amelyeket nagyjából egy-egy óra munkával a számítógépen is életre lehet kelteni.
A Scratch fejlesztőkörnyezetének 1-es verziója ingyenes szabad szoftver, ami minden elterjedt platformra elérhető; mi Devuan GNU/Linuxon próbáltuk ki. A 2-es verzió is ingyenes ugyan, de nem teljesen szabad szoftver; Linuxra sajnos csak elvileg érhető el, mert a futtatásához szükséges Adobe Air futtatókörnyezetet már nem lehet telepíteni; szerencsére WINE-nal kifogástalanul működött Linuxon a windowsos változat. Érdemes a 2-es verziót választani, mert ebben már definiálhatók saját programblokkok (lényegében szubrutinok vagy függvények – a valódi programozás során ezek nagyon fontosak), amelyeket több helyről is meghívhatunk.
A könyv első, Scratchről szóló része fokozatosan bonyolódó példákon keresztül mutatja be a programozás alapjait. A magyarázatok tömörek és lényegretörőek, de egy gyerek számára is emészthetőek (szerintem hiba is lenne terjengős, maximális precizitásra törekvő magyarázatokkal próbálkozni). Ezeknek a fejezeteknek a feldolgozása után az olvasó akár önállóan is elkészíthet mondjuk egy PONG játékot (ez a '80-as évek egyik első, hazánkban is elérhető videojátéka volt: a képernyő két szélén levő csík alakú ütőkkel kellett egymásnak pattintgatni a négyzet alakú labdát). Nagyjából egyértelmű lesz, hogyan kell dekomponálni a feladatot: milyen entitások lesznek benne, és melyiknek körülbelül hogy fog kinézni a programja.
A valódi életben is használható programokat Scratchben nemigen fogunk tudni írni; a könyv második fele azonban ebben lesz a segítségünkre.
A könyv második része a Python nyelvbe vezeti be az olvasót. A Python a valódi életben is rendkívül fontos scriptnyelv, amelynek az alapos ismerete önmagában is elég lehet egy sor informatikai állás betöltéséhez (persze mire a könyv olvasói felnőnek, ez már valószínűleg nem lesz így). Mivel nyílt forráskódú szabad szoftver, a legtöbb platformra elérhető. Mindemellett azonban általában nem ezt a nyelvet tanítják kezdő programozóknak először (vagy másodikként), úgyhogy számomra meglepő volt a választás. A könyvet lapozgatva azonban hamar beláttam, hogy a Scratch-re alapozva nagyon is reális a Python alapjait is megtanítani; a szerzők tudatosan építenek a Scratch ismeretére, és vizuálisan mutatják be, hogy a Python lényegét tekintve ugyanaz, mint a Scratch, csak kicsit másképp néznek ki benne a Scratch-ben már megszokott konstrukciók. Ezzel együtt a téma érezhetően nehezedik, és a szerzők egyre többször kényszerülnek arra, hogy az érthetőség érdekében nagyvonalúan eltekintsenek fontos részletek tárgyalásától. Az ifjú olvasókat ez ugyan nem feltétlenül zavarja, de azért nem árt, ha kéznél van valaki, aki a felmerülő kérdéseket meg tudja válaszolni.
A Pythonról szóló rész felépítése az első részhez hasonló: egyre bonyolódó példákon keresztül ismerhetjük meg a nyelv elemeit. A könyvrész végére az olvasó megértheti az ott közölt egyszerű játék működését, de szerintem túlzás lenne azt várni, hogy az olvasottak alapján saját maga is képes legyen hasonló programot írni; ehhez több önálló gyakorlásra lenne szükség, amihez a könyv nem nyújt segítséget, mivel nincsenek benne önállóan megoldandó feladatok. Az Interneten elérhető segédanyagok zöme is angolul van, márpedig a könyv célközönsége valószínűleg még nem tud annyira jól angolul, hogy ezeket eredményesen használni tudja.
A programozásról szóló fejezetek így tehát főként arra jók, hogy a téma iránt érdeklődő és fogékony gyerekek passzív, elméleti ismereteiket szélesítsék; ez nagyon fontos és hasznos, de kevés ahhoz, hogy valóban megtanulhassanak programozni. Ha erre támadna igényük, szükségük lesz egy felkészült (valószínűleg felnőtt) segítőre, tanárra, aki testreszabott feladatokat, célokat tud kijelölni, és segíteni tud azok elérésében. Nem feltétlenül gond, ha nincs programozó a családban: ma már gyerekek számára is több cég, szervezet szervez programozás-tanfolyamokat.
A könyv utolsó fejezetei a számítógépekkel és az Internettel kapcsolatos fogalmak magyarázatára tesznek kísérletet; pl. elvileg megtudhatjuk, mi az, hogy IP-cím, portszám vagy socket. Ezek a magyarázatok sajnos sokszor annyira elnagyoltak és pontatlanok, hogy egyáltalán nem lesz tőlük okosabb az ember; például a socketről azt írja, ,,Egy IP-cím és egy port együttesen egy csatlakozópontot, más néven socketet alkot. A csatlakozópont által a programok közvetlenül tudnak egymásnak adatot küldeni az interneten keresztül, ami hasznos, ha például online játszunk." Ez a magyarázat pontatlan, mert a socket valójában egy olyan adatstruktúra, amely egy futó program számára egy hálózati kapcsolatot testesít meg, és sok szempontból úgy viselkedik, mint egy megnyitott fájl (lehet bele írni és olvasni belőle; le lehet zárni; a gyermekfolyamatok öröklik a szülőtől stb.); nemcsak IP esetén értelmezhető és nemcsak olyan protokollok esetében, amelyekben van portszám. Az sem igaz, hogy egy IP-cím és egy port együttesen szükségszerűen meghatározna egy socketet; attól eltekintve, hogy egy konkrét protokollt is meg kellene nevezni, könnyen előfordulhat, hogy egy {IP-cím, protokoll, portszám} hármashoz nem tartozik socket, mert az adott portot vagy akár IP-címet éppen nem használja senki. Véleményem szerint a könyvben közölt magyarázat nem segít a socket fogalmának intuitív megértésében.
A portszámokról azt írja a könyv, hogy van belőlük ,,jól ismert, regisztrált és privát", de hogy ez a felosztás mit jelent vagy miért fontos, az már nem derül ki.
Ezek miatt a felületességek miatt úgy gondolom, az utolsó fejezeteket akár ki is lehetett volna hagyni a könyvből; hozzáadott értékük minimális, és inkább összezavarnak, mint tájékoztatnak. A könyvet forgató gyerekek szüleiként készüljünk fel arra, hogy az itt bevezetett fogalmakat nekünk kell majd rendesen elmagyaráznunk.
A könyv kiállítása igényes; a nyomat szép, a papír fényes (de sajnos a puha borító könnyen megtörik). A 3900 Ft-os árat nem érzem irreálisnak. A fordítás többnyire igényes, de helyenként nyögvenyelős; a fordítóknak nem mindenhol sikerült az eredetitől elszakadva magyarul visszaadni ugyanazt a jelentést, így találkozhatunk angolos szóhasználattal, mondatszerkesztéssel (példa: "Használd ezt a programot, hogy több rendezett tuple-ból álló listát készíts"). Néhány más kiadványra jellemző zavaró, értelmezhetetlen, erőszakos magyarításokkal (amiket a laikus magyar azért nem ért, mert nem ismeri a fogalmat, a hozzáértő pedig azért nem, mert csak nehezen tudja kitalálni, melyik fogalom nevét látja) szerencsére nem találkoztam. Dicséretes például, hogy az angol ,,tuple" tuple maradt, ami később megkönnyíti majd az olvasók számára az angol nyelvű szakirodalom értelmezését.
A könyvben található pixelesített rajzocskák próbaolvasóm szerint (és szerintem is) inkább zavaróak, mint aranyosak, de ez ízlés dolga.
Összességében a könyvet hibái ellenére jónak és hasznosnak, sőt, hiánypótlónak tartom; szerintem a leginkább 8–12 éveseknek ajánlható (bár a könyv hátulján tízéves kor fölött ajánlják). Azt gondolom, arra ugyan nem alkalmas, hogy a programozás iránt egyáltalán nem érdeklődő gyerekek érdeklődését felkeltse, azonban a fogékony programozópalánták örömmel és eredményesen forgathatják; széleskörű alapismeretekre tehetnek szert, amelyekre építve később – más forrásból – könnyebben tanulhatnak meg valóban programozni.
Carol Vorderman: Programozás gyerekeknek – a bináris kódtól a játékkészítésig HVG Kiadó, 2016 (ISBN 978-963-304-320-2; fordította Csitári Gyula és Csordás András).
https://www.hvgkonyvek.hu/programozas-gyerekeknek
Korn András