Source, Asses, Interview and Hire top Programmers with Codibility

Mi-am facut cont pe Codibility sa vad cum functioneaza, este un must have pentru toti cei care vor sa faca o recrutare riguroasa.

E interesanta partea de testare tehnica, poti selecta din problemele de debugging si algoritmica pe care sa i le dai celui care il testezi contra timp.

2 Likes

Intotdeauna am fost de parere ca testele nu reflecta intreaga valoare a intervievatului. Hire for attitude, train for skills, cum se zice.

Pt pozitii de senior prefer sa dau un test de codare vinerea, cu deadline lunea, sa poata omul sa se inspire de oriunde, atata timp cat rezolva problema. De obicei e ceva simplu, un sistem de autentificare de ex. Cel mai important lucru e discutia pe marginea code sample-ului furnizat, nu codul in sine.

La juniori nu dau test, ci discutam. Mult. Desenam impreuna pe foaie componente si verbalizam responsabilitatile lor. Caut sa vad cat limbaj de specialitate stapaneate persoana, si unde cauta atunci cand nu stie raspunsurile, nu cat a putut memora aiurea.

14 Likes

Mie imi plac testele de acest gen, pe unele le-am picat la inceput dar dupa te obisnuiesti cu acest mod de testare.

Includes these great features:

Essential Task Library
15 Assessments Each Month
1 Free CodeLive Session
Full Language Suite
Statistical Candidate Ranking
24x7 Customer Support

Un exemplu de Task din Task Library

O problema de debugging eu daca as angaja pe cineva primul test care l-as da ar fi unul de acest tip.

A non-empty zero-indexed array A consisting of N integers and sorted in a non-decreasing order (i.e. A[0] ≤ A[1] ≤ … ≤ A[N−1]) is given. The leader of this array is the value that occurs in more than half of the elements of A.

You are given an implementation of a function:

int solution(int A, int N);

that, given a non-empty zero-indexed array A consisting of N integers, sorted in a non-decreasing order, returns the leader of array A. The function should return −1 if array A does not contain a leader.

For example, given array A consisting of ten elements such that:

A[0] = 2
A[1] = 2
A[2] = 2
A[3] = 2
A[4] = 2
A[5] = 3
A[6] = 4
A[7] = 4
A[8] = 4
A[9] = 6
the function should return −1, because the value that occurs most frequently in the array, 2, occurs five times, and 5 is not more than half of 10.

Given array A consisting of five elements such that:

A[0] = 1
A[1] = 1
A[2] = 1
A[3] = 1
A[4] = 50
the function should return 1.

Unfortunately, despite the fact that the function may return the expected result for the example input, there is a bug (or bugs) in the implementation, which may produce incorrect results for other inputs. Find the bug(s) and correct them. You should modify at most three lines of code.

Assume that:

N is an integer within the range [1…100,000];
each element of array A is an integer within the range [0…2,147,483,647];
array A is sorted in non-decreasing order.
Complexity:

expected worst-case time complexity is O(N);
expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.

Initial Code

 1 using System;
 2 class Solution {
 3     public int solution(int[] A) {
 4         int n = A.Length;
 5         int[] L = new int[n + 1];
 6         L[0] = -1;
 7         for (int i = 0; i < n; i++) {
 8             L[i + 1] = A[i];
 9         }
10         int count = 0;
11         int pos = (n + 1) / 2;
12         int candidate = L[pos];
13         for (int i = 1; i <= n; i++) {
14             if (L[i] == candidate)
15                 count = count + 1;
16         }
17         if (count > pos)
18             return candidate;
19         return (-1);
20     }
21 }

Asta e abordarea corectă, din păcate e raritate. Motiv pentru care programatorii lucrează pe afară, iar recruterii/angajatorii se plâng de calitatea candidaților/programatorilor; cererea și oferta nu se întâlnesc.

1 Like

Un test de codare for real este o chestie buna, dar nu de luat acasă. Pentru că nu este respectuos pentru timpul candidatului. Cu atât mai mult cu cât ar veni inainte de un face2face.

Un test de genul unui sistem de auth simplu poate sa dureze și o zi de făcut cum trebuie. Si trebuie sal faci cum trebuie că doar ești angajat sau nu pe el. Timp care este neplătit și care vine din weekend de cele mai multe ori. Dacă sunt cinci companii care cer asta in procesul de căutare deja ai niste time commitments nesustenabile.

Dacă ești senior, ar trebui sa ai ceva la care sa poți arăta. Un profil de GitHub cu ceva cod, contribuții la un proiect oss, un portofoliu, lucrat la alte companii mai importante, un blog.

Eu de principiu refuz și am refuzat chestii dastea, dacă par că trebuie mai mult de două ore de treabă la ele - adică un exercițiu algoritmic mai mult decât unul de application building.

4 Likes

Eu cred ca dintr-o discutie face to face e foarte simplu sa iti dai seama cam cu cine vorbesti si daca respectivul stie ce spune sau vorbeste de e net. Pe de alta parte o proba practica ar fi utila, cel putin din punctul meu de vedere, in a vedea cam ce stil are si ce fel de cod scrie candidatul. De exemplu:

  • e ordonat, codul e modular sau …raw ?
  • cum isi denumeste variabilele,functiile ? :wink:
  • comenteaza,documenteaza ce scrie ? :confused:
  • codul lui e usor de cititi si de integrat cu altceva sau prea tricky ?
  • cum trateaza erorile ?
  • cum testeaza ?
  • …etc.
    Spun asta pentru ca am vazut programatori care scriau coduri de cosmar, cu care efectiv nu puteai sa lucrezi :frowning_face:
4 Likes

Daca te duci la un interviu, de obicei ai un motiv, poti obtine beneficii mai bune. Daca te duci la 5 companii, inseamna ca sigur vrei sa iti schimbi locul actual de munca.
Acum, timpul din weekend este mai important decat beneficiile viitoare?

  1. pe github am doar proiecte private
  2. nu te asigura nimeni ca acele proiecte vor mai fi peste un an, doi si vor avea contributiile tale
  3. am descoperit la un interviu acum cativa ani, ca o parte din sitre-urile la care lucrasem nu mai erau accesibile
  4. un blog presupune sa ai timp sa scrii si sa ai starea necesara sa rezolvi diverse polemici

Am tinut in ultima perioada mai multe interviuri, majoritatea candidatilor nu au putut raspunde la anumite intrebari simple, asa ca le-am dat niste cerinte pentru un exercitiu care ar trebui sa dureze cateva zile, pentru a fi sigur ca ei au ocazia sa foloseasca si notiunile la care nu au avut raspuns.
Au fost persoane care nu au mai trimis exercitiul, au fost persoane care au facut doar o parte, fara a aborda notiunile la care nu au raspuns anterior…

Consider ca un exercitiu de tipul celui de mai sus vine atunci cand fie ai in fata un junior sau o persoana care nu a mai programat in limbajul / platforma pentru care da interviu si vrei sa vezi ca are niste cunostinte generale. Fie ai mai multe persoane care ti-au raspuns la toate intrebarile posibile si vrei sa faci o diferentiere, neavand posibilitatea sa-i angajezi pe toti.

4 Likes

These 3 Speech Patterns Will Immediately Reveal If a Candidate is a Star or a Low Performer via @tekkie

Though I don’t fully agree with the article b/c there are outliers out there which in our domain can cost a company quite a lot by making the wrong choice but I guess it’s a decent start - depends on how subjective one wants to be (with the condition one is aware of what aspects are most subjective to him/her).

Depinde. Sunt multe companii care nu au astfel de teste. Daca aplic la 10 si 2 au procese de angajare prea laborioase am sa sar peste ele. Acuma, e o chestie de supply-and-demand. Daca aplici undeva unde chiar vrei sa lucrezi, gen SpaceX, treci prin toate cercurile de foc ce ti le pun in cale [1]. Dar de cele mai multe ori o sa fie optiuni mai normale. Iar aici un seller’s market, asa ca persoana care cauta isi permite sa mai sara sau sa impuna anumite conditii. Ca o chestie off-topic, si angajatorii ar trebui sa reduca baremul intr-un mod constructiv. Majoritatea n-au nevoie de the best of the best, dupa cum spun prea multe anunturi de angajare, ci de oameni competenti.

Asta suna contra-productiv. Daca n-au reusit sa raspunda la intrebarile simple cred ca e OK sa zici ca n-ar fi potriviti pentru rolul respectiv si sa treci mai departe. Ramane mai mult timp pentru candidatii care le-au raspuns. Pana la urma chiar daca facea programul tema foarte bine, eu tot mai ramaneam cu dubii? M-as intreba cum de nu a raspuns la intrebarea mea simpla dar a reusit sa faca ceva mult mai complex?

Si cred ca asta e problema majora. Un test de genul asta n-o sa fie niciodata atat de “bun” incat sa zici ca vrei sa angajezi pe cineva doar pe baza lui. La fel ca un profil pe github impresionant sau cam orice alt element din categoria “prior work”. Asadar, de ce sa pierzi timpul omului cu o tema de luat acasa, cand mai bine il lasi sa-ti vorbeasca si sa-ti arate un proiect de’al lui juma de ora sau o ora si obtii acelasi gen de informatii, dar cu un time comittment din partea candidatului mult mai mic?


[1] Ca fapt divers, multe dintre companiile astea “prestigioase” au un model de recrutare destul de straight-forward comparat cu teste luate acasa, pair-programming sau implementat feature-uri prin proiect sau ce alte ghidusii mai gaseste lumea.

Poate ca da, poate ca nu. O sa te duci la cele 2 gandindu-te ca poate una din cele 10 ar fi fost alegerea mai buna, dar nu ai vrut sa pierzi un weekend?

Exista o perioada de proba.

Nu il fortez sa faca exercitiul si nici nu-i spun sa nu-mi arate alte proiecte.

1 Like

Da oarecum @tekkie are dreptate, e bine sa te orientezi spre persoane responsabile, programarea se poate invata, de obicei cand iei un proiect iti asumi o responsabilitate fata de client iar acesta uneori isi bazeaza businessul pe aplicatia ta.

2 Likes

Mai este si siteul hackerrank.com
Codility stiu sigur ca folosesc cei de la ea games pt angajare.

Codility il stiu de la EA Games fiindca am dat interviu la ei, iti da 3 probleme de algoritmica.

Amazon Amazon Development Center Romania - iti da un test de live coding, algoritmica plus programare concurenta, si te intreaba ce fel de proiecte mai diferite de cele standard cu baze de date relationale ai facut si te pune sa le explici.

Cegeka Homepage - iti da un proiect in Visual Studio cu testele unitare scrise si trebuie sa scrii cod astfel incat sa treaca testele, in general sunt probleme de algoritmica, apoi ai un interviu face to face in care iti cere sa explici codul si te mai intreaba de SOLID.

Centric IT Careers for your Future | Working at Centric Romania - iti da o problema de algoritmica plus sa scrii testele unitare, live coding.

2 Likes