Z mojego doświadczenia w mojej firmie, w której przeprowadziłem wiele wywiadów, jest duża szansa, że osoba przeprowadzająca wywiad nie ma pojęcia, jak to zrobić poprawnie. Przygotowali więc zestaw pytań technicznych, obliczyli wynik i sprawili, że zostaniesz wznowiony. Ma to jednak wiele wad i nie należy tego robić z następujących powodów:
Pytasz punktową wiedzę. Jeśli programista nigdy nie zrobił czegoś w tym obszarze, nadal może być doskonałym współpracownikiem, ale po prostu nie zna tej konkretnej odpowiedzi. Przeciwnie: jeśli ktoś przygotował się na rozmowę i znalazł w sieci odpowiedź na to pytanie, masz właściwą odpowiedź, ale ta osoba może wcale nie mieć pojęcia na dany temat.
Ludzie się denerwują podczas rozmów kwalifikacyjnych. Mózg ma tę wspaniałą funkcję zamykania wielu obszarów wyższego poziomu (takich jak logika) w stanie paniki, co oznacza: jeśli jesteś zdenerwowany, możesz nie zapewnić jakości odpowiedzi, którą byś otrzymał w codziennej sytuacji. Niektóre osoby mogą poradzić sobie ze stresującą sytuacją, taką jak rozmowa kwalifikacyjna, wielu nie.
Za pomocą jednej poprawnej odpowiedzi testujesz umiejętności tych osób, aby znaleźć tę konkretną odpowiedź. Jest to jedna z wielu umiejętności, których potrzebuje współpracownik, ale nie jest to jedyna wymagana. Dlatego jedno lub dwa z tych pytań powinny wystarczyć do przetestowania tego obszaru wiedzy, a następnie należy zapytać o inne umiejętności. Wywiad, który zawiera tylko pytania dotyczące rozwiązywania problemów, ciągle testuje tę samą umiejętność.
Jakie są pytania dotyczące dobrych zadań programistycznych?
Te słynne pytania „Czy możesz napisać krótki program” mają ogromny problem polegający na tym, że większość programistów nie może napisać ani jednego wiersza kodu bez pomocy IDE. Ale w codziennych sytuacjach roboczych nie ma żadnego problemu, ponieważ programista zawsze pomaga mu w jego IDE. Dlatego zadając pytania takie jak „Znajdź błąd”, „Napisz 50 wierszy kodu, które wykonują ...” lub nawet proste pytania, należy wziąć pod uwagę, że wnioskodawca nie ma dostępnych narzędzi (IDE, Google).
Mogę na przykład odpowiedzieć w zasadzie na każde pytanie w ciągu 1 minuty, jeśli Google mi pomoże, ale bez połączenia z Internetem wydaje mi się bezradny. Nazywam to zewnętrzną pamięcią i zamiast przeszkadzać, bardzo pomaga mi skupić się na tym, co jest naprawdę ważne - na zrozumieniu mechaniki podkładu - ponieważ wszystko inne można sprawdzić. Ale nie pytaj mnie o szczegóły z dowolnych losowych interfejsów API, ponieważ ich nie znam, mam do tego Google.
To powiedziawszy, dobre pytanie programistyczne nie powinno koncentrować się na znajomości interfejsów API lub specjalnych umiejętności kodowania, chyba że jest to bezwzględny wymóg dla zadania. Wiedzę można zdobyć, więc lepiej dowiedzieć się, jak dobra jest ta osoba w zdobywaniu wiedzy, niż zapytać, co już wie.
Dobre pytanie do zadania programistycznego powinno być krótkie, proste, dające się zakodować w każdym języku za pomocą zaledwie kilku linii kodu, a to - szczególnie - powinno ci powiedzieć jak najwięcej o tym, jak dana osoba działa i znajduje odpowiedzi. Przykład:
„Napisz funkcję w wybranym języku, która pobiera tablicę liczb całkowitych i porządkuje je w taki sposób, że pierwsza liczba całkowita jest później ostatnią, a wszystkie inne odpowiednio się zmieniają”.
Najpierw w tym momencie każdy kandydat powinien zapytać: „Przepraszam ... czy możesz wyjaśnić zadanie?”. Ponieważ żaden programista nie otrzymał jasnego opisu tego, co należy robić. Po tym następuje wyjaśnienie, że kod w pytaniach powinien wykonać przesunięcie w lewo zawartości tablicy z przepełnieniem dodanym po prawej stronie.
To zadanie jest tak proste, że każdy, kto ukończył jakikolwiek poziom programowania, powinien umieć poprawnie odpowiedzieć. To bierze pod uwagę, że programista musi pracować bez swoich narzędzi i że nerwowość zmniejsza zdolność logicznego myślenia. Jednak wciąż mówi ci, w jaki sposób ludzie rozwiązują problemy na podstawie sposobu sformułowania pytania i sposobu, w jaki ludzie do niego podchodzą, po prostu dlatego, że przesunięcie w lewo jest sprzeczne z powszechnym instynktem „od lewej do prawej” i zmusza ludzi do myślenia za sekunda.
Istnieje wiele możliwych odpowiedzi na to pytanie, więc ważne jest, aby uważnie przyjrzeć się sposobowi opracowywania kodu, a nie to, czy rozwiązanie rzeczywiście zadziałałoby. Czy wnioskodawca testuje wartość null? Jak przechowywane jest przepełnienie? Czy używana jest pętla lub zestaw memów? W jaki sposób wnioskodawca weryfikuje poprawność kodu? To jedno proste pytanie mówi całą biografię o tym, jak ta osoba działa.
Jakie są pytania dotyczące dobrej wiedzy ogólnej?
Odpowiedzi na dobre pytania są łatwe do udzielenia, pozwalają na szeroką liczbę odpowiedzi (tzw. „Pytania otwarte”) i pozwalają dowiedzieć się jak najwięcej o wnioskodawcy w możliwie krótkim czasie.
Przykłady:
(Pytanie do programisty C ++): „Jakie znasz inne języki oprócz C ++?”
To są pytania podstawowe, które dają wnioskodawcy szansę na ratowanie w tym momencie, jeśli nie będzie wiedział nic na zadany temat. „Nie” w tym momencie jest lepsze niż dręczenie go kilkoma pytaniami, na które wszyscy muszą odpowiedzieć: „Przepraszam, nic o tym nie wiem”.
Dodam, że przede wszystkim mówi ci, jakie inne języki zna ta osoba, a ponadto dowiadujesz się, jak zainteresowana jest ta osoba, aby uzyskać szerszy obraz świata programowania lub jeśli masz kogoś, kto ma tylko jeden język (a zatem cechy / techniki) ) widok.
(Następnie, powiedzmy, że zna Javę): Jakie są trzy najważniejsze różnice między C ++ i Javą w twoim opinonie?
To pytanie otwarte, które pozwala na wiele odpowiedzi, więc wnioskodawca ma szansę znaleźć co najmniej trzy. Pytanie o (pierwszą osobistą opinię) pierwszą trójkę nie tylko ogranicza możliwe odpowiedzi, ale także zmusza wnioskodawcę do sortowania według priorytetu. Nadal jest (lub powinna być) łatwa odpowiedź.
To proste pytanie, które testuje dużą dogłębną wiedzę na temat różnych języków programowania. Jak głęboka jest naprawdę znajomość tych tematów? Z tych odpowiedzi możesz wiele powiedzieć o wiedzy i faktycznym zrozumieniu mechaniki leżącej u podstaw języków programowania. Ile ta osoba wydała z brudnymi szczegółami lub jeśli jest to tylko osoba, która łączy różne funkcje API bez rzeczywistej wskazówki, co się dzieje pod nimi.
Ta koncepcja pytań podstawowych, po których następują proste pytania z pogłębioną wiedzą, może być również stosowana w przypadku większości innych tematów. Zawsze w tym schemacie: pytanie ratunkowe, pytanie weryfikacyjne, pytanie szczegółowe. Kolejny przykład (z wywiadu Java):
- „Jak oceniasz swoje wrażenia związane z programowaniem wielowątkowym?”
- „Wymień trzy najważniejsze rzeczy, które Twoim zdaniem należy wziąć pod uwagę przy opracowywaniu aplikacji wielowątkowej”.
- „Proszę wymienić trzy klasy interfejsu API języka Java, które mogą pomóc w opracowaniu tych aplikacji, oraz krótki opis ich zastosowania”.
Te trzy pytania powiedzą więcej niż jakiekolwiek pytanie techniczne, co wnioskodawca naprawdę wie na temat tych tematów, jednocześnie udzielając uczciwej odpowiedzi, biorąc pod uwagę poziom wiedzy i poziom stresu.
Tak więc następnym razem, gdy ktoś zada ci 20 pytań kodujących z rzędu, wiesz, że on / ona w zasadzie nie ma pojęcia, jak poprawnie przesłuchać kogoś. ;)