Bacalaureatul la informatică, 2017, și despre firma care a făcut attention-whoring pe seama examenului

Nu aș fi luat provocarea de a rezolva subiectele de la bacalaureatul din 2017 dacă nu aș fi văzut acest articol publicat de Digi24, în care se repetă retorica obosită în care învățământul informatic nu îi pregătește pe elevi pentru încercările reale din câmpul muncii.

Retorica e destul de atractivă, e ceea ce își doresc părinții de liceu să afle. Când copiii lor nu reușesc să ia notă maximă la examenul de bacalaureat la informatică, părinții au nevoie să audă că ce sunt învățați copiii la școală este inadecvat, inutil și incomplet, și în niciun caz că copilul lor e incapabil să facă niște lucruri de bază pe care le exersează câțiva ani săptămânal la școală.

Am făcut, așadar, și eu subiectele (aparent le-am făcut pe cele greșite, date de model. Subiectele reale sunt înghesuite în altă parte la un loc cu toate subiectele de la proba E). Nu mi-a fost ușor, mi-a luat undeva la 1h:20m și probabil în condiții de examen mi-ar fi luat mai mult (chiar dacă nu mi-am modificat programele după ce am considerat că sunt gata, le-am verificat într-un compilator online, privilegiu pe care elevii nu îl au.

Am o veste foarte proastă pentru „firma care și-a pus programatorii să ia examenul de bacalaureat”. Oamenii sunt slabi dacă nu sunt capabili să ia notă de trecere, și dacă cel mai bun dintre ei a luat 8,50. Ăsta e examen pe care niciun programator nu are voie să îl ia cu notă mai mică decât zece (hai 9,50) – orice altceva înseamnă că oamenii sunt inadecvați pentru joburile pe care le execută. Ca și programator experimentat, cu ceva interviuri tehnice în calitate de intervievator, vă zic că acest examen trebuie trecut cu zece de oricine dorește să facă programare1)Atenție! joburile în IT sunt mult mai multe și mai complexe decât doar programare, dar programarea e un aspect important.

Să explic un pic subiectele (le accesați aici). Am selectat subiectele pentru secția de matematică-informatică, practic cele mai „tari” dintre variante.

  1. Subiectul 1 îți cere să evaluezi o expresie (unde trebuie să știi diferența dintre matematică și informatică, împărțirea făcându-se în domeniul întreg), după care cere să lucrezi pe un algoritm. Punctul 2 este un caz clasic de debugging – pui o valoare, o treci printr-un algoritm, vezi ce se întâmplă. Făcând asta ar trebui să înțelegi și care e logica algoritmului, ce face el. E o treabă obligatorie pentru orice programator. Oricine greșește aici are câteva semne de întrebare majore din partea mea. Implementarea algoritmului dat e iarăși o treabă sine-qua-non, și asta pentru că vorbim nu despre o temă inventată peste noapte, ci o temă (un limbaj de programare) pe care oamenii l-au ales pentru examinare.
  2. Subiectul 2 e concentrat pe structuri de date și reprezentările lor. Problema de la punctul 5 e chiar interesantă – presupune parcurgerea unui text și prelucrarea lui. E o problemă simplă, care e drept că cere multă atenție, dar se poate face fără absolut nicio problemă, în condițiile enunțate (care simplifică mult programul).
  3. Primul punct e metoda backtracking. În mod normal, aproape orice soluție dată în realitate cu metoda backtracking e din start greșită, dar e inevitabilă în anumite zone. Nu aș fi ales acest subiect pentru examinare, dar având în vedere că e o metodă acceptată și studiată în liceu, e normal ca elevii să cunoască soluția. Mai mult, orice programator cu studii medii ar trebui să știe răspunsul, nu e ceva ce poți uita prea ușor.
    Punctul 2 este o problemă de rulare a unui algoritm. Necesar pentru oricine folosește un debugger.
    Punctul 3 e o problemă de optimizare, pentru că dacă te apuci să parcurgi toate numerele între două valori vei pica din start.
    Punctul 4 cere un program nu foarte fain, dar ușor de implementat dacă stăpânești limbajul și algoritmica.

