Czy „Wyjaśnij idiom RAII” jest dobrym pytaniem przesiewowym w C ++? [Zamknięte]

13

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.

JasonTrue
źródło
3
„Nawet kilku programistów C ++, których znam wystarczająco dobrze, aby ocenić ich kompetencje, powiedziało, że nie rozpoznali tego terminu”. W porządku. „Więc, czy„ Czy możesz mi wyjaśnić idiom RAII? ”, Jest to uczciwe pytanie kontrolne?” Po co pytać? Nie można było znaleźć ludzi, którzy o tym wiedzieli. Co jeszcze musisz wiedzieć, że jeszcze nie wiesz? Być może powinieneś bagatelizować ten temat (ponieważ znasz już odpowiedź) i skupić się na „Czy są lepsze alternatywne pytania”, które mogą być interesujące. Tyle że jest to wypowiadanie opinii, które nie są dobrze tolerowane.
S.Lott,
9
Idiomy się zmieniają, dobra praktyka nie. Zamiast pytać o konkretny idiom, możesz po prostu zapytać: „jakie kroki wykonujesz, projektując klasę, aby upewnić się, że nie wycieknie?”
Blrfl
W porządku, chociaż moja próbka jest niska i nie jestem już aktywnie zaangażowana w społeczność C ++, więc nie wiem, co społeczność uważa za niezbędną wiedzę w dzisiejszych czasach. Zasadniczo staram się dowiedzieć, jak poszerzyć mój repertuar pytań, które można wykorzystać do oceny prawdziwej wiedzy w C ++ poza, na przykład, podstawami składni.
JasonTrue
2
twój problem nie jest tym, czego się spodziewałem. Zakładałem, że znajdziesz kogoś, kto wie, czym jest RAII, zostaje zatrudniony, a dopiero później dowiadujesz się, że nadal są do kitu.
Kevin
1
@JasonTrue: Myślę, że fizzowe brzęczące pytania powinny być rzeczywistymi pytaniami programistycznymi, takimi jak odwrócenie łańcucha. Ale i tak myślę, że to dobre pytanie. Możesz również rozważyć pytanie, jakie funkcje w c ++ - 0x zdaniem rozmówcy są najbardziej ekscytujące lub najważniejsze. Jest to trochę trudniejsze, ale jeśli otrzymasz dobrą odpowiedź, prawdopodobnie oznacza to dobre rzeczy. I zawsze można sprowadzić się do pytania: „jakie biblioteki ulepszeń są najważniejsze / interesujące”, jeśli spojrzysz na nie z pustymi oczami.
Kevin

Odpowiedzi:

24

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.

Justin Cave
źródło
Doskonała sugestia. Lubię to podejście.
JasonTrue
Za dużo czasu zajmuje rozmowa telefoniczna.
HelloWorld,
15

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ę.

ŻEL
źródło
3

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 .

Armando
źródło
3

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.

Satanicpuppy
źródło
W wywiadach przesiewowych nie zadaję często pytań z zakresu wiedzy ezoterycznej, ale oczekuje się ode mnie należytej staranności, aby upewnić się, że ktoś nie jest całkowicie niekompetentny. W związku z tym szukam pytania otwartego, które pozwoli mi zweryfikować pewien poziom wiedzy, jednocześnie pozwalając kandydatowi pochwalić się własnym doświadczeniem. Oczekuję „pewnej” prostej wiedzy, jeśli ktoś powie, że zna technologię X w swoim CV; moje pytanie sprowadza się do tego, jakiej wiedzy powinienem oczekiwać od programisty C ++, który jest użyteczną bramą do dalszej rozmowy?
JasonTrue
4
@jason: Cóż, prawdopodobnie będę w stanie zapamiętać skrót RAII przez kilka miesięcy. Czy ta efemeryczna wiedza czyni mnie kompetentnym, mimo że nie dotykałem C ++ od lat? To mizerne ciekawostki. Zapytaj ich, jak obchodzą się z zamkami, i upewnij się, że rozumieją rzeczywistą WIEDZĄ, a nie dziwny akronim.
Satanicpuppy
1
@jason: Zgadzam się. Po prostu nie zgadzam się, że podstawy obejmują tego rodzaju ciekawostki. Idiota może to wiedzieć, a ekspert może nie. Opierasz swój proces selekcji na czymś nieistotnym dla umiejętności.
Satanicpuppy
5
Znajomość RAII nie jest niezbędną wiedzą. Ale automatyczne sięganie po wzór jest.
btilly,
2
RAII to podstawowa koncepcja dobrego C ++, a termin ten istnieje od co najmniej 20 lat. Uważam, że odrzucenie go jako ciekawostki jest nieco niesprawiedliwe. Chociaż możesz mieć dobrych programistów C ++, którzy nie znają tego terminu, dla mnie pachnie kimś, kto nie bada swoich umiejętności.
Kaz Dragon
1

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 ++.

Harold Bamford
źródło
1
Często korzystałem i otrzymywałem to pytanie i wspomniałem o tym powyżej w moim komentarzu, ale trudno mi zadawać pytania w 25-minutowej rozmowie telefonicznej.
JasonTrue
0

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.

david.pfx
źródło