Jak odpowiadać na pytania z kodowania podczas rekrutacji na programistę
Rozmowy kwalifikacyjne dotyczące bezpośrednio kodowania są nieodłączną częścią starania się o pracę na różnych stanowiskach związanych z oprogramowaniem. Większość firm wykorzystuje kodowanie do technicznej selekcji. Oznacza to, że jeśli nie jesteś w stanie dobrze kodować, rekruterzy nie będą kontynuować rozmowy z Tobą. Na początku tego roku, kiedy starałem się o pracę jako inżynier uczenia maszynowego, prawie 85% moich wstępnych technicznych rozmów kwalifikacyjnych składało się z rund kodowania.
To, że kodujesz i jest to część Twojej codziennej pracy, nie gwarantuje tego, że dobrze wypadniesz na tych rozmowach. Nauczyłem się tego w dość brutalny sposób po kilku zadaniach rekrutacyjnych. Umiejętność kodowania w danym języku to tylko wierzchołek góry lodowej, jeśli chodzi o rozmowy kwalifikacyjne ([E5] w sekcji poniżej). Zarządzanie czasem, odnoszenie się do podobnych pytań, szlifowanie podstaw i praktyka to tylko niektóre z kluczowych rzeczy, które należy zrobić. W tym artykule, podzielę się moim zorganizowanym podejściem do przygotowania się do pytań dotyczących kodowania.
Na jakiej podstawie jesteś oceniany?
Należy przede wszystkim zrozumieć, co chcą sprawdzić rekrutujący, aby móc się do tego odpowiednio odnieść. Osoba prowadząca rozmowę kwalifikacyjną zazwyczaj ocenia kandydata na podstawie następujących kryteriów oceny (EC -evaluation criteria):
[EC1] - Umiejętność zrozumienia pytania
[EC2] - Zdolność do gromadzenia informacji w razie potrzeby
[EC3] - Twój proces myślowy w obliczu problemu
[EC4] - Umiejętność kodowania w sposób zorganizowany/modularny
[EC5] - Twoje umiejętności kodowania i zdolność do oceny ograniczeń
[EC6] - Zdolność do wprowadzania usprawnień w swojej pracy
Schemat kodowania
Bardzo przydatne okazało się zdefiniowanie schematu i używanie go podczas moich rozmów kwalifikacyjnych dotyczących kodowania. Schemat pomaga rozdzielić proces myślowy w zorganizowany sposób, aby uniknąć mówienia za dużo o jednej rzeczy, przez co nie ma czasu na mówienie o innych. Pomaga to również w ukierunkowaniu na niezbędne czynniki [EC1-EC6], na które zwraca uwagę rekruter.
1. Wysłuchaj pytania
Rekruter wyjaśni pytanie i przejdzie przez przykład, aby pomóc Ci zrozumieć problem. Podczas gdy rekruter będzie wyjaśniał, zanotuj wszystkie ważne i kluczowe dla Ciebie kwestie na oddzielnej kartce.
Cel: [EC1]
2. Wyjaśnij, jak rozumiesz to pytanie
Po wysłuchaniu pytania, NIE wkraczaj do akcji i nie zaczynaj od razu kodować (nawet jeśli dokładnie wiesz, na czym polega problem i jak go rozwiązać). Zamiast tego powtórz pytanie i tym samym potwierdź, że je zrozumiałeś. Zadawaj pytania wyjaśniające, takie jak:
- Jakie są ograniczenia typów danych wejścia/wyjścia?
- Czy są jakieś ograniczenia dotyczące rozmiaru/długości danych wejściowych?
- Co się stanie, jeśli dane wejściowe są niepoprawne?
- Przypadki szczególne/wyjątkowe: Pytania problemowe, np. co się stanie, gdy w ciągu znaków, w którym należało pomnożyć dwa ciągi cyfr, pojawi się znak niebędący cyfrą? (Czy traktujesz to jako nieprawidłowe dane wejściowe, czy ignorujesz znak niebędący cyfrą)?
W większości przypadków osoba przeprowadzająca rozmowę rekrutacyjną nie udzieli Ci wszystkich wymaganych informacji. Jedną z rzeczy, którą rekruter szuka w kandydacie, jest umiejętność zadawania właściwych pytań w celu zebrania wszystkich niezbędnych informacji.
Cel: [EC1], [EC2]
3. Przedyskutuj swoje podejście
Omów swoje podejście do problemu i zapytaj rekrutera, czy się z nim zgadza. Opowiedz o strukturze danych, którą wolisz zastosować i o powodach, które za tym stoją. Przedyskutuj pseudokod z rekruterem.
Docelowo: [EC3]
4. Zacznij kodować
Zadawaj rekrutującemu pytania jeszcze zanim zaczniesz kodować. Zdefiniuj przydatne funkcje i wyjaśniaj je podczas pisania kodu. Najważniejszą rzeczą podczas kodowania jest myślenie na głos, aby osoba przeprowadzająca wywiad mogła ocenić Twój proces myślowy. Przy każdej linii kodu powiedz głośno, dlaczego jej używasz i jak ten wybór wpłynie na efekt końcowy kodu. Np. podczas pisania pętli powiedz coś takiego:
"Teraz zdefiniujemy pętlę for, aby iterować nad listą xyz po jednym elemencie na raz, abyśmy mogli przetwarzać każdy element zgodnie z pożądanym wyjściem [lub powodem specyficznym dla problemu]."
W przypadku, gdy gdzieś utkniesz, rekrutujący będzie rzucał subtelne podpowiedzi. Upewnij się, że zwracasz na nie uwagę.
Docelowo: [EC4], [EC5]
5. Omówienie złożoności czasowej i pamięciowej
Omów złożoność czasową i pamięciową swojego kodu w kategoriach Big O dla Twojeg podejścia. Ten przydatny zasób może być dobrym punktem wyjścia dla początkujących. Spróbuj rozbić swój kod na mniejsze części, omówić złożoność czasową, a następnie porozmawiać o ogólnej złożoności czasowej kodu.
Docelowo: [EC5]
6. Zoptymalizuj podejście (jeśli to możliwe lub zasugerował tak rekruter)
Po omówieniu złożoności Twojego kodu, rekruter może poprosić Cię o jego udoskonalenie, jeśli Twoje podejście nie jest jeszcze zoptymalizowane. Będzie sugerował podpowiedzi podkreślając fragment kodu, który można by poprawić. Upewnij się, że uważnie słuchasz, co ma Ci do powiedzenia.
Docelowo: [EC5], [EC6]
Podsumowanie
Ten schemat składający się z 6 kroków pomoże Ci pomyślnie przejść i wyjść obronną ręką z rozmowy kwalifikacyjnej.
Rozmowy kwalifikacyjne nie dotyczą tylko Twoich umiejętności kodowania. Chodzi również o to, jak dobrze potrafisz pracować pod presją. Jeśli masz do dyspozycji odpowiedni schemat działania, z pewnością ułatwi Ci to zarządzanie czasem. Wiedząc, czego dokładnie poszukują rekrutujący, będziesz wiedział, jak odnieść się do tych czynników w sposób zorganizowany. W tym artykule przyjrzeliśmy się niektórym ważnym kryteriom oceny udanej rozmowy kwalifikacyjnej oraz omówiliśmy schemat odpowiedzi na pytania dotyczące kodowania.
Oryginał tekstu w języku angielskim przeczytasz tutaj.