Examenul nu e neapărat ideal, dar pentru ceea ce se studiază în liceu și, pe alocuri, facultate, este excelent, e o trecere în revistă a celor mai importante elemente. E un examen bun, corect față de elevi. Mă aștept ca un programator decent să poată să-l treacă. Există însă câteva neconcordanțe care merită reclamate. În primul rând, se cere schimbarea unui tip de buclă cu alt tip de buclă în pseudocod. Pseudocodul nu are o structură bine definită tocmai pentru că nu e cod real – și faptul că pseudocodul școlar e acum structurat și impune o anumită nomenclatură este greșit. Pseudocodul e menit să îl ajute pe programator să exprime o soluție a unei probleme, nu să fie 1:1 cu codul compilabil. De aceea algoritmul modificat în pseudocod este un abuz, ratează complet obiectivul pseudocodului.

Al doilea e că algoritmii ceruți nu se folosesc de biblioteca standard de algoritmi. Nu sunt suficient de complecși, nu cer înțelegerea unei biblioteci de containere, un lucru absolut esențial pentru orice programator în orice limbaj.

Al treilea e că da, se cer limbaje precum C/C++ sau Pascal. Înțeleg de ce s-au păstrat aceste limbaje, dar nu cred că profesorii de liceu sunt capabili să scrie cod decent în C++, mai ales varianta modernă, și nici nu pot explica toate modurile în care pot greși elevii. Atenția se mută nu pe corectitudinea algoritmilor ci pe corectitudinea sintaxei, a amănuntelor mici. Cel mai sănătos ar fi mutarea pe un limbaj mai flexibil, precum Python sau chiar C# (măcar acolo lucrurile sunt mai clare de ce crapă când și cum). Nu aș recomanda Java, dar aici e vorba de o alegere personală. Pascal e o alegere greșită din partea profesorilor români care au redactat programa, dar aici vorbim de alte lucruri. Dar aici vorbim de preferințe, C++ se poate preda, însă ai nevoie de profesori extraordinari, ceea ce nu prea există. Dar ca să fiu corect față de sistemul de învățământ, și C/C++ și Pascal sunt, la nivelul predat, pentru genul de cunoștințe predate, suficiente și instructive. Un limbaj de programare nou se poate învăța la un nivel decent într-o săptămână dacă stăpânești bine algoritmii predați în C++/Pascal.

Acum hai să ne uităm peste ce au zis „cei de la firma care și-au testat programatorii”. „Subiectele nu văd să aibă aplicabilitate în jobul meu zilnic”, spune Vlad Ștefănescu, programator. Nu știm ce face Vlad Ștefănescu, dar în niciun caz programare, unde aplicabilitatea cea mai directă este înțelegerea unui algoritm și testarea unor ipoteze pe el.

„Conducerea companiei atrage atenția sistemul educațional ar putea fi îmbunătățit pentru a face față cerințelor actuale de pe piața muncii”. Conducerea companiei ar face bine să nu confunde necesitățile ei cu necesitățile pieței muncii. Deși e un pic ciudat să ai o companie de IT unde să nu fie necesar ca programatorii să cunoască ce e un algoritm, să poată să îl urmărească și să înțeleagă niște structuri de date. Dar doar un pic.

Avusesem recent o discuție cu Ovidiu în care încercam (dar nu reușeam) să îi explic că IT-ul de azi din România va pica destul de curând pentru că se pune accentul nu pe producție și pe excelență din punct de vedere tehnic, ci pe livrare de componente. Mai exact, în România cele mai multe companii de IT se ocupă cu împachetarea produselor prefabricate – se pun două, trei framework-uri cap la cap, se mai lipește cu un pic de stress și gata, ai produsul. Majoritatea produselor din România presupun ca programatorii să urmeze tutoriale de pe net și să le pună cap la cap. Zero creație, zero gândire, chiar și acolo unde programatorii se mândresc că gândesc.

