Anul 2 - the end
S-o terminat două treimi de facultate. Vrooooom. Anul acesta a trecut mult mai repede decât primul an. Îi foarte interesantă percepția asta relativă a timpului. Țin minte foarte clar că primul semestru din primul an mi s-a părut așa de lung și că am avut atâtea chestii de făcut la FP. Acuma? În primul semestru? Deși probabil am avut mai multe teme de făcut (ca și cantitate) la MAP (și erau și-n Java), o zburat timpul și înainte să te dezmeticești era iarnă și frig și mergeai la examene înfofolit la maxim.
Cum din ceva motiv nu am făcut un review la materiile din primul semestru în februarie, le voi trece în revistă acuma.
Semestrul 1
Sisteme de operare distribuite. Îi basically Sisteme de operare 2. Cu același prof, aceeași carte, doar că mai faci IPC pe Windows și multe multe chestii cu threading/comunicare între procese. Mie mi s-a părut un pic ciudat faptul că lucrezi „distribuit” pe același calculator. Dar măcar temele îs mai puține ca în primul semestru, deși ultima e mai complexă, dar tot făcubilă într-o zi.
Metode avansate de programare. Aka Java și (over)design patterns. Materia asta a generat cele mai multe reacții (comentarii) din partea publicului pe blogul meu (pfoai, ce discuții erau pe aici: dacă am implementat corect în exemplul meu MVC și unde trebuie pus Observable și Observer). Slideurile au fost perfect suficiente pentru examen (dar atenție, la unele chestii îs mici diferențe de denumire față de documentația oficială Java, de exemplu nested classes și inner classes erau denumite altfel). Fază nașpa: la examenul practic nu ne-a lăsat pe laptopurile noastre :(( . Și cum în data în care am mers eu a mers jumate din an, ne-am înghesuit și ne-a băgat și în laboratoare care nu aveau IntelliJ Idea :( Așa că înainte de examen aruncați-vă ochii și peste medii de dezvoltare alternative și să aveți habar cum se lucrează fără WindowBuilder.
Programare Logică și Funcțională. La început materia este mind-boggling, dar merită. Simți că ți se rupe creieru', dar după ce înțelegi care îi faza cu backtracking-ul în Prolog și cu modul de gândire fără efecte secundare în LISP, altfel vezi lumea. Și o vezi mai bine. Oricum, learning curve-ul este destul abrupt, așa că laboratoarele nu trebuiesc lăsate pe ultimul moment. Fază nașpa: lucrăm în limbaje vechi și, în unele cazuri, fără un IDE normal (Turbo Prolog...)
Probabilități și Statistică. Materia ar fi putut fi super tare, dar a fost prea plină de teorie și prea puține demonstrații concrete de aplicabilitate. Exemplele au fost generice, ca în orice carte de statistică, pe când s-ar fi putut foarte ușor face chestii care se aplică în informatică (un filtru spam bayesian, de exemplu). Sincer, nu pot să zic că știu să folosesc intervale de încredere și alte minuni în viața reală. Da, știu să manipulez formal formulele pe care ni le-a dat profa, dar nu înțeleg ce se ascunde în spatele acelor formule. Și cred că asta este totuși o parte importantă a învățării: understanding things.
Baze de Date. Am fost prima generație la care proful a avut slideuri \:D/ Și o dedicat ultimul curs pentru baze de date NoSQL :>:> La laborator și seminar făceam în C# aplicații CRUD. Copy paste ftw (dintr-un laborator de-al meu în altul desigur). Și ia ceva vreme să te obișnuieși și cu SQL (care îi și el limbaj declarativ, și nu imperativ), și unele query-uri pot fi întortocheate.
Proiect Individual. Documentație mai multă decât cod. That's just wrong. Good code is self-documenting. Dacă respectați deadline-urile, îi foarte ok materia.
Algoritmica grafelor. Asta este o materie din anul 3 pe care mi-am luat-o ca să fiu mai lejer la anul. Bine că am făcut-o acuma și nu va trebui să mă mai stresez la anul cu ea. Cel mai mult (ca timp) mi-au luat aceste laboratoare. De obicei îmi dedicam câte o sâmbătă întreagă ca să le fac. Proful dădea mai mult algoritmi matematici, cu demonstrații matematice greoaie, și nu explica intuitiv ce se întâmplă în grafe. Cred că de-a lungul semestrului a desenat la curs mai puțin de 10 grafe. Ce îi un MST sau un cociclu de pe Wikipedia am înțeles. Și îi materie obligatorie.
Demult o fost semestrul 1, abia mai știu ce am făcut :-S
Semestrul 2
Gestiunea Tranzacțiilor și Baze de Date Distribuite. Aka fancy Baze de date 2. La materia asta s-o întâmplat cea mai weird chestie. A fost o neconcordanță aproape completă între cursuri și laboratoare/seminarii. Profa cu care se făcea materia asta la info-română a mers în concediu de maternitate, așa că ne-a preluat profesorul de la info-engleză. Care în primul semestru le-a predat materia în altă ordine. Și nouă ne-a predat aceeași chestie ca și lor. În general asta nu a cauzat probleme, doar la un singur laborator trebuie să îți faci rost de algoritmi de unde știi tu, că profesorul nu făcuse de loc Optimistic Concurency Control. În rest, proful a fost foarte ok și explica bine.
Ingineria Sistemelor Soft. Mi se pare exagerat accentul pe care îl pune profesorul pe documentație. Și mi-a plăcut o chestie: deși undeva menționează principiul YAGNI (you ain't gonna need it), dar ne-a zis foarte mult că: dacă se adaugă clasa X, sistemul devine fragil. Dacă se întâmplă Y, trebuie rescrisă metoda y. You ain't gonna need it. Dar se trece ușor.
Algebră computațională. Mi-am ales materia asta în loc de opționalul de Machine Learning pentru că am zis că ML învăț singur oricum, dar criptografia îi prea jos pe to-do list ca să ajung vreodată la ea, așa că mai bine mă forțez prin facultate să o fac. Astfel am primit o doză mai mult decât dorită de demonstrații de ce sunt corecți algoritmii folosiți azi în criptografie. Pretty fun. Și a fost primul colocviu oral. A durat doar 3 minute, dar tot a fost oral :)))
Inteligență Artificială. Ah… AI :X My favorite :X Laboratoarele cele mai drăguțe ar necesita o tonă de putere de calcul (și mult timp să ruleze și mult RAM). Profa îi foarte de treabă, știe bine materia și îi la curent cu cele mai recente descoperiri din domeniu și, dacă o întrebi, îți poate explica multe. O chestie nu mi-a plăcut: profa a încercat să acopere multe domenii și așa nu a putut intra în detaliu în majoritatea și la unele chiar a fost doar „touch&go”. Eu aș fi dorit să se facă mai degrabă o parcurgere DFS a materiei :))) O altă fază nașpa, dar care e în întregime vina mea, e că am făcut de mai dinainte cursuri de AI și ML pe Coursera și edX, așa că m-am cam plictisit la cursuri :))
Retele. Materia la care am învățat cele mai multe chestii intersante. În sfârșit, știu ce îi Subnet Mask :))) Data următoare când îmi configurez routerul, nu o să mai lucrez orbește. Proful explică bine materia și are un stil amuzant (și îi place să facă trolling, mai ales în lifturile de la FSEGA). Laboratoarele îs destul de faine (am avut de implementat un program de chat printre altele), doar că trebuie implementate în C :( Pentru a ușura trecerea examenului, visatul în somn al puterilor lui 2 și al schimbării din baza 2 în baza 10 îi obligatorie.
Proiect Colectiv. Urmașul spiritual al proiectului individual. Urmaș cam nepotrivit. Eu am fost Project Manager la semigrupa mea. Nu prea am aptitudini prea bune de lider (sau încă nu le-am găsit! Îi drept că nici nu m-am uitat prea adânc după ele în sufletul meu) și mi s-a părut un pic cam greu să trec brusc de la one-man team la o echipă de 11 persoane. Cum a mai sugerat cineva în chestionarul pe care l-am făcut, era mai bine să se facă mai multe proiecte colective, dar care la început să fie din echipe mai mici, de 2-4 persoane, și doar apoi să se treacă la unul de o semigrupă întreagă.
O altă problemă mare a mea a fost că cerințele nu erau clare deloc. Da, clienții nu știu niciodată ce vor, îs neclari, spun prostii, etc, dar în momentul în care le arăți ceva ce ai dezvoltat, primești un răspuns: da sau ba. Sau dacă ceri clarificări de la client, mai ales despre o chestie relativ bine definită (importarea de state de funcții), primești răspunsuri și un exemplu bun. Nouă ni s-a schimbat în ultima săptămână formatul pentru statul de funcții. Și l-au făcut pretty much impossible to parse fără a dezvolta un sistem de NLP. Mai înțeleg că o grupă nu înțelege ceva și nu face bine. Dar 11 grupe să nu facă nimica (din 22)? Asta înseamnă că nu s-a explicat deloc bine. Și încă unul din profesorii din comisie zicea, când am prezentat eu, că trebuia să se pună mai mare accent pe funcția asta.
O altă problemă o fost faptul că s-a făcut o singură evaluare. În domeniul IT se știe ca asta nu dă rezultate bune să arăți la client doar la sfârșit programul și îți iei banii. De-aia s-o inventat metodologii gen Agile, Scrum, etc, în care la fiecare 1-2 săptămâni prezinți ceva la client și primești feedback imediat.
Și încă o chestie: cerințele pentru documentație nu s-au dat explicit! Eu am aflat ce documente trebuie din baremul din anul anterior. Și documentele acelea nu puteau fi mai vagi. Care-i diferența între Test Cases și Test Scripts? Am întrebat și pe proful de la laborator și pe cel de la ISS și nu au știut să îmi zică.
Dar cică de la anul materia va fi în anul 3. Așa că poate se vor schimba și alte lucruri.
Calcul Numeric. Altă materie din anul 3. Mi-a plăcut materia asta. Am învățat lucruri noi pe care probabil o să le aplic, pentru că Machine Learning, domeniul spre care vreau să mă îndrept, conține multă statistică și calcule numerice și îi important să știi de chestii gen „catastrophic cancelation” și alte cele. Și, ok, tre' să știe orice programator asta. Dar de ce se face așa târziu? Cine o avut ideea genială de a pune materia asta în ultimul semestru, când deja toată lumea se stresează pentru licență? Examenul final la Calcul Numeric constă în 2 probleme care sunt date să le rezolvi acasă în 5 zile. Eu m-am chinuit 5 zile să îmi fac problemele. Și eu încă am avut unul din subiectele ușoare. De ce s-o pus materia asta în anul 3, semestrul 2, când ultima oară când ai mai făcut mate îi în anul 2, semestrul 1? Să se asigure că ai uitat orice rămășiță de analiză? Mă bucur foarte mult că am scăpat de materia asta și că nu o să mă stresez și cu ea peste un an.
Well, that's about it. Cu asta m-am ocupat pe la facultate anul acesta. A trecut repede. Și parcă văd că anul viitor va trece și mai repede. :(