Firma, z którą współpracuję, poprosiła mnie o przeprowadzenie badań telefonicznych kandydatów, aby upewnić się, że nie są całkowicie zawstydzeni, gdy wysyłają kogoś do potencjalnego klienta.
Okazuje się, że znaczna liczba osób została umieszczona na roli programisty C ++. Nie spędzam dużo czasu w C ++, ale wykonałem kilka trywialnych i nietrywialnych projektów w tym języku. Uznałem, że „Wyjaśnij idiom RAII” byłoby fajnym pytaniem softballowym, na które najpoważniejsi programiści C ++ mogliby odpowiedzieć w półśnie, i pozwoliłoby mi przejść do bardziej interesujących pytań dotyczących doświadczenia. Okazuje się jednak, że ludzie, którzy mają ponad 10-letnie doświadczenie w C ++, nie rozpoznają tego terminu, nawet jeśli rozwinę skrót do „Pozyskiwanie zasobów to inicjalizacja”. Jeden z kandydatów posunął się tak daleko, że stwierdził, iż nie zawsze było praktyczne zastosowanie tej techniki w rozwoju systemu Windows, co moim zdaniem było dziwnym sentymentem, ale widziałem kilka przykładów, które prawdopodobnie potwierdzają tę myśl.).
Nawet kilku programistów C ++, których znam wystarczająco dobrze, aby ocenić ich kompetencje, stwierdziło, że nie rozpoznali tego terminu, ale po przeczytaniu podsumowania techniki, powiedział: „Och, tak, nie wiedziałem, że to imię. Po prostu myślałem o tych rzeczach jako o czymś, co musisz po prostu zrobić ”. Pamiętam ten termin z drugiego wydania książki Stroustrupa, mimo że pełne uderzenie nie doszło wtedy do skutku.
Czy zatem „czy możesz mi wyjaśnić idiom RAII?” uczciwe pytanie przesiewowe? Czy można oczekiwać, że wszyscy kompetentni programiści C ++ to zrozumieją? Czy ten termin jest bardziej ezoteryczny, niż myślałem? Zakładając, że kandydat nie zna tego terminu, czy istnieją pytania uzupełniające, które mogą pomóc mi dowiedzieć się, czy przynajmniej zinternalizowały praktyki, dzięki którym RAII działa? Czy istnieją lepsze alternatywne pytania „odchwaszczające”, które dają kandydatowi nieco swobody w udzielaniu odpowiedzi i pomagają kandydatowi wykazać się zrozumieniem rozwoju C ++?
Edytowanie w celu dodania : Aby wyjaśnić, nie jestem typem ankietera, który dyskwalifikuje ludzi, ponieważ nie znają modnych słów i akronimów. Uważam jednak, że uzasadnione jest oczekiwanie, że doświadczony programista C ++ zastosował dobre praktyki zarządzania zasobami. Uważam również, że ważne jest, aby sprawdzić, czy kandydat rozumie pewne „podstawy” dotyczące technologii, w której twierdzą, że są ekspertami, zanim przejdziemy do bardziej interesujących pytań dotyczących projektowania, rozwiązywania problemów itp. Myślę, że to, czego szukam, to dobry sposób zadać pytanie otwarte, odpowiednie do użycia podczas krótkiego przesłuchania telefonicznego, którego mogę użyć do oceny podstawowego zrozumienia przez kandydata dobrych praktyk zarządzania zasobami w C ++, zanim zadam „twarde” pytania.
Odpowiedzi:
Wydaje się, że odkryłeś, że programiści C ++, których znasz z doświadczenia, są kompetentni, nie znają tego akronimu ani nawet pełnego wyrażenia. Już samo to wydaje się wskazywać, że pytanie nie nadaje się jako pytanie przesiewowe podczas rozmowy telefonicznej.
Z drugiej strony, możesz dostać się do tego samego punktu bardziej ronda, przedstawiając scenariusz. Coś w stylu: „Implementujesz klasę Log, która zapisze informacje rejestrowania do pliku. Oczywiście musisz mieć zmienną składową, która jest uchwytem pliku (std :: FILE *). Gdzie przydzielasz i zwalniasz ten plik uchwyt?" Jeśli kandydat zacznie mówić o utworzeniu metody open () i close () zamiast przydzielania uchwytu pliku w konstruktorze i cofania przydziału uchwytu w destruktorze, możesz kontynuować, pytając o takie rzeczy, jak zachowa się ich klasa, jeśli kod wywoływany wyjątki itp.
źródło
Nie sądzę, aby było to praktyczne pytanie, jak zostało zaproponowane. Myślę, że wielu programistów wpadnie na obóz „och, tak, nie wiedziałem, że to nazwa”. Sugerowałbym przetestowanie kandydatów na koncepcji, a nie na nazwie koncepcji. Daj im przykład kodu i zapytaj, dlaczego jest niekompletny, lub poproś, aby wykazali, że znają tę koncepcję.
źródło
Myślę, że to ważne pytanie. Chociaż nie wiem, jak popularne jest pojęcie RAII (w moim zespole cały czas używamy terminu RAII), ale koncepcja obsługi zasobów jest ważna, szczególnie jeśli zależy Ci na bezpieczeństwie wyjątkowym i wielowątkowym .
źródło
Cóż, wiem, że kiedy chcę wiedzieć, czy ktoś jest kompetentny, najpierw sprawdzam jego znajomość akronimów. Po ustaleniu upewniam się, że znają nazwy innych technologii, które moim zdaniem brzmią świetnie. Jeśli nadal tam są, proszę o listę ulubionych kolorów.
Nie mogę tego znieść. Po zakończeniu wywiadu mam na myśli syreny i dzwonki ostrzegawcze. Nie chcę pracować w miejscu, w którym naprawdę ważne jest, że znam dziwne mnemoniki, które według mojego szefa są „fundamentalne”. Nie przejmuję się nauką imion ludzi, z którymi miałem do czynienia od lat, więc jestem pewien, że jak diabli nie marnują przestrzeni mózgowej na urocze akronimy opisujące najlepsze praktyki.
Spójrz na mój kod. Zapytaj mnie, jak bym to zrobił. Rysuję bzdury na tablicy, dopóki krowy nie wrócą do domu. Napiszę ci aplikację. Nie zadawaj mi bzdurnych pytań. Ciekawostki są zawsze trafiane lub chybione i nigdy nie są fundamentalne.
źródło
Jeśli Twoim celem jest szybkie wyeliminowanie wszystkich niekompetentów, spróbuj czegoś takiego:
Test FizzBuzz
Następnie możesz pozostawić koncepcje i praktyki C ++ tym, którzy są w lepszej pozycji do oceny wiedzy C ++.
źródło
To ważne pytanie, ale nie do badań przesiewowych. Użyłem go jako pytania pisemnego, które należy omówić podczas wywiadu. Możesz uzyskać dużo wglądu w wzorce myślenia z wyprzedzeniem. Jako pytanie przesiewowe jest to po prostu paskudna pułapka.
źródło