środa, lutego 11, 2009

Rozmowa o pracę

Stanowisko: informatyk / programista.

Tak, wiem, że to dość ogólne określenie. Nie mniej jednak ktokolwiek przychodzi na rozmowę kwalifikacyjną i wpisuje w CV znajomość C++ powinien oczekiwać, że poprosi się go o napisanie jakiegoś programu. Prostego. Na przykład liczącego n-ty element ciągu Fibonacciego. Prosty, banalny wręcz program.

Nie oczekuję wersji jedno-dwulinijkowej w Haskellu:

fib n = fibs !! n
fibs = 0 : 1 : (zipWith (+) fibs (tail fibs)) :: [Integer]

Nie oczekuję też rozwiązania powiązanego równania rekurencyjnego i napisania tej funkcji tak, by działała w czasie (praktycznie) stałym (zostawiam to zadanie czytelnikom).

Oczekuję prostej definicji w C. Ba, może być nawet taka, która ma złożoność wykładniczą!

int fib(int n)
{
    if (n==0) return 0;
    if (n==1) return 1;
    return fib(n-1) + fib(n-2);
}

Jak widać powyżej nie ma nawet sprawdzenia czy argument jest ujemny czy też nie. Pisanie powyższych kilku linijek przez pół godziny (i to bez powodzenia...) to strata czasu - obu stron.

9 komentarzy:

  1. Anonimowy1:53 PM

    Chcesz zatrudnić kogoś, czy rzeczywiście byłeś na rozmowie w sprawie pracy? Naprawdę takie zadanie się zdarza?

    OdpowiedzUsuń
  2. Chciałem kogoś zatrudnić. Dokładniej: ktoś poprosił mnie o zbadanie potencjalnych pracowników. Okazuje się, że nie każdy potrafi sobie poradzić z czymś tak prostym.

    Osobiście nie widzę sensu dawać na rozmowie kwalifikacyjnej bardziej skomplikowanego kodu. Jeżeli ktoś jednak nie potrafi poradzić sobie z tym zadaniem to w mojej opinii nie umie programować. Nie nadaje się więc na to stanowisko.

    OdpowiedzUsuń
  3. Anonimowy11:34 PM

    Trzeba było mu/jej podziękować po 5 minutach - nie zmarnowałbyś pozostałych 25 minut.

    W ramach obrony tej tajemniczej osoby - pamiętaj, że na rozmowie kwalifikacyjnej jest się pod wpływem stresu (szczególnie jeżeli to pierwsza taka rozmowa i już popełniło się chociaż drobny błąd). Pytanie nie dotyczy C++, bo trzeba wiedzieć co to są za liczby i co to jest rekurencja. Tak samo jak pytanie "napisz singleton".

    Z rozmów z innymi mogę tylko powiedzieć, że "Znajomość C++", "Dobra znajomość C++" i "Bardzo dobra znajomość C++" są równoznaczne - nie oznaczają nic.

    OdpowiedzUsuń
  4. Anonimowy11:29 PM

    A probowaliscie Panowie podac n > 100, dla tych Waszych standardowych funkcji?

    OdpowiedzUsuń
  5. Oczywiście :-)

    Dla przykładu z C nastąpi przepełnienie. Haskell daje radę, dzięki liczbom całkowitym dowolnej precyzji.

    fibs !! 100
    354224848179261915075

    OdpowiedzUsuń
  6. Anonimowy10:54 PM

    A co to jest haskell, do czego sie go uzywa?
    Ja zrobilem sobie wlasna funkcje, bo ta wbudowana nie daje rady. Tylko wynik w formie wykladniczej.
    void f(long int n)
    {
    long int przed = 1, ost = 1, i = 2;
    long double wynik;
    if (n == 1 || n == 2)
    {
    cout << "Wyraz " << n << " ciagu to 1";
    }
    if (n > 2)
    {
    while (i <= n)
    {
    wynik = przed + ost;
    przed = ost;
    ost = wynik;
    i ++;
    }
    cout << "Wyraz " << n << " ciagu to " << wynik;
    }
    _getch();
    Wczesniej o tym ciagu nie slyszalem...

    OdpowiedzUsuń
  7. Anonimowy10:58 PM

    A, przepraszam za takie kometarze, dopiero zaczalem sie uczyc C++, akurat wyszukiwalem, jakie zadania daje sie na rozmowach kwalifikacyjnych, zeby miec poglad, na co nacisk przy nauce polozyc. I szczerze mowiac, po przeczytaniu tego wpisu sie przerazilem. Ciag Fibonacciego nic mi nie mowil, musialem zerknoc w Wiki, no i wyszedl mi taki programik.

    OdpowiedzUsuń
  8. Być może tego nie napisałem, ale kandydaci nie musieli wcześniej znać definicji tego ciągu. Była ona podana, a że jest bardzo prosta, to też nie powinni mieć problemu aby napisać program.

    A Haskell to język programowania. Polecam ten artykuł:
    http://informatyka.wroc.pl/node/283

    OdpowiedzUsuń
  9. Anonimowy8:02 PM

    Oj, jesli podales definicje ciagu, to faktycznie. Od niedzieli sie ucze C++, i poza tym, ze zrobilem blad przy inicjacji, bo i pominno byc 3, to nie mialem wiekszego problemu z jego napisaniem, moze uzywam niewlasciwych typowzmiennych, mam nadzieje, ze w miare zaglebiania wieczy i nabierania doswiadczenia bede wiedzial, jakich uzywac. Poza tym chyba funkcja spoko? ;)
    Dzieki za artykul.

    OdpowiedzUsuń