Anul II de facultate e intens (jurnal de informatică aplicată)
M-am întors la facultate după o vacanță de vară. Concluziile celui de-al doilea semestru din primul an le-am scris pe-aici. Acum, să vă povestesc cum arată începutul de an II. Care e intens.
Dacă primul an a fost greu pentru că erau o mulțime de lucruri noi (mai ales pentru mine, care uitasem complet matematica de liceu și care nu mai făcusem C++, spre deosebire de colegi), acum e greu pentru că toți profii cred în teme și proiecte. Există cel puțin un cadru didactic care nu crede în propria materie, dar crede în proiecte.
Sportul continuă să fie obligatoriu. Am descoperit că „DFG” înseamnă „Dezvoltare fizică generală” și că, dacă te înscrii la acest DFG, trebuie să ai cel puțin 5 prezențe și să dai și o normă. Am scăpat de DFG cât de repede am putut și am făcut pe dracu-n patru ca să mă înscriu din nou la excursii, urcând Tâmpa prin noroaie mai degrabă decât să demonstrez că nu sunt capabilă să alerg cu spatele, făcând fițe, fără să mă încurs în propriile picioare. (Și după ce m-am înscris platforma-minune a universității a avut o eroare și m-a scos de pe liste în ultima clipă, așa că am apărut ca o floricică în fața profei de la excursii, care s-a enervat rău pe mine și pe univers că există astfel de situații.)
Limba străină continuă să fie și ea obligatorie. La grupa noastră facem engleză, pe care mi-o echivalez (altfel se ține cu o profă-minune). Celelalte 3 grupe de anul trecut făceau germană. Pentru că nu te poți muta de la o limbă străină la alta, în momentul în care s-au refăcut grupele la începutul anului nu am putut primi studenți de la alte grupe.
Inevitabil, unii studenți renunță la programul de studii pe parcurs. Din 72 am rămas vreo 60 și un pic. Din cauza englezei, grupa mea are doar 14 oameni, celelalte 2 grupe având fiecare peste 20 de studenți. E destul de dezechilibrat, dar bănuiesc că ne vom reorganiza iar în anul III, când nu va mai fi obligatorie limba străină.
Altfel, materiile de bază sunt următoarele:
- Algoritmica grafurilor
- Baze de date
- Limbaje formale și compilatoare
- Medii și instrumente de programare
- Modern C++
Și avem și un opțional:
- Paradigme și principii în machine learning
(Vi s-a întâmplat vreodată să vă dați seama că v-au pus cursurile în orar în ordine alfabetică? Singurul care iese din tipar e cel cu „machine learning”, pe care-l avem fix înainte de „Limbaje formale și compilatoare”.)
Algoritmica grafurilor
Cursul e ținut de Adrian „Dictărel” Deaconu, pe care l-am avut ca prof și în anul I la Fundamentele Programării și la Programare Orientată pe Obiecte. Stilul lui rămâne identic: dictează. De data asta, nu mai dictează din propriile manuale, ci din cartea lui Eleonor Ciurea despre subiect, deci materia e un pic altfel structurată și nu mai constă doar în recitat de documentație.
N-o să intru în detalii despre grafuri (cred că internetul are suficiente informații despre subiect), dar materia nu mai ține de vreun limbaj de programare, ci este despre concepte. La laborator o avem pe Corina Nănău, care are o energie molipsitoare și e foarte pusă pe treabă. Temele pe care le dă sunt destul de intense - până acum a trebuit nu doar să facem ce ține strict de grafuri, ci să facem și interfețe grafice - dar sunt realizabile. Știu asta, pentru că le-am realizat.
Acuma, Nănău e pasionată de Java și oferă ca ajutor bucăți de cod în Java, mai ales în ce ține de lucrurile care n-au legătură cu materia. Partea proastă e că asta a determinat o mulțime de colegi să-și facă temele în Java fără să știe Java. Ceea ce duce la niște Probleme, despre care voi discuta un pic mai jos.
Baze de date
Cursul e predat de Constantin-Lucian „Costel” Aldea (spre deosebire de „Dictărel” pentru Deaconu, „Costel” e un nume pe care și l-a ales singur). Aș vrea să vă pot spune exact ce predă, dar din păcate, deși am fost la majoritatea cursurilor lui, nu am reușit să fiu atentă. Vorbește încet, blând și monoton și nici să vreau nu reușesc să mă concentrez pe ce zice. Am crezut că problema e doar la mine, dar am înțeles că și alți colegi au probleme similare. Am înțeles că materia nu e grea ca teorie, dar tot n-am apucat să mă uit atent pe cursuri.
Laboratorul e predat de Andreea Nistor-Șerban, care are farmec, entuziasm și e simpatică. Nu e programatoare ca formație, ci matematiciană, iar materiile pe care le predă la noi nu se axează pe scris cod. Aici, ne explică cum facem baze de date, care sunt principiile pe care funcționează, și care e sintaxa pe care trebuie s-o știm. Spunea că ar vrea să renunțe încet-încet la ce predă la programare și să rămână doar pe ce ține de matematică, dar cred că ar fi o pierdere pentru generațiile următoare.
Avem de făcut un proiect mare de baze de date pentru materia asta - și o sumedenie de teme săptămânale care presupun să copiem teorie din cursuri, fie de mână, fie în LaTeX. Inițial mi-am scris temele de mână, acum încep să mă cam plictisesc. La fel ca la japoneză pe vremuri, simt că pierd vremea când doar repet ce am citit altundeva, pentru că nu rețin mare lucru.
Vor fi și două parțiale din teorie și un examen scris. Vedem ce-o fi.
Limbaje formale și compilatoare
Un curs predat în tandem de Ioana Plajer și Alexandra Băicoianu. Bine, zic „tandem”, dar de fapt vin alternativ - o săptămână o preia una dintre ele, o săptămână o preia cealaltă. Amândouă sunt profesoare de top, dar au stiluri diferite. Ioana Plajer e genul care explică pe înțelesul tuturor și predă cu entuziasm pentru actul de predare. Alexandra Băicoianu suferă un pic de pe urma faptului că are materia la degetul mic și nu îi e mereu clar ce ar putea să nu fie clar; are entuziasm pentru concepte, vrea să ajungem să scriem cod nu doar corect, ci și lizibil, și să ieșim nu doar capabili să facem programe funcționale, ci și să lucrăm în echipe.
Seminarul aici e predat de Andreea Nistor-Șerban, iar laboratorul de Alexandru-Florentin Florea. La laborator am tras puțin lozul necâștigător - Alexandru e de-abia la început de predare și nu pare să fi studiat prea intent problematica predării, așa că ne-am trezit că trebuie să lucrăm în C# fără să știm ce e cu limbajul ăsta, iar indicațiile au fost de genul „căutați și voi pe net”. Poate va fi mai bine în viitor.
Materia e interesantă; destul de teoretică. Vorbim de sisteme de rescriere, gramatici (dar nu ca alea de la filologie :( deși Chomsky e autor moral al unor gramatici și aici), automate. Dacă e cineva curios, pe la MIT au ceva similar și au pus clipuri pe Youtube aici.
Aici vom avea două proiecte de făcut, pentru că de ce nu. PROIECTE.
Medii și instrumente de programare
În ultimul moment, s-a decis ca la secția noastră cursul ăsta să fie predat nu de Răzvan Bocu, ci de Silviu Dumitrescu, care a insistat că vrea să facă minuni de vitejie la Informatică Aplicată, mai ales că va avea un curs și de tehnologii web la noi în anul III.
Materia este despre limbajul Java. Cred. Nu mi-e clar dacă ăsta era tot scopul ei sau nu, deși ceva din numele cursului îmi spune că ratăm niște lucruri. În fine.
Chestia e că materia de fapt nu e despre Java, cât e despre AI. Și nu despre scris AI, cât despre folosit AI. Dumitrescu e foarte pasionat de ideea de a pune AI-ul să scrie pentru noi și de a nu mai scrie cod noi înșine. Nu e de acord cu studenții care spun că vor să învețe bazele limbajului sau bazele programării de la el în ciclul de licență, ci crede că astea sunt noțiuni perimate. Mai mult decât atât, singurul mod de a programa corect în ziua de azi nu e ce facem în restul facultății, ci programarea declarativă, lucru pe care l-a comunicat și colegilor, care n-au reușit să-l convingă să facă altfel. Întrebat și de noi, studenții, dacă vrea să predea Java clasic, a zis că nu, așa ceva e rizibil, comparativ cu a veni în „joben și opinci” la facultate.
Laboratorul e predat de Bianca Iacob, o tipă destul de tânără care nu pare răuvoitoare, dar care nici ea nu a primit notificarea că ar trebui să și predea la laborator, așa că mai mult a așteptat de la noi să facem lucruri decât ne-a și oferit instrumentele să facem lucrurile alea. De-abia acum i-am zis că nu facem mai nimic la curs și a zis că va încerca să compenseze.
Avem câteva handouturi de la Dumitrescu despre Java. Până acum, declarativ, cursurile lui au predat noțiuni de genul: „așa se pot filtra datele după criterii, așa se pot strânge rezultatele într-o listă. Așa poți spune că un anumit tip de dată e opțional.”
Avem de făcut un proiect la materia asta, care spune să facem o aplicație client-server, concurentă, bazată pe comunicație prin socketuri, cu o bază de date relațională populată din fișiere json, care generează la cerere fișiere needitabile.
Dacă vi se pare că cele două n-au legătură, nu doar vi se pare. Joia asta la curs vreau să întreb dacă am primit cumva tema de la anul III, pentru că de-abia am habar ce înseamnă toate cuvintele alea, darămite să pot și să fac ceva în sensul ăla. (Asta e o cărămidă, ăsta e ciment, acuma du-te și construiește o casă în stil brâncovenesc.)
Din păcate, pentru că la materia asta teoretic se predă Java, dar practic nu prea se predă, înseamnă că orice altă materie care s-ar baza pe faptul că noi știm Java are de suferit. La algoritmica grafurilor, de exemplu, lumea tinde să aplice principiile de programare ale lui Dumitrescu și să-i ceară câte unui AI (Copilot, Gemini, după preferințe) să-i facă tema. Nu de alta, dar și-așa suntem încărcați cu teme și proiecte și când să mai apuci să faci și studiu individual prin care să compensezi neajunsurile profilor?
Modern C++
Cursul e ținut de Alexandra Băicoianu, iar la noi laboratorul e ținut de Iulian Popa.
Limbajele de programare mai și evoluează în timp și fac chestii din ce în ce mai șmechere, iar cursul ăsta vine în întâmpinarea noutății cu concepte recente din programare - unele cu care încă nu se lucrează prea mult nici în firme, dar care probabil vor fi adoptate pe scară mai largă până ieșim noi din facultate (cum ar fi modulele).
Ce e și mai interesant e că de fapt avem un singur lucru mare de făcut tot semestrul: un proiect de echipă (4 oameni) în care să facem un joculeț bazat pe Pokemon - cu logică de bătălie, de capturare de pokemoni, de evoluții și puteri magice, ba chiar și cu un pic de interfață grafică. Am impresia că până la finalul semestrului vom ști cam tot ce e necesar ca să facem proiectul cum trebuie cap-coadă… dar problema e că AI-ul își bagă coada și aici și există o tendință de a sări un pic peste etape ca să faci deja ce nu știi încă. Om vedea cum iese, dar ideea e mișto tare.
Principii și paradigme în machine learning
Asta e o materie care pune bazele materiei de Inteligență Artificială din semestrul viitor. E predată și la curs, și la laborator de Luciana Majercsik, care a terminat matematica și s-a mutat ulterior spre programare, iar asta se simte. Tot ce ține de AI implică multă matematică, iar Luciana se vede că are și bazele, are și înțelegerea a unde vrem să ajungem. Pe lângă faptul că e o persoană foarte de treabă, e și o profesoară care înțelege necesitățile studenților - doar că se vede și că n-a prea predat cursuri până acum și supraestimează mereu cât de departe poate ajunge. (Deși, sincer, nu e așa o problemă, pentru că se adaptează din mers.)
Materia e interesantă - deocamdată axată pe statistici și algebră liniară, plus un pic de scris cod în Python, plus niște explicații despre cum se face ML-ul în general, nu extrem de greu, dar necesită un pic de recontextualizare a ce știam deja.
Una peste alta
Entuziasmul meu față de facultatea asta a scăzut puternic. Mi se pare că în unele locuri se cere mai mult decât se oferă - la Medii și Instrumente de Programare în mod absolut evident, dar mi-e că și în alte părți vor exista probleme similare.
Semestrul ăsta avem de scris cod în: C++, C#, Python, Java, plus trebuie să știm postgresql. Dintre astea, C# și Java nu sunt real predate.
Chiar și presupunând că totul ar fi predat și informația ar fi ușor accesibilă și am putea construi pe bazele ei, tot ar fi o grămadă de teme - unele utile și interesante (Modern C++, algoritmica grafurilor), altele dubioase (copiat din curs la baze de date, generat cu AI la MIP), altele extrem de stufoase (MIP).
Există un punct în care mă întreb dacă ce fac e util sau dacă aș fi fost mai câștigată învățând programare pe cont propriu. Deocamdată înclin mai mult spre rămas, dar… uf. Cam scârțâie treaba, iar supraîncărcarea cu teme nu face decât să scoată în evidență locurile unde scârțâie mai tare.