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, Palantir, 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 si aici. 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.

Structuri de Date si Algoritmi

Normal, you already know what it is: CLICK ME BBY. Asta pentru SDA in C, dar mai mult pentru felul in care sunt prezentate conceptele.

Acum, exista mai multe alternative, odata ce vreti sa evoluati pe SDA. Indiferent de limbaj, aveti nevoie de exercitiu.

Rezolvarea problemelor poate fi impartita ca la sah: Exista “normal chess” si “lightning chess”. Diferenta e de viteza. Cand rezolvati singuri problemele, e normal chess. Cand sunteti la interviu, e lightning chess. In general, desi cei ce sustin interviul vostru va vor da hint-uri, daca nu exista acel “know-how” dinainte, e improbabil sa va prindeti de vreun super skepsis pe moment (mai ales cand e presiunea momentului asa de mare). Unele probleme trebuie sa devina reflex.

CEA OBLIGATORIE, ESTE BAZA VOASTRA. FARA ASTA, NU SE POATE: Leetcode

In principiu, exista destui oameni care vor sa invete un limbaj nou si sa il foloseasca pe acela mai departe. Optiunile generale sunt Java, Python sau Javascript. Either way, uitati un link cu top 7 cursuri de SDA, in functie de limbaj. Pun aici si un link catre un video de 8 ore de SDA in Java de la un inginer Gogu.

Indiferent de limbaj, “pick one and stick to that one”. In timpul interviului nu veti schimba limbaje. Invatati unul si bine. Faceti probleme pe Leetcode cu acel limbaj. Exista mock interviews pe Leetcode. Ce e un mock interview? Intrebare buna - simuleaza experienta unui interviu Google, inclusiv problemele care pica in general la interviu + eventualele hint-uri pe care le-ai primi de la inginer. Cate probleme sa fac??? Pana cand iti faci mock interviews de la Google si ti se par prea usoare. In general vreo 300-400 de probleme (50% easy, 35% medium, 15% hard) ar trebui sa fie in general o masura OK. Don't focus on that too much. Focus on the process of learning.

Sfat de abordare al problemelor: La inceput, toate problemele o sa para noi. Nu sta mai mult de 30 de minute per problema. Daca nu iti vine ideea in 30 de minute, cauta solutiile pe net (adica indieni, dar nu neaparat). Asigura-te ca intelegi rationamentul, apoi incearca sa rezolvi singur.

Poate te gandesti: “ba da io nu vreau in afara, eu vreau in Romania”. E splendid, doar ca tot mai multe firme din Romania au inceput sa implementeze acelasi tip de proces de angajare, axat pe probleme de SDA mai presus de tot, ca un fel de test suprem pentru un Software Engineer. Exista dus si intors pentru aceasta abordare, dar vom lasa parerile criticilor. You focus on what matters - cat mai mult exercitiu.

Sisteme de Operare

Materia Sisteme de Operare de la CTI este o resursa extraordinara, din toate punctele de vedere.

Resursa principala este asa-numita “Cartea cu dizonaurul” (Operating System Concepts Essentials). Click aici.

poo-is/laboratoare/12.1611177666.txt.gz · Last modified: 2021/01/20 23:21 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