Dar munca asta din prefabricate nu cere algoritmică, nu cere gândire, iar compania respectivă de oameni care chiar se cred deștepți nu sunt capabili să lucreze pe treburi simple, precum subiectele la bacalaureatul de vară 2017. Ce să mai vorbim de crearea propriilor unelte, criterii de performanță, securitate? Parcă ăsta era un lucru pe care îl reclamau și ei, că elevii nu sunt învățați securitate. Hai să vorbim un pic și despre asta.

Ca să vorbești despre securitate trebuie să vorbești despre niște lucruri foarte complexe (matematică de facultate, super-înaltă, probleme grele) dacă vorbim de criptografie, sau de conduită în folosirea framework-urilor de-a gata (ceea ce cred majoritatea companiilor românești că e securitatea). Dar învățământul românesc nu poate să-și asume nici prima variantă (cum ziceam, matematici înalte, prea înalte pentru liceu) nici a doua variantă. Asta pentru că framework-urile se schimbă o dată sau de două ori pe an, dacă tu începi să studiezi securitatea pe un subiect în 2017, în 2021 când ieși din liceu deja subiectul respectiv va deveni demodat și anacronic ca limbajul Pascal. E doar un motiv ca companiile să vină din nou să se plângă că sistemul de învățământ e inadecvat, uitând că marea majoritate a celor care termină liceul au mai mulți ani în acest sistem de învățământ decât media angajaților în cadrul companiilor (4 ani).

Deci, domnilor de la companii, greșiți. Vă cunosc retorica pe care am practicat-o și eu, ignorant. E o retorică atractivă, vinde publicitate pe site-urile de știri și poate vă dă un aer de importanță și autosuficiență. Dar, domnilor de la companii, întrebați-vă de ce angajații voștri nu sunt capabili să ia nota zece la bacalaureat. Nu cumva pentru că cei care iau 10 la bac merg la companiile care vă vând vouă uneltele și prefabricatele?

NOTES   [ + ]

1. Atenție! joburile în IT sunt mult mai multe și mai complexe decât doar programare, dar programarea e un aspect important

Comments

Bacalaureatul la informatică, 2017, și despre firma care a făcut attention-whoring pe seama examenului — 33 Comments

  1. In primul rand, exista o problema la nivelul programarii, in general. Nevoia mare de oameni care sa cunoasca limbaje de programare ii face pe multi sa ignore faptul ca oamenii astia habar n-au algoritmica. Nu inteleg logica unui proces, dar stiu “la perfectie” un limbaj care in 3 ani de zile poate fi mort (vezi ce s-a intamplat cu intreaga suita Flash). Sunt oameni care nu inteleg matematica superioara si care nu prea pot gandi matematic si sunt oameni inflexibili. Ei sunt echivalentul muncitorilor din trecut. Inginerii, insa…

    • Corect. Partea cea mai amuzantă e când compania cere chestii necesare azi gen „securitate”, neînțelegând că securitatea e un subiect complex, care ține de infrastructură, de psihologie, de matematici superioare, dar și de aplicare specifică la fiecare limbaj și tehnologie în parte. Ce să le predea la „securitate”, cum să țină minte o parolă decentă?

  2. Securitatea nu s-ar putea preda in liceu. In schimb s-ar putea introduce notiunea de codare defensiva. La facultate in schimb s-ar putea pune mai mult accent pe aspecte ce tin de securitate in legatura cu fiecare materie. Am avut cel putin 3 discipline diferite care abordau aceleasi probleme de genul garaj virtual, doar ca in limbaje diferite; aici s-ar putea introduce lejer anumite concepte ce tin de “cum sa scriem cod care sa nu cauzeze brese de securitate”. Partea asta nu e atinsa aproape deloc (au fost cazuri in care s-au mai amintit astfel de aspecte).
    Securitatea in sine e un concept mult prea larg si intr-un mediu care evolueaza atat de repede scoala ar putea sa iti ofere doar o baza, de la care sa te poti axa pe o nisa mai apropiata de ceea ce faci. Nu poti sa ai un expert in securitate care iti “rezolva” azi sistemul de la un capat la altul. In schimb poti sa ai oameni care stiu ca securitatea e un lucru care trebuie inclus in fiecare faza de dezvoltare a unui produs. Si oameni care stiu sa scrie cod care nu doar ca face ce trebuie, dar e si sigur.

    • Nu au profesorii de liceu capacitatea de a preda așa ceva. Locul pentru astfel de idei este la facultate, nu la liceu. Profesorii de liceu nu sunt pregătiți să facă asta, și oricum nu ar trebui să fie ăsta obiectivul lor. Ei ar trebui să deschidă lumea către algoritmi, către structuri de date, etică și profesionalism se fac doar pe zonele specializate (facultate, școli special dedicate acestui subiect)

  3. Dorin, eu cred că problema e chiar mai gravă, și nu ține neapărat de predarea informaticii în liceu. Ține de predarea oricărei materii în liceu, de absența unor cunoștințe de bază în fizică sau matematică sau orice altă materie la absolvirea liceului.

    Am o cunoștință student la informatică la UBB Cluj. A trecut peste un bacalaureat, peste o admitere, și chiar dacă a intrat pe locuri cu taxă nu poate fi considerat chiar cel mai slab absolvent de liceu. E un cârcotaș, care tot timpul are ce are cu materiile și profesorii de la facultate, pe motiv că “nu ne învață ce ne trebuie în practică, sunt demodați, etc. etc.”
    Într-o zi, ca să-l mai fac să zică și altceva, mai constructiv, i-am arătat o bucățică de cod (Processing), ceva elementar. S-a blocat la “ellipse”, pur și simplu nu știa ce e o elipsă!

    Ideea e că dacă habar n-ai ce e o elipsă, sau cum calculezi o accelerație sau ce e aia o integrală n-o să poți să fii niciodată programator. Am fost așa de șocată de descoperirea mea, că i-am și spus verde în față “la lacunele pe care le ai, n-o să ajungi niciodată programator, oricâte instrucțiuni ai învăța”.

  4. “Ăsta e examen pe care niciun angajat în IT nu are voie să îl ia cu notă mai mică decât zece”

    well, nu chiar. sunt o gramada de angajatii IT care lucreaza in infrastructura/operations care nu au habar o boaba de programare

  5. Programator e o chestie foarte largă – analogia lui Dorin e bună – sunt foarte mulți programatori care vor lucra 10 sau 15 ani fara să trebuiască să implementeze vreun algoritm “pe bune” și care tot ce fac e să asambleze “componente” care fac CRUD peste o baza de date făcută de alții, cu stocate scrise de alții, același lucru de 50 de ori. As zice că asta e majoritatea, și multe firme doar de asta au nevoie.
    Alte profesii au reușit să inventeze denumiri diferite pentru diverse job-uri, în domeniul asta, mai greu.
    Probabil ce ar trebui să ne existe ar fi echivalentul școlilor de meserii din alte profesii – exact pentru cei ce se mulțumesc să facă echivalentul muncii unui muncitor la bandă din fabrică. E nevoie și de așa ceva, și se poate câștiga un ban cinstit și din asta.

  6. Dorin, eu cred ca tie iti place algoritmica si te framanta ca nu gasesti suficiente joburi in care sa-ti aplici cunostiintele.

    Este normal ca un programator sa nu scrie un algoritm de binary search sau un red black tree, pentru ca exista deja librarii care ii satisfac cerintele, si e mult mai ieftin(timpul inseamna bani) sa folosesti software off the shelf pentru a livra produsul catre client. Iar cand anii trec e normal sa uiti anumite lucruri, pentru ca in afara de job trebuie sa ne traim si viata alaturi de cei dragi, si rar avem timp sa-l recitim pe Cormen.

    Programatorii din firma aia sunt buni la ceea ce fac, ca nu-i plateste nimeni pentru imbunatatirea unui Greedy sau A*.

    Cine are nevoie sa dezvolte un nou algoritm vorbeste cu un departament dintr-o universitate de profil, poate finanteaza cateva granturi. Vorbesti de securitate, cand NSA are probabil un buget de cateva ori mai mare decat al Romaniei, iar noi avem doar o firma de securitate cu 200+ oameni in tara(Bitdefender).

    Piata cere asamblatori de componente, nu doar in Romania, si cea globala. 90% din Googleri, Facebookeri si Uberisti nu scriu noi algoritmi, ci asambleaza componente. Algoritmii sunt acum scrisi de alti algoritmi(machine learning), si e posibil ca niciun om sa nu inteleaga outputul.

    So cut the crap. Sistemul de educatie din Romania cu siguranta nu livreaza ceea ce cere piata, cu atat mai putin ceea ce va cere in viitor.

    • Desi e clar ca nu sta nimeni sa rescrie algoritmii clasici la munca, cunoasterea lor (mai ales a celor de baza) sau posibilitatea de a ii intelege cu un minim de efort e ceva esential pentru un programator. Sa nu poti lua 5 pe subiectele astea e o rusine.
      Si nu in toate ariile poti pur si simplu sa incluzi o librarie in softul tau. Atunci ce faci? Daca nu ai pe nimeni in echipa care sa se poata adapta si sa invete ceva nou / sa-si reaminteasca ceva vechi ce faci? Invatatul nu se termina cand se termina scoala.

      Si din nou, securitatea nu cade doar in curtea companiilor care vand produse de securitate. Una e sa dezvolti un antivirus, alta e sa stii la ce fel de atacuri ar putea sa fie vulenrabil softul la care lucrezi si sa stii cum sa reactionezi in fata lor sau sa le eviti.

  7. Recurgerea la ad hominem cand cineva iti refuta argumentele nu iti aduce puncte bonus, dimpotriva. Dar e ok, nu oricine poate sa ridice ochii peste zidul frustrarilor proprii.

  8. @Cristi, introducerea unei noi librarii sau framework in echipa/proiect tot invatare presupune. Faptul ca programatorii au uitat in cativa ani sa scrie un red black la comanda nu inseamna ca nu mai invata, ei au continuat sa studieze dupa absolvire topici care le sunt utile in proiect si cariera, cum ar fi design patterns, multithreading/processing, lucrul cu platforme cloud sau alte limbaje.

    Poate ca au uitat chestii care nu le mai sunt utile. Good for them. Asta nu-i face programatori prosti, cum crede stimabilul @Dorin Lazar. Dimpotriva, s-au dovedit buni ingineri pentru ca au gasit metode de a livra produsul cu un cost minim de timp si efort.

    Ca unii au o viziune de cal si inteleg lumea ingineriei software doar din prisma limbajelor de sistem, iar aici doar C++, caci din ce am citit pe blog, ma indoiesc ca autorul a incercat vreodata D, GO sau Rust.

    Heck, luand in considerare ultimul lui articol de pe aria tehnica legata de Observer pattern, ma indoiesc chiar si de capacitatile lui in C++: citez “as fast as possible”, dar la fiecare Emit subscriberii sunt copiati intr-o noua colectie. Yup, faaast! Daca tot vrei sa emulezi Events din C#, poate ca ar trebui sa arunci un ochi pe conceptul de imutabilitate a unei colectii, si ce implica asta pentru Sub/Unsub.

    • Tot insisti cu RB tree-ul ala. Nu se preda la liceu, stai calm. Repet, orice ai face ca programator (de la sarit din framework in framework la fiecare 3 luni in JavaScript, la scris drivere in Rust) nu ar trebui sa fie greu sa iei 5 pe subiectele astea (indiferent de limbajul in care incerci sa rezolvi problemele, hai sa nu ne limitam la C/C++ sau Pascal). Sunt lucruri elementare.
      Sunt sceptic ca cineva caare nu intelege un subiect de BAC la info e in stare sa inteleaga cu adevarat concepte ca design patterns (cand si de ce e bine sa aplicam unul si nu altul), multithreading (lol, am fosti colegi de facultate care lucreaza ca programatori si cred ca thread-urile exista doar in Linux), sau sa invete cu adevarat alte limbaje (te rog, ia-l pe domnul ala care nu ia nici 5 pe un subiect elementar de C++ si pune-l sa invete Rust, sa vedem pana unde ajunge).

      Din pacate aici e cum a zis Dorin “compania respectiva sa nu confunde cerintele ei cu cerintele pietei”. In general la noi daca esti in stare sa urmezi doua tutoriale pe youtube si sa iei cu copy/paste 3 raspunsuri de pe stack overflow ca sa mai lipesti doua librarii de JavaScript intre ele ai facut destule, hai la urmatorul proiect. Sa nu ne mintim aici.

    • cuthecrap, mai cut the crap. Motivul pentru care nu discut cu tine (așa cum face Cristi) este că cunosc ceva mai bine genul tău de oameni. Ai mare noroc că m-ai prins într-o dispoziție de zile mari, și nu o să-ți răspund cu limbajul pe care îl meriți, singurul pe care îl înțelegi cu adevărat. În mod normal, cu un partener real de discuție poate chiar aș fi discutat despre ce observații are legat de articolele mele, dar pentru un anonim îngâmfat care nici nu știe să citească și tot ce face e să facă pe semidoctul fără să încerce să comunice cu mine nu am de gând să fac niciun efort. Altfel, cum ziceam, noroc că m-ai prins într-o dispoziție faină, și nu te trimit în direcția în care meriți.

  9. Genul meu de oameni, adica capabili sa participe la o discutie punand in tema idei in loc de invective. Tare! Poate reusesti sa bugetezi un fond de training pentru soft skills, am inteles ca e penurie in Romania de asa ceva.

    Pana atunci, feel free to crap away!

    • Hai să-ți explic un pic de ce greșești.

      Nu te cunosc și vii la mine spunându-mi Dorine, de parcă am mâncat din aceeași farfurie și ne-am tras de șireturi când eram mici. După aia vii și scrii ceva pe lângă subiect, legat probabil de ceva probleme pe care le ai tu pe creier și despre care nu am vorbit, și pe care, apropos, nici nu le acoperă programa școlară. Drept urmare te salut, îți recunosc capacitatea de a nu citi textul pe care comentezi și te îndrum prin sintagma cheie, „analfabet funcțional”. Tu nu pricepi, și consideri că faptul că eu am identificat problema ta comunicațională e un ad hominem. Păi mă, cum să fie ad hominem când tu te prezinți ca un anonim oarecare cu un apelativ agresiv la adresa nu numai a autorului, dar și la adresa oricui ar putea să fie de acord cu postarea mea, pentru că, știi, a citit-o și a înțeles-o, spre deosebire de tine.

      Acum evident că nu o să mai discutăm pe argumente, și faptul că tu habar nu ai de ce am scris o funcție într-un anumit fel demonstrează că ești cel mai probabil un om slab de caracter, disperat să-și strecoare propriul lui atac jenant în discuție.

      Acum înțelegi de ce mănânci rahatul pe care zici tu să-l tai eu?

  10. Am citit si eu articolul aparut din presa. Ca intervievator folosesc probleme de algoritmica in interviuri, asa ca m-a mirat sa vad ca un programator citat in articol spune ca nu au aplicabilitate. Am mers un pas mai departe sa vad ce facultate a terminat omul.
    LinkedIn spune Spiru Haret.

    Ok, ma pot intoarce la treburile mele.

    Pot in schimb sa confirm din experienta mea limitata si irelevanta statistic de intervievator ca programatorii tineri sunt in medie mai buni la algoritmica decat cei cu vechime (disting aici intre vechime si experienta).
    Nu stiu daca sa pun asta pe seama scolii sau pe seama internetului care face accesibile oricui intrebarile tipice de interviu de la companiile mari din domeniu.

    • Poti sa pui asta pe seama faptului ca aia tineri au terminat mai de curand facultatea.

      Caz concret: eu. Am facut liceu de informatica, am facut facultate de informatica (la “privat”, ca sa nu va obositi sa cautati pe LinkedIn). Eram toba carte cand am iesit din facultate – stiam si grafuri, si backtracking si tot felul de mizerii de care, intre timp, nu am mai avut nevoie. Rar imi mai apare in fata o problema pe care sa o rezolv folosind un algoritm pe care l-am invatat. Ca sa imi mai aduc aminte de algoritmi mai rezolv cate o problema pe site-uri gen CheckIO.

    • @Horea: cred că lipsa de exercițiu, dar și natura bizară a genului de muncă pe care o desfășurăm (că mă tot plângeam că punem cap la cap componente prefabricate) ne îndepărtează de partea creativă a programării. Cred, totuși, că asta nu înseamnă că ar trebui să acceptăm incapacitatea de a rezolva ceea ce sunt, în fond, niște probleme simple. De-asta zic, problemele de la bac mi se par suficient de simple cât să fie rezolvabile de orice programator activ. Nu zic de programatorul care s-a mutat în management, nici de cel care nu mai face programare ci un pic de web-design și în rest scrie mailuri. Mă refer la programatorul pe care îl numim de obicei ‘senior’, programatorul matur, care încă nu se teme să rezolve o problemă fără să arunce cu un framework în ea.

  11. Presimt niste flame-wars ca pe forumurile de pe vremuri :))

    La urma urmei intrebarea pe care ti-o pui este “ce inseamna un programator bun?”. Nu toate slujbele in IT sunt la fel. Nu inseamna ca daca nu aplici algoritmi zi de zi esti un p-afarist care nu stie decat sa caute pe SO si sa mufeze trei frameworks cap la cap. Chiar si fara sa folosesti algoritmi esti pus in fata a tot felul de decizii pe care trebuie sa le iei (ce structuri de date sa folosesti, cat de mult sa normalizezi o baza de date, cum sa alegi ce framework sa folosesti pentru o anumita aplicatie etc), iar asta nu poti sa faci fara o educatie in spate.

    Am avut si eu un baiat la interviu care se pricepea cat de cat (era junior), dar se vedea cumva lipsa de educatie in IT (facuse o facultate gen “Inginerie economica” parca) si ne-am dat seama ca daca il puneam fata in fata cu codul nostru nu avea mari sanse de integrare .

    Concluzia: e important sa studiezi informatica in mediul academic, indiferent de ce limbaj de programare folosesti, dar pana la urma trebuie sa “ai cap” pentru asta.

    PS: Fun fact – am un coleg care este cel mai bunt programator pe care-l cunosc (commiter pe OpenSource, speaker pe la conferinte). A terminat REI.

    • Când zic „programator”, zic om care programează, nu manager, nu web designer, ci un om pentru care munca de zi cu zi presupune să scrie cod pentru a pune lucrurile cap la cap. Putem discuta dacă munca de programator a evoluat suficient cât să nu mai necesite foarte multă înțelegere a algoritmilor, dar e o falsă dilemă. Problema majoră e că ce testează oamenii la bac e capacitatea de a urmări un algoritm. Serios, asta fac majoritatea punctelor respective. Faptul că se cere Pascal sau C, că pare o chestiune dificilă pentru cei care nu sunt pe subiect, aia e altă discuție, dar vorbim totuși de un examen pentru care elevii s-au pregătit, și care zic eu că nu e chiar așa ilogic cum urlă toți șomerii pe internet.

      Ce spun este că dincolo de „educație în IT”, urmărirea unui algoritm e un element foarte important pentru un programator, o chestiune fără care nu se poate. Și asta nu mai depinde de limbajul de programare, sau de cât de proaspătă îți e materia în cap. Sunt niște chestiuni simple, de bază, și, mai ales, necesare. Algoritmi, structuri de date, dacă pretinzi că ești programator trebuie să le acoperi și pe-astea.

      Apropos de fun-fact-ul pe care l-ai dat, câteva probleme. Prima – că dacă cineva face commit pe proiecte open-source nu înseamnă neapărat foarte mult, faptul că vorbește la conferințe iarăși nu înseamnă foarte mult. Nu pot să-i evaluez calitățile de programator din aceste două informații – trebuie să văd ce cod trimite pe proiectele alea, ce spune la conferințele respective. De-asta zic, o fi bun, nu spun nu, dar poate și să nu fie, și să fie doar o impresie.

    • Si aici ajungem la discutia “ce inseamna un programator bun”, dar asta depaseste cadrul de fata.

      Ai dreptate – trebuie sa stii algoritmi, structuri de date, optimizari (si nu numai) atunci cand iesi dinrt-un liceu de informatica. Faptul ca se prezinta in C sau Pascal nu mi se pare relevant.

      Si eu eram revoltat pe liceu cand am intrat in “campul muncii”, zicand la toata lumea ca ne-a invatat ceva irelevant, dar acum ca am imbtranit ma gandesc ca nu era neaparat vina programei, ci a profesorilor care nu au stiut sa ne arate latura utila a informatiei. Nici in ruptul capului nu o sa-mi dau seama de ce trebuia sa rezolv eu problema celor N regine si care e de fapt aplicabilitatea practica.

      Cand am vrut sa invat Python am facut un curs in care faceai joculete scrise in Python, de la simpul “Guess the number” pana la o clona de “Asteroids”, acoperind astfel cam tot ce poti face intr-un limbaj de programare – instructiuni decizionale, functii, variabile, liste si obiecte.

    • exact. Și genul ăsta de cursuri sunt chiar scurte – 8-16 ore unele din ele. Nu zic că un limbaj de programare se învață în 2 zile lucrătoare, dar nici nu ar trebui să fie dificil cu o bază solidă.

  12. Pingback: Subiectele (reale) de la bac 2017 | dorinlazăr.ro

  13. Python all the way. Inteleg de ce lumea care a lucrat cu C# il apreciaza, dar este o alegere care te limiteaza daca te uiti la tipul de tehnologii care au fost adoptate de companiile IT din Romania. De la ambele poti trece la C/C++ sau Java si poti sa le folosesti atat ca limbaje introductive cat si pentru a intelege de ce ai nevoie de scule mai destepte. Dar partea de infrastructura pentru aplicatiile C/C++ sau Java poate fi usor scrisa in Python, ca sa nu mai vorbim de testare, este genul de limbaj care poti sa-l folosesti mai departe.

    Din perspectiva profesorilor, mai putin conteaza cat de bine cunosc limbajul de programare, li se cere doar sa-l utilizeze pentru a demonstra niste concepte mai degraba, nu este vorba doar de capacitate cat si de lipsa de vointa. Mai importanti sunt elevii cand vine vorba de aceasta alegere.

    • Python nu are suficientă rigurozitate, e foarte ușor să ratezi niște lucruri acolo. Aș prefera un limbaj care și forțează tipurile de date folosite.

  14. Pe mine ma seaca paranteza deschisa aici: “nici a doua variantă (framework-urile se schimbă” care nu se inchide niciodata :))))

Comentariul tău