CUPRINS
7 De vorbă cu părinții
13 Atelierul 01: Primul meu program în C#
13 Partea I
15 Partea a-II-a
16 Partea a-III-a
17 Atelierul 02: Pictorița Turtle
17 Partea I
20 Partea a-II-a
22 Partea a-III-a
24 Atelierul 03: Turtle se pricepe și la muzică
24 Partea I
27 Partea a-II-a
31 Atelierul 04: Variabile
31 Partea I
34 Partea a-II-a
36 Partea a-III-a
39 Atelierul 05: Tipuri de variabile
39 Partea I
40 Partea a-II-a
43 Partea a-III-a
47 Atelierul 06: Instrucțiuni de Input/Output (I/O)
47 Partea I
50 Partea a-II-a
52 Atelierul 07: Geometrie
52 Partea I
55 Partea a-II-a
59 Atelierul 08: Primul meu joc. Instrucțiunea if
59 Partea I
60 Partea a-II-a
62 Partea a-III-a
66 Atelierul 09: Să muncim mai puțin 😊. Instrucțiunea while
66 Partea I
70 Partea a-II-a
73 Partea a-III-a
77 Atelierul 10: Liste
77 Partea I
80 Partea a-II-a
84 Partea a-III-a
89 Atelierul 11: Fișiere
89 Partea I
92 Partea a-II-a
96 Partea a-III-a
99 Atelierul 12: Instrucțiuni compuse (Funcții)
99 Partea I
102 Partea a-II-a
108 Partea a-III-a
De vorbă cu părinții
Cine este autorul?
În opinia mea, luând în calcul complexitatea societății în care trăim, încrederea este cu atât mai mult un lucru care nu poate fi pretins, trebuie câștigat, iar pentru aceasta este nevoie de transparență. Mă numesc Ioan Valeriu Grossu, am început să studiez informatica în urmă cu destul de mult timp, pe vremea memorabilelor calculatoare HC-85, în jurul vârstei de 11 ani, la Palatul Copiilor din București, Cercul de Astronomie! sub îndrumarea Prof. Dr. Gheorghe Vass [1]. Am continuat studiile la Liceul de Informatică Tudor Vianu din București, unde am învățat după unele dintre primele manuale de informatică din România [2]. Îmi amintesc cu nostalgie că excelentele manuale scrise de Prof. Tudor Sorin [3] circulau, pe atunci, pe foi volante… Am urmat apoi cursurile Facultății de Fizică din cadrul Universității București, unde am obținut titlul de doctor în anul 2010. În acea perioadă nu simțeam oboseala orelor petrecute, nu de puține ori târziu în noapte, sub îndrumarea exigentă, dar plină de căldură, a Prof. Dr. Călin Beșliu. Am lucrat ca asistent la Facultatea de Fizică, secția Fizică Informatică (curs și laborator de C++ [4]), sub îndrumarea Prof. Dr. Anișoara Constantinescu și am peste 20 de ani de experiență în IT, ca programator C# .Net și trainer (Microsoft Certified Programming in C# Specialist). Am fost implicat în diverse proiecte de cercetare și am mai multe articole publicate în reviste internaționale cotate, publicații din care voi menționa: „Single qubit neural quantum circuit for solving Exclusive-OR.” Aș spune însă că, mai importante decât experiența și cunoștințele acumulate, sunt interesul real pe care îl am pentru pedagogie și credința într-un învățământ intuitiv.
Ilustrația a fost asigurată de Dr. Salma-Amalia El-Shamali, artist plastic, grafician și inginer peisagist, cadru didactic cu o experiență de peste 15 ani în învățământul universitar, absolventă a Facultății de Peisagistică și a Liceului de Arte Plastice Nicolae Tonitza din București.
Primul cititor critic, care a participat activ la toate etapele elaborării materialului, cu idei care au fost incluse în carte, este chiar fiul meu, Yann-Anwar Grossu, elev în clasa a III-a.
Cui îi este adresată cartea?
Cartea a fost concepută pentru elevii din ciclul primar. Privind prin prisma complexității informației expuse, cineva s-ar putea gândi că este un obiectiv facil. Nu la fel de discutabilă este, însă, perspectiva pedagogică. Ne referim, cu siguranță, la una dintre cele mai importante perioade din formarea viitorului adult. Adaptarea tehnicilor de predare, în scopul asigurării unui suport intuitiv, reprezintă o adevărată provocare. De multe ori ne pierdem răbdarea, uitând că lucrurile cele mai simple din viața unui adult sunt, pentru cei mici, „derivate și integrale”.
Dacă ar fi să mă refer, concret, la vârsta cititorului-țintă, este greu de dat un răspuns universal. Primele ateliere sunt adresate unui elev care știe să scrie, să citească, a făcut primii pași în matematică (adunare, scădere) și… dacă se poate, știe și puțină engleză. Clasa a II-a, ar putea fi un răspuns. Următoarele capitole solicită, în plus, familiarizarea cu operațiile de înmulțire și împărțire în mulțimea numerelor naturale. Probabil, clasa a III-a ar putea fi un răspuns rezonabil.
Dacă ar fi să mă refer la aptitudini, aș spune că partea cea mai frumoasă a vieții este aceea că suntem diferiți. Unii copii asimilează rapid informația (și nu cred că ar trebui opriți), alții sunt mai meditativi, au nevoie de mai mult timp (și acestora nu cred că ar trebui să le impunem un ritm accelerat în mod artificial, dar nici să-i scoatem din ecuație, considerându-i „insuficient talentați”). Unii copii par mai atrași de arte, alții de științe exacte, dar și aceasta este o chestiune relativă și o funcție de timp. Nu există niciun criteriu care să excludă succesul. Și într-un caz și în celălalt se poate ajunge la performanță. Și într-un caz și în celălalt se poate obține, cel puțin, o bună înțelegere a noțiunilor de bază prezentate.
De ce C#?
Desprins din Java, C# este, cu certitudine, un limbaj modern [5]. Este „înrudit” cu C++ [3, 4], un limbaj pe care eu îl consider mai puțin recomandabil vârstei. Cu toate acestea, C# NU este C++. Prin elementele sale specifice și împreună cu anumite instrumente create de autor (utilizând mecanismele OOP), pot spune, fără ezitare, că C# este o alegere potrivită. În acest sens, voi prezenta mai multe exemple concrete, mai jos, în secțiunea „Câteva cuvinte despre conținutul cărții”.
În ce măsură ar trebui să se implice părinții în lecturarea cărții?
După ce am scris prima versiune a acestei cărți, foarte mulțumit de descrierile conceptelor prezentate, i-am dat-o celui mic să o citească. În acest moment, Yann este un elev de clasa a III-a, atras de jocuri pe afară sau pe tabletă, la fel ca marea majoritate a copiilor. Când vede texte lungi îl apucă somnul, foamea, orice altceva… Mai mult, chiar dacă îl conving să citească, mă va chema din cinci în cinci minute să mă întrebe una și alta. Nu ar fi o problemă, îmi place să lucrăm împreună, atâta doar că mi-am dorit să scriu o carte pentru copii. O carte pe care ei să o citească, cu ceva ajutor… dar mic, din partea părinților. Din acest motiv am hotărât să rescriu materialul folosind un limbaj cât mai simplu, să mă bazez, în special, pe metoda învățării din exemple și să înlocuiesc, pe cât posibil, explicațiile lungi și încurcate cu analogii, imagini, exerciții și exemple de cod.
Care este scopul cărții?
În mod cert, unul dintre obiective este legat de însușirea unor noțiuni de bază din domeniul informaticii și familiarizarea cu limbajul C#. Trebuie să spun însă că, în materialul propus, programarea reprezintă mai ales un instrument utilizat în vederea atingerii unui al doilea obiectiv: aprofundarea noțiunilor matematice predate în școli, prin lărgirea experienței „proto-matematice” a elevului. Voi aminti, în acest sens, câteva aspecte discutate în Capitolele 7-11 din „LogoMatematica” [1], o lucrare care, în opinia mea, ar trebui să ocupe un loc central (și nu exagerez) în învățământul românesc:
„Axiomatizarea este o finalizare a multor experiențe geometrice, nu un început al acestora… Experiența proto-matematica necesară cristalizării conceptelor geometriei (construcții grafice, măsurători, aplicații practice diverse) trebuie să fie foarte bogată, fiecare problemă sesizată trebuind să fie imediat investigată prin noi experiențe care sunt sugerate de ea;
Acesta este un punct care nu poate fi satisfăcut cu mijloace clasice; este evident că numai un instrument de mare randament, cum este CALCULATORUL, poate satisface astfel de exigențe.
Aceasta abordare se opune celor mai multe moduri de prezentare a științei în manuale și cursuri, din care elevul sau studentul capătă impresia că știința a început cu principiile sau axiomele ei…”
Pe de altă parte, s-a împământenit imaginea profesorului de matematică sever, respectiv ideea că performanța didactică s-ar putea exprima în numărul mic de elevi care reușesc să satisfacă exigențele școlii. Eu cred că învățământul trebuie să reprezinte o experiență plăcută, cât mai apropiată de elev. Scopul urmărit este acela de a încuraja cititorul, de a-i crește încrederea în propriile forțe și de a „sădi” interesul pentru informatică și matematică. Unul dintre rolurile școlii este acela de a descoperi și cultiva talente. Tocmai din acest motiv, cred că accentul trebuie pus pe „a experimenta”, „a înțelege”, „a gândi”, în contradicție cu anumite tendințe care favorizează învățarea „mecanică”. În opinia mea, atracția pentru un anumit obiect de studiu este esențială. Ea reprezintă „motorul” ascensiunii elevului, depășind în importanță talentul. Astfel, unul dintre modelele mele este Demosthenes care, după cum este bine știut, a reușit să-și învingă propriile limitări fizice, devenind unul dintre cei mai mari oratori ai Antichității.
În cât timp ar trebui citită cartea?
Priveam graficul erorii de clasificare, exprimat ca funcție de numărul de iterații, în antrenarea unei rețele neurale artificiale destinate învățării unei probleme simple (XOR). După ce „i-am repetat” rețelei de câteva sute de ori: (0,0) și (1,1) înseamnă 0, iar (0,1) și (1,0) înseamnă 1, eroarea era la același nivel, de parcă nimic nu s-ar fi întâmplat, deși ponderile „dendritelor” neuronilor implicați suferiseră deja modificări dramatice. Apoi, brusc, după încă 10-20 de iterații, eroarea a scăzut la pragul așteptat. Am realizat atunci cât de important este să prezinți același concept în mod repetat, de preferat, în contexte diferite și cât de importantă este răbdarea în munca unui profesor. Creierul nu se poate compara, nici pe departe, cu o foaie de hârtie pe care scriem o lecție, după care, imediat, o regăsim exact în forma în care a fost prezentată. De fiecare dată când discut despre aceste aspecte îmi vine în minte o proprietate interesantă din holografie: pe fiecare ciob al unei holograme sparte vom putea observa imaginea întreagă și nu fragmente ale acesteia.
Fiul meu a citit cartea (cu ceva ajutor din partea mea) în timpul vacanței de vară dintre clasele a III-a și a IV-a. Nu am lucrat foarte rapid, un capitol pe zi, dar am acordat o atenție sporită atât textului (incluzând exemplele de cod), cât și exercițiilor. Am insistat asupra aspectelor care păreau mai puțin clare. La sfârșit mi-a spus: „nu mai țin minte nimic”. Pentru a recapitula/aprofunda noțiunile discutate, am recitit cartea, oarecum „în diagonală”… Surpriză: „asta știu… asta știu… asta știu…”
Mergând cu pași mici, dar constant, succesul este asigurat de mecanismele motivaționale care se materializează, totodată, în premise ale unei posibile viitoare pasiuni.
La ce rezultate concrete ar trebui să ne așteptăm?
Doar Tom și Jerry au reușit performanța de a învăța pianul, în trei lecții, dintr-o carte. De multe ori le explici copiilor, le explici și ei… se uită pe fereastră sau îți pun o întrebare care nu are nicio legătură cu subiectul. Ce poate fi mai enervant 😊? Se pare însă că lucrurile nu stau chiar așa. Mi s-a întâmplat, de mai multe ori, să-i spun celui mic ceva important, de exemplu că nu e bine să stai cu ochii în telefon când mergi pe stradă. Nu m-a băgat în seamă, părea că vorbesc cu pereții. Am renunțat. Peste câteva luni bune, mă trezesc certat: „De ce te uiți la mobil, nu spuneai tu că nu e bine să mergi pe stradă cu ochii în telefon?”
În ceea ce privește proporția informațiilor asimilate, nu cred că ar trebui să ne dezamăgească un randament subunitar. Dacă elevul reușește să își însușească noțiunile de bază, este deja un rezultat bun! Mai mult, nu trebuie să ne lăsăm pradă dezamăgirii dacă un anumit concept pare mai greu de înțeles. Putem trece la atelierul următor, noțiunile vor fi reluate, vor apărea în mai multe contexte și, în cele din urmă, se va face mai multă lumină. Cred cu tărie că lecturarea acestei cărți, dublată de efectuarea exercițiilor corespunzătoare, va așeza un prim „strat intuitiv”, bazat pe experiment, atât în informatică, cât și în ceea ce privește însușirea anumitor noțiuni matematice, destul de „temute” la această vârstă (termen necunoscut, geometrie, comutativitatea înmulțirii etc.).
De ce este important să învățăm matematică?
Pentru părinți, acest lucru este o lege, pentru copii, un mare mister… Dacă vorbim de cariere în matematică, cercetare, inginerie, etc., întrebarea se golește de sens. Ce se întâmplă, însă, dacă ne referim la alte profesii? Am avut o discuție cu un medic (un medic foarte bun). Spunea că nu i-a plăcut niciodată matematica, a fugit de ea. Poate sunt subiectiv, dare eu cred că matematica are o frumusețe aparte. Din păcate, nu cred că se insistă suficient asupra acestui aspect. Școala ne obișnuiește, de multe ori, să rezolvăm probleme „la kilogram”, probleme cărora, de cele mai multe ori, nu le vedem utilitatea/aplicabilitatea. Monotonia se rupe, însă, atunci când punem în discuție subiecte precum: geometrii neeuclidiene, banda lui Möbius, fractali, proprietățile numerelor prime, spații multi-dimensionale etc. etc. Monotonia se rupe, din nou, atunci când înțelegem că matematica este un instrument prin care ne putem apropia de natura (fizică, chimie, biologie, etc.), cu toate „ciudățeniile” pe care le conține, de la universal cuantic, în care un qubit poate fi 0 și 1 în același timp, până la stele neutronice, găuri negre, galaxii, quasari etc. etc.
Dacă vorbim de matematica din ciclul primar și gimnaziu, ea ne este utilă peste tot: când primim restul de la piață, când măsuram suprafața unui teren, când trebuie să urmăm un tratament medical (câți ml de sirop trebuie să luăm, la ce interval de timp, cum folosim un termometru pentru a afla dacă avem sau nu febră etc.), când calculăm bugetul unei petreceri sau calculăm rata/dobânda unui împrumut bancar, când citim vitezometrul autoturismului etc. etc. Sunt atât de firești aceste lucruri în viața unui adult, încât nici nu realizăm cât de greu ne-ar fi fără ele… Pe scurt, am putea spune că sunt la același nivel de importanță cu alfabetizarea.
Este de remarcat, de asemenea, faptul că matematica este importantă nu doar prin aplicațiile ei directe. Exersarea ei ne ajută să vizualizam nu doar legile unor elemente abstracte (puncte, drepte, numere etc), ci și legăturile dintre obiectele/evenimentele care ne înconjoară. Tot ea ne ajută să înțelegem importanța unei viziuni obiective, bazate pe măsurători și nu pe impresii: un ochi ar putea încurca culorile/nuanțele, dar nu putem greși dacă măsurăm lungimea de undă a undei electro-magnetice (sau codul RGB, disponibil inclusiv pe dispozitivele mobile), nu putem fi siguri că avem sau nu febră atingând fruntea cu mâna, un termometru ne va spune însă, cu o bună precizie, ce temperatură avem etc. Și toate acestea ne fac mai puternici, mai greu de păcălit…
Nu în ultimul rând, matematica este o materie la care elevul va susține examene importante. În funcție de rezultat, își va putea alege, sau nu, liceul dorit.
Există o continuare a cărții?
Odată însușite cunoștințele de bază în domeniul programării, ne putem muta atenția către îmbogățirea experienței proto-matematice asistate de calculator. În prezent lucrez la un material care să acopere o gamă cât mai largă de concepte matematice, de interes atât pentru ciclul primar cât și pentru gimnaziu.
Câteva cuvinte despre conținutul cărții
Cititorul se va alătura unui cerc imaginar de informatică/matematică, la care participă și alți copii. Atmosfera este caldă, relaxată iar elevii sunt încurajați să pună cât mai multe întrebări și primesc aprecieri pentru reușite sau li se atrage atenția, constructiv, atunci când greșesc.
Îmi place să compar bagajul de cunoștințe asimilate cu un mecanism cu roți dințate. Abia după ce fiecare roată a fost cu grijă construită și testată, abia apoi putem asambla sistemul. Nu ar fi eficient să ne grăbim să asamblăm două roți, dintre care una ar putea avea un dinte lipsă. De exemplu, nu este indicat să trecem direct la împărțiri cu 2 cifre de tipul 32 : 2, înainte de a studia împărțirea cu rest. Într-adevăr 32 este divizibil cu 2, dar algoritmul de calcul implică efectuarea operației 3 : 2, care este o împărțire cu rest. De ce să nu începem cu 42 : 2? Ca un corolar al acestui principiu, orice noțiune nouă ar trebui discutată pe numere mici. Nu este deloc greu să iei câteva creioane și să exemplifici…
Deși exemplele de cod discutate pot fi testate în mediul de dezvoltare integrat Microsoft Visual Studio (cu condiția utilizării unor librării puse la dispoziție de autor), am considerat că, la această vârstă, ar fi mult mai potrivit un mediu de dezvoltare simplificat. Din acest motiv am construit, tot în C#, aplicația Esy, care îi va permite elevului să observe rezultatul (atât text, cât și grafic) executării unei secvențe de cod, prin simpla apăsare a unui buton.
Ce poate fi mai frumos și mai natural pentru un copil decât să învețe programare… desenând? M-am lovit însă de o problemă: explicarea coordonatelor într-un sistem cartezian. Evident, nu este o soluție ideală pentru învățământul primar. Mi-am amintit de „Turtle Geometry” și de cursurile de Logo1 de la Palatul Copiilor. Abia atunci am realizat cât de genială este, în simplitatea ei, ideea de a comanda o broască țestoasă care desenează cu o pensulă legată de coadă… Am scris rapid o clasă care implementează aceste funcționalități în C#.
La fel de interesant mi se pare faptul că putem să ne apropiem de programare și prin muzică. Experiența îmi spune că, la aceasta vârstă, este mult mai eficient să tai o portocală în două decât să îi povestești copilului despre cum, tăind un obiect în părți egale, obții două jumătăți. Dacă feliile de portocală ne oferă o imagine spațială, în schimb, sunetul oferă aceeași imagine în timp.
Am acordat o importanță deosebită noțiunii de variabilă, un concept destul de abstract pentru vârsta vizată. Pentru o imagine cât mai intuitivă, am apelat la analogia „casetelor colorate”, desenate pe caietul de matematică. Pe plan matematic, toate aceste eforturi se vor constitui într-un real suport în înțelegerea exercițiilor cu termen necunoscut.
Dacă privim modalitatea clasica de incrementare a unei variabile x = x + 1, observăm că ea ridică anumite probleme pentru cei aflați la început de drum. La clase ceva mai mari, elevii vor fi încurcați de aparenta contradicție matematică… Cum adică x = x + 1? Asta înseamnă că 0 = 1, absurd! E mai greu de vizualizat/explicat faptul că „noul x” devine „vechiul x” plus 1. C# rezolvă foarte simplu și elegant aceste dileme: x += 1.
Ori de câte ori a fost posibil, am folosit exemple destinate îmbogățirii experienței „proto-matematice”1 cu privire la: fracții, elemente de bază de logică matematică, înmulțire și comutativitatea înmulțirii, etc. etc. În secțiunile dedicate geometriei se discută mai multe noțiuni specifice și se introduce, în mod subtil, măsurarea unghiurilor (prin experimente de rotație a lui Turtle). Cititorul observă, de asemenea, că instrucțiunea Forward(-50) are același efect ca Backward(50).
Aș nota, de asemenea, analogiile: structură liniară – stradă dreaptă, structură alternativă – stradă cu bifurcație, structură repetitiva – stradă cu bifurcație și sens giratoriu. Aceasta reprezintă, în mod evident, o introducere intuitivă în scheme logice.
Însușirea instrucțiunii if a reprezentat un bun pretext pentru a discuta despre numere întâmplătoare și probabilități. Elevul va programa primul sau joc bazat pe implementarea unui „zar electronic”.
Pentru structura repetitivă am ales, inițial, instrucțiunea for. Mi-am dat seama, inclusiv din strădaniile fiului meu, că este o alegere mai puțin inspirată (în C++/C#, for este o instrucțiune foarte flexibilă și, din acest motiv, ceva mai greoaie). Am ales, apoi, instrucțiunea while. Diferența a fost… spectaculoasă.
Noțiunea de vector este deosebit de importantă în programare, dar ea impune dificultăți semnificative la această vârstă. Din acest motiv, librăria Esy Code pune la dispoziție o serie de clase (EsyStringList, EsyIntList), bazate pe liste generice, care nu sunt altceva decât vectori dinamici pentru care, foarte important, numerotarea elementelor începe de la 1. Este de notat, de asemenea, analogia vector-casă, în care fiecare apartament are un număr (o adresă).
Copiii vor învăța să manipuleze programatic fișiere și vor folosi această ocazie ca pretext pentru a repeta: zilele săptămânii, lunile anului și planetele Sistemului Solar.
Ultimul capitol este dedicat unor noțiuni elementare de programare structurată. În opinia mea, ideea de structurare este extrem de importantă, nu doar în programare, ci și în viața de zi cu zi.
[1] Gheorghe Vass, LogoMatematica, Inițiere în Logo, Matematica și științe exacte, Editura Alternative, București 1995, ISBN 973-96996-2-6
[2] Corina Corici, Dorin Manz, Adriana Simulescu, Marinel Serban, Limbajul Pascal, Editura Libris, 1991, Cluj, ISBN 973-95118-0-5
[3] Tudor Sorin, Manual pentru clasa a X-a, Informatica (Tehnici de programare) Varianta C++, Editura L&S Infomat, București, 2000
[4] Herbert Schildt, C++ Manual Complet, Editura Teora, 1998
[5] Ioan Valeriu Grossu, Migration of hyper-fractal analysis from visual basic 6 to C# .Net, Elsevier, Computer Physics Communications, Volume 271, 108189, 2022, https://doi.org/10.1016/j.cpc.2021.108189
[6] Ioan Valeriu Grossu, Single qubit neural quantum circuit for solving Exclusive-OR, Elsevier, MethodsX, Volume 8, 101573, 2021, https://doi.org/10.1016/j.mex.2021.101573