De ce as ramane repetent la informatica din Romania

Dupa ce am discutat despre un anume aspect al psihologiei elevului / studentului aici Semnificatia verbului "a face" pentru elevi si studenti, vreau sa ne uitam si la sistemul de invatamant pe un studiu de caz.

Fie cerinta scolareasca:

“3. Să se realizeze un program care utilizează o clasă Grupa ce conţine ca date numele, prenumele, vârsta, notele la 5 examene şi media acestora pentru 10 studenţi. Clasa va avea o funcţie constructor pentru iniţializarea numelui şi prenumelui iar notele se vor citi de la tastatură. Media notelor va fi de tip privat.”

Evident, cerinta nu are nicio noima si te forteaza sa violezi principii OOP:

  • nu are noima deoarece o grupa nu are nume si prenume
  • e nevoie de cel putin inca o clasa Elev pentru a incropi ceva cat de cat curat

Dar aceasta cerinta nu este prima care imi iese in cale care parca ar fi conceputa de un antitalent in programare, e doar un studiu de caz.

Eu unul sincer nu cred ca as putea fi un elev de nota 10 la o astfel de materie, mai ales daca as avea un profesor subdezvoltat personal care nu ar accepta daca i-as spune ca cerinta e anapoda (cu argumente).

Voi ce credeti, ati putea fi elevi de nota 10 daca ati fi bombardati cu astfel de “teme”?

4 Likes

Cred că scopul acestor teme nu e acela de a învăța elevul bunele practici, ci acela de a-l face să priceapă conceptele oop.

Nu uita ca SOLID sunt principii, nu legi. Nu este imposibil să scrii o astfel de clasă; În contrast, mi se pare mai dificil să explici concepte OOP și SRP.

Referitor la partea cu nume, prenume nu comentez :smiley:

Cand am facut eu facultatea , la Informatica nu se atingeau subiecte de forma “SOLID principles” si alte subiecte. Nu imi dau seama care era scopul acelei cerinte. Poate doar incerca sa verifice studentul ca stie sa

  • initializeze un obiect
  • apeleze metode de pe obiect
  • faca diferenta intre membrii privati/publicit
  • construiasca un “algoritm” (aka: un set de pasi, care duce la un bun sfarsit)
  • sa citeasca de la prompt

Din pacate, exista absolventi de facultati de profil care nu fac diferenta intre clasa si instanta ei.

Si da, cred ca ar fi necesara o educatie de “programmer” pentru studentii de la informatica.

Offtopic: ca sa fii student de 10, trebuia sa stii foarte bine: Analiza (numerica, calcul diferential,etcc), Algebra ( abstracta pana in panzele albe, ), Geometrie (de-a unora ce considerau ca doua paralele se intalnesc), Statistica , si tot asa. Astfel de cerinte erau simple si treceai de ele cat mai repede, caci te asteptea furtuna dupa ele.

1 Like
  • nu vad un “conflict de interese” intre OOP si SRP
  • nu vad ce incearca sa te invete tema, cum sa scrii cateva cuvinte cheie?
1 Like

Daca pe celalalt subiect discutam despre elevi / studenti, aici discutam despre sistem.

Ca sa iti dai seama ca un sistem este putred, nu trebuie sa te uiti neaparat la ce produce. Uita-te cum functioneaza:

  • vezi ce se discuta la o sedinta de catedra sau consiliu profesoral
  • vezi cum se scot posturile la concurs
  • vezi cum se promoveaza.

Totusi si pentru ei (cadrele didactice) e greu sa se invinovateasca - e natura umana. Vazusem un tip pe la TV care zicea ceva de genul: “Daca intrebi pe cei din facultati, zic ca elevii vin nepregatiti de la liceu. Profesorii de la liceu, zic ca le vin nepregatiti din generala. Cei de la generala, zic ca vin de la primara. Si tot asa. De ce mai dam copiii la scoala daca nimeni nu isi asuma vina (procesul)?”

1 Like

Păi nici nu este. Dar ia adu-ți aminte ce ai învățat la grădiniță: numerele de la 1 la 10. În clasa I ai învățat că numerele pot crește de la 0 la ∞. În clasa a II-a sau a III-a ai învățat că numerele o pot lua și în jos, de la -∞ la 0 și că între 0 și 1 mai sunt și alte valori. În clasa a VI-a ai învățat că √-1 înseamnă i și că nu se calculează, dar în clasa a IX-a ai învățăt că de fapt se calculează. Și tot așa.

Nu știu câți ani de vechime ai, dar eu am priceput relativ recent OOP, de câțiva ani. Adică îl pricepeam la nivel teoretic, dar nu și la nivel practic. A fost nevoie de un click la un moment dat, dar până la acel moment erau foarte multe lucruri confuze la mijloc - lucruri naive, dar care în mintea mea ar fi jucat un rol vital.

Am observat că (noi, oamenii) avem tendința de a ignora/uita cum a fost atunci când eram noi în proces de învățare și ne transformăm fix în ăia pe care îi detestam că ne tratau cu superioritate atunci când puneam o întrebare.

4 Likes

Toate bune si frumoase in ce scrii, sunt perfect de acord, e adevarat.

DAR

Noi aici nu vorbim despre cel care invata OOP, ci despre cel care concepe cerintele, iar el se presupune ca stie OOP. Ei bine, el, acel individ, trebuie sa conceapa cerinte asa incat ele sa il invete mai intai pe elev materia de gradinita, apoi de primara, de gimnaziu, liceu, facultate, etc.

Acum intrebare de 100 de puncte: iti da tie impresia ca cel care a conceput aceasta cerinta avea o imagine clara a OOP-ului cand a formulat balaria aia?

Tie de exemplu ti-ar fi trecut vreodata prin minte sa formulezi asa o ineptie (ca cerinta nu ii pot spune)?

Mie nu, si cred ca nimanui care stie materia.

“O grupa care accepta prin constructor nume si prenume” auzi.

Mi-se intampla destul de des astfel de click-uri. Cel mai recent a fost cu CSS-ul, anul trecut. Reusisem sa hack-uiesc niste CSS ca sa mearga ce vroiam, cu vre-o 3 ani jumate in urma, dar anul trecut, cand am revenit la CSS, am avut acel click de “I know this sheet” (censored).

Iar asta ma duce cu gandul la urmatorul fapt: Diferite persoane invata in diferite feluri. Eu am nevoie ca dupa ce am invatat hack-ish (bruteforcing) ceva, sa iau o pauza, sa se restructureze informatiile, pentru ca dupa ce revin sa aiba sens. In schimb, cand am incercat sa continui, am ajuns la un dead end si mi-a luat mai mult timp sa inteleg chestiile alea decat mi-ar fi luat daca as fi facut pauze de la invatat.

1 Like

Mie singura inepție mi se pare asta:

(și tind să cred că e doar o exprimare nefericită pe undeva)

Despre restul cerinței este greu să mai comentăm, pentru că nu știm detalii importante, cum ar fi cui i se adresează problema (e.g. clasa a IX-a? anul III de info?). Eu am presupus că face parte dintr-un an introductiv…

Ceva de genul? (pseudo) C++

class Grupa{
  private:
  int nr_membrii, nr_materii;
  char* nume[], prenume[];
  int* varsta[], medie[], note[][];
  public:
  Grupa(int k, int l){
    nr_membrii = k;
    nr_materii = l;
    for(int i=0;i<nr_membrii;i++){
      char nume[] = new char[nr_membrii];
      char prenume[] = new char[nr_membrii];
      varsta[] = new int[nr_membrii];
      medie[] = new int[nr_membrii];
      note[][] = new int[nr_membrii][nr_note];
    }
  }
  Grupa(char[] numele, char[] prenumele,
      int[] varstele, int[] mediile, int[][] notele){
    nume = numele;
    prenume = prenumele;
    varsta = varstele;
    medie = mediile;
    note = notele;
    nr_membrii = count(medii);
    materii = count(note[0]);
  }
}

Poate nu este exact ce a vrut sa ceara, dar este ce am inteles eu si am scris intr-un sfert de ora, fara debugging, fara verificare daca ruleaza sau compileaza, just plain pseudoC++ …

Alternativ, puteam avea in Grupa un vector/tablou_monodimensional/tablou_unidimensional de un struct sau o alta clasa MembruGrupa.

Deci tu te-ai pus acum in pielea unui incepator in OOP care abia invata sa puna spatiu dupa “class”.

Si a trebuit sa “indoi” atat de mult cerinta, ca sa iasa ceva cat de cat curat.

Acum pe bune, ce sanse are un incepator adevarat sa si invete corect, si in acelasi timp sa nu se lase tras in jos de sistem? In contextul in care el nu face diferenta dintre bine si rau?

Pentru un incepator “o grupa care isi seteaza numele si prenumele” e singurul cod corect, pentru ca doar el ii aduce nota 10.

1 Like

long a** post.
Problema asta e la nivel global (vezi hacker news si/sau stackoverflow unde apare o discutie din asta cel putin de 2 ori pe an)
Scoala de stat (include toate nivelele), cel putin prin definitia care o vad eu, exista ca tu sa poti avea cunostiinte SUFICIENTE pentru a putea supravietui.
Adica: Sa poti sa iti gasesti un loc de munca sau alte metode prin care sa poti sa iti asiguri un loc de trait calduros, mancare, haine, eventual ceva mancare si haine la copii. SI ATAT! Nimic mai mult, nicaieri in lume

Supra calificarea, aia pentru sufletelul tau si pentru banii aia in plus in buzunar, o faci singurel nimeni nu te poate invata, maxim te pot sfatui, indruma.

“Super-starurile” alea care ies de la MIT si altele de genul, nu au invatat la facultate, au invatat singuri in plus, pt ca nu au fost multumiti cu ce preda profesorul
Si din facultatile de top mondial ies sute de mii de absolventi anual. Si nu auzi de toti, ca sunt slabi sau mediocrii. Auzi doar de cativa aia care au invatat singuri mai mult decat le-a zis profu’

PS. si acolo sunt daia gen “nu-i de tine facultatea”. Dar atat timp cat taticu/mamica plateste taxa …

Asta se intampla in orice fel de facultate, din pacate. Ce avem noi (asa zisii programatori, unii mai incepatori, altii mai avansati) este un loc unde sa avem stranse toate informatiile utile si organizate in functie de dificultate, abstractivitate (nu, nu stiu sa explic ce-am vrut sa spun, dar stiu ca este ceva important), ordinea de invatare, precum si exemple bine organizate. + Video-uri explicative, atat mai detaliate cat si mai pe scurt. I’d call that “The Ultimate Documentation”… if I had any…

Edit: Am dat publish la cateva secunde dupa @ct27stf.

Si de ce nu exista institutii de invatamant private unde sa se faca programare calumea?

Programare “calumea” exista oriunde exista si un elev/student care vrea si cere. Care e multumit cu ce primeste, imi impatureste mie shaworma :slightly_smiling:

5 posts were split to a new topic: Path to craftshmanship

Imi aduc aminte de liceu cand faceam cate 10 ore de informatica pe saptamana, inca incerc sa scap de stilul ala de programare si sa ma indrept spre specificatii in teste, codul de calitate, clean code cum zice Robert C. Martin, eu ii zic standarde in scrierea codului si dezvoltare software, am impartasit aceias viziune cu flavius si am empatizat cu el intr-o anumita masura desi nu il cunosc personal dar ideile lui imi pareau bune, desi atitudinea lui a lasat de dorit, am ramas pe acest forum fiindca inca invat chestii noi si imi place sa fac parte dintr-o comunitate in care exista o atitudine constructiva.

1 Like