This is an old revision of the document!


Laboratorul 12: Where do we go next?

OK, deci ai terminat POO, ai invatat sa folosesti C++ si ai apucat sa iti faci o idee cam cum functioneaza IRL. Te-ar interesa sa vezi cum poti sa “monetizezi” skill-urile invatate aici. Concret, ai vrea sa stii ce te intreaba la interviuri si cum poti sa te asiguri ca esti cat mai bine pregatit.

Bun, e important sa stabilim ca nu exista nicio “reteta”. Sunt multi factori implicati, cum ar fi domeniul in care aplici (Web, AI, Embedded, combinatie intre oricare etc.), norocul si timing-ul. Cu toate astea, sunt niste cunostinte care sunt cerute aproape mereu la interviuri. Poate nu toate deodata, dar la un moment dat, sigur :).

Concret, asta ar fi lista (minima):

  • Programare Orientata pe Obiecte (+ Design Patterns, SOLID)
  • Structuri de date si Algoritmi
  • Cunostinte despre Sisteme de Operare (Materie CTI, Anul 3, semestrul 2)
  • Domain knowledge (Github, informatii specifice domeniului in care aplicati (e.g. REST API pentru Web Dev sau Baze de Date))

Daca aplicati si la firme gen FAANG (Facebook, Apple, Amazon, Netflix, Gogu) sau chiar Bloomberg, J.P. Morgan, se mai cer:

  • Systems Design (e.g. Cum ai proiecta Twitter? Cum ai construi un site care iti genereaza link-uri random?)
  • Structuri de Date si Algoritmi (dar cu BOLD - ca trebuie sa le stiti la un nivel ceva mai mare)
  • Mentalitatea adecvata si genul potrivit de ambitie (e.g. Mi-ar placea sa te am ca si coleg? - Nu subestimati acest aspect)

Un sfat precursor: Aplicati la cat mai multe firme, chiar daca par “de neatins”.

  • Worst case: nu auzi din partea lor. So what.
  • Better case: Te cheama la un interviu si vezi ce se cere de la tine.
  • Worse case of better case: Nu iei dar esti cu atat mai intelept, stii data viitoare (++experienta).
  • Best case of better case: Esti chemat la HR sa negociezi salariul si ai privilegiul de a face fite la salariu si beneficii (++experienta && ++ bani && mandrie+=infinit).

Probabil ai citit asta acum si te gandesti ca e cam chineza ce ai citit mai sus. Nu e chiar asa. O sa incercam sa facem un break-down, astfel incat sa puteti invata singuri in cazul in care exista aceasta dorinta. Hai sa vedem.

Programare Orientata pe Obiecte

In ciuda aparentelor, C++ e un limbaj extraordinar de inceput pentru POO. De ce? Ca nu exista limbaj mai complex in termeni de POO. Odata ce ai inteles particularitatile POO din C++, restul limbajelor vor parea foarte usoare. Tranzitia catre alt limbaj se face foarte facil, fiindca multe aspecte sunt “abstractizate” in Programarea Orientata pe Obiecte din alte limbaje (e.g. Java, Python etc).

Principiile SOLID

Pe scurt, fiecare litera reprezinta un principiu:

  • Single-responsibility Principle
  • Open-closed Principle
  • Liskov Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

Suna a ceva savant, dar nu e chiar asa. Desi poate nu ati fost constienti, felul in care ati fost invatati sa operati in POO respecta aceste bune practici. Acum e momentul sa deveniti putin mai constienti de aceste principii si sa le intelegeti pe fiecare in parte.

Resurse utile aici siaici. Desigur, cautari pe Google in plus daca tot e neclar. Daca chiar e nevoie, apelati si la indieni. Sunt importante.

Design Patterns

Design Patterns sunt ca un fel de trusa de unelte din casa: Nu trebuie sa stii pe derost ce e in ea, dar trebuie sa stii unde o gasesti si sa folosesti ce e inauntru cu succes. Multe din problemele din viata reala se pot formula ca o problema POO (gen sunt unii nebuni care vor sa faca un site de vanzari pe servere si alte prostii). Pentru multe din aceste probleme, exista ca si solutie un Design Pattern.

Cea mai buna resursa de pe maretul YouTube este aici. E un playlist unde sunt explicati cei mai importanti DP la nivel intuitiv. Te-am scutit de indieni de data asta. (Hello Friends, tudei ai wil sho yu hau….)

Un site care ofera explicatii si exemple de cod aici. Alte resurse OK: aici si aici. Desigur, nu uita ca un search pe Gogu te poate ajuta mult.

poo-is/laboratoare/12.1611175453.txt.gz · Last modified: 2021/01/20 22:44 by sergiu.craioveanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0