
Organizarea și lucrul într-o companie de software
iunie 29, 2022
Întrebări și răspunsuri utile pentru cei ce doresc să învețe programare
iunie 29, 2022Portofoliu unui programator constă în ceea ce a lucrat. Când un programator este experimentat portofoliul său sunt aplicațiile sau părțile de aplicații dezvoltate în companiile în care a lucrat sau contribuțiile la open source. Pot fi după caz dacă sunt relevante și proiectele personale.
Pentru un programator aspirant însă portofoliul constă doar în proiectele personale.
Am observat că mulți se întreabă ce fel de proiecte personale pot face. Sugestia mea este să se aplice metoda reproducerii elementelor deja existente.
De exemplu se poate încerca să se reproducă un site deja existent fie complet fie doar partea de interfață dacă se dorește o carieră care să înceapă de la frontend. Se poate reproduce un joculeț se poate reproduce o aplicație stand alone sau chiar client server. Și de ce nu una Enterprise.
Scopul proiectelor personale este de a observa cei care urmează să angajeze cum scrie cod un candidat cum gândește o arhitectură a unei aplicații cum implementează un anumit scenariu și în general că este interesat de fenomen și a încercat să progreseze.
Dacă ideile după care sunt create proiectele personale sunt originale sau nemaiîntâlnite până la momentul respectiv este și mai bine acesta este un nice to have (e drăguț să ai) nu este un must to have (trebuie să ai). Important este să ai un portofoliu.
Pentru a crea un portofoliu se poate copia cod deja scris dar este important să se înțeleagă acel cod și apoi să se încerce să se pună în practică scriind un cod asemănător pentru un alt modul pentru că cel mai bine se învață scriind cod și rezolvând probleme care apar. Deci un portofoliu personal este de regulă o combinație între cod copiat și cod scris. Important este ca cel care are portofoliul respectiv să înțeleagă mecanismele implementate pentru că este posibil ca la interviu să fie întrebat.
Rezolvarea unei probleme nu poate să o predea nimeni pentru că asta ar însemna ca cineva să îi spună altcuiva cum se rezolvă fiecare problemă și problemele sunt foarte multe. Chiar dacă se învață modalitățile standard de rezolvarea a unor clase de probleme totuși aceste modalități standard suferă modificări în funcție de problemă.
Pentru a rezolva o problemă este indicat să se antreneze gândirea logică și să se cunoască elementele la care trebuie să te gândești. Rezolvarea unei probleme de informatică este similară cu rezolvarea unei probleme cotidiene. Trebuie ca cel care încearcă să rezolve problema să aibă o gândire bazată pe raționamente logice. De multe ori soluțiile vin atunci când cel care rezolvă problema înțelege problemă și știe la ce să se gândească. O problemă înțeleasă este pe jumătate rezolvată.
În general sugestiile pentru rezolvarea unor probleme sunt să se împartă problema în probleme mai mici și deci mai ușoare apoi după rezolvarea acestora probleme mici să se pună soluțiile cap la cap pentru rezolvarea problemei mari. Rezolvarea problemei de informatică înseamnă să înveți un computer să facă ceva iar pentru asta este important să se cunoască modul de funcționare al unui computer pentru a ști ce să îi ceri și mai ales ce nu poți să îi ceri.
De exemplu atunci când trebuie parcurs un vector și știi că un computer nu poate să privească vectorul de sus gândul te duce la faptul că trebuie să parcurgi fiecare element în parte și dacă mai știi și că vectorul este static și are zona de alocare continuă cu locațiile de memorie una lângă alta iar că accesul la acele locații succesiv îl poți obține cu ajutorul unei structuri repetitive problemă este aproape rezolvată.
O altă sugestie pentru rezolvarea problemei este să se trateze la început condițiile extreme pentru că dacă un program funcționează corect în condiții extreme va funcționa corect și în condiții normale.
De exemplu dacă un program care trebuie să adune doar două numere naturale tratează corect cazul când numerele adunate sunt negative precum și cazul în care numerele sunt foarte mari și pot depăși cardinalitatea tipului întreg atunci șansele ca programul să funcționează corect pentru numere normale sunt mari.
Un CV trebuie să conțină informații relevante nici prea multe adică fără detalii inutile nici prea puține care sunt nu acoperă toate lucrurile importante.
Trebuie să conțină datele de contact pentru ca persoana interesată de persoana care a depus CV să o poată contacta. Sunt irelevante de exemplu starea civilă grădinița școala generală și codul numeric personal.
Un CV nu trebuie să fie prea stufos pentru că o companie primește foarte multe și de regulă nu există timp suficient pentru a analiza unul stufos. Un CV conține o pagină maxim două. În care sunt specificate ultima școală absolvită numărul de telefon adresa de email certificările dacă există proiectele importante la care persoana respectivă a lucrat și companiile relevante la care a lucrat.
Un interviu de angajare conține de regulă trei părți dar pot fi și mai multe în funcție de companie. După ce CV a fost selectat candidatul este sunat și invitat să susțină un interviu care de regulă este prima dată o discuție cu departamentul de resurse umane reprezentat de una sau mai multe persoane. În cadrul acestei discuții se pune accent pe modul de a fi și de a gândi din perspectiva umana al candidatului pentru a se decide dacă candidatul respectiv se încadrează în filozofia companiei. Adică dacă este un om ok dacă are o gândire care rezonează cu gândirea companiei dacă își dorește să evolueze dacă poate lucra în echipă și dacă cunoaște limba străină utilizată în companie de regulă limba engleză.
A doua etapă are loc dacă feedback-ul este pozitiv după prima etapă și constă în un interviu tehnic de regulă cu un lead sau un senior cu una sau două sau poate chiar trei persoane.
În cadrul acestui interviu se urmărește dacă candidatul stăpânește conceptele programării și dacă poate să elaboreze un algoritm și dacă stăpânește un limbaj sau mai multe în funcție de natura poziției pe care urmează să o ocupe. Candidatul poate fi întrebat din portofoliu dar ceea ce se urmărește este același lucru adică cunoașterea conceptelor de bază a limbajului și a algoritmilor utilizați.
Indiferent de limbaj conceptele care stau la baza programării calculatoarelor sunt aceleași. În funcție de natura poziției pe care urmează să o ocupe candidatul poate fi întrebat din modul de funcționare al unui computer din principiile programării orientate obiect sau programării structurate din metode standard de implementare așa numitele design patterns poate fi întrebat cum ar rezolva o situație tehnică și poate fi pus să rezolve una sau două probleme de algoritmică sau poate fi pur și simplu o discuție liberă precum poate fi la fel de bine un test pe o platformă online cu întrebări de tip grilă și probleme de algoritmică si rezolvarea unor probleme de bază de date.
Dacă feedback este pozitiv și la a doua etapă urmează un interviu de regulă cu cel care se ocupă de proiectul pe care candidatul urmează să lucreze. Persoana care susțin acest interviu de regulă este project manager. În cadrul acestui interviu se pune accent pe proiectele lucrate și se încearcă să se decidă dacă candidatul respectiv se mulează pe proiectul pe care urmează să lucreze.
Dacă și de această dată feedback este pozitiv candidatul urmează să primească o ofertă pe care o poate accepta

