Ostatnio tak się złożyło, że szukałem programistów. Kilku, do quasi-startupu. Inwestor oferował na starcie niezłe pieniądze, oczekiwał pewnego poziomu skilla, umiejętności myślenia... Żadnych z góry narzuconych wymagań dotyczących wybranej technologii, za to możliwości (i chęci) pracy w czymś, na co pomysł przyjdzie później.
Ogólnie, oczekiwania wobec programisty były: Smart, and gets things done.
rekrutacja 
Przed przeprowadzeniem
interviews posiłkowałem się tym poradnikiem zresztą, a też zajrzałem na bloga
interview (gdzie nowsze odcinki, no gdzie?).
Okazało się, niestety, że niepotrzebnie aż tak się wysilałem.
CV, które podrzucał mi inwestor, nie były rewelacyjne. Nie wiem, skąd on je brał - chodził na zaplecza agencji rekrutacyjnych i przeglądał kosze z papierami?
Serio...
Wszyscy mieli
wyższe wykształcenie. Co z tego, że mamy poważną nadprodukcję tegoż, teraz na własnej skórze przekonałem się, że to nic nie znaczy. Ludzie z wyższym technicznym / informatycznym wykształceniem nie nieli pojęcia o niczym. Na przykład:
- nie potrafili mentalnie sparsować 5 linii pseudokodu.
- Nie rozumieli rekurencji
- że o wskaźnikach i zarządzaniu pamięcią nie wspomnę
Jeden z Panów zapytanych o metodę wyznaczania kolejnych liczb pierwszych zaproponował coś takiego:
// N - liczba badana
for (i=2; i<N; i++) {
if (N mod i == 0) {
dzielisie = 1;
}
}
if (dzielisie == 1) {
return 0;
} else {
return 1
}
czym mnie zaskoczył, bo w miarę rozwiązywało to problem (nie chodziło o optymalizację oczywiście).
Zapytałem o modyfikację powyższego algorytmu tak, aby podawał liczby
pierwsze takie, które są
podzielne przez trzy. Zaproponował modyfikację ostatniego bloku
else {} taką, żeby:
- zamienić liczbę N na stringa
- brać kolejne litery tego stringa (a więc cyfry), zamieniać je na liczby i sumować w zmiennej tymczasowej
- jeśli suma cyfr będzie podzielna przez 3 (tu wchodzi rekurencja, a jakże!) zwrócić 1, w przeciwnym wypadku 0.
Suabo, no?