Poprzednia część:
Skoro już przeszedłeś etap pytań o twoje podstawowe narzędzie pracy, to czas na podstawowy zestaw pytań.
Contents
Te straszne algorytmy
Zazwyczaj pytania o algorytmy, skierowane do początkujących programistów mają za zadanie sprawdzenie ich wiedzy oraz umiejętności logicznego myślenia. Nie trzeba się denerwować tymi pytaniami. Choć moim zdaniem w przypadku osób „kompletnie zielonych” są one najważniejszą częścią rozmowy, to jednak zazwyczaj wplata się je pomiędzy inne pytania.
Musisz wiedzieć
Oczywiście czym jest algorytmW🙂 Do grupy podstawowych algorytmów, które musisz znać, należą dwa, trzy algorytmy sortowania. Dowolne, ale musisz je umieć porównać. Jeden z algorytmów wyszukiwania oraz algorytm EuklidesaW i Sito EratostenesaW. To są podstawy, które świadczą o tym, że w czasie nauki wykonałeś jakieś ćwiczenia. Musisz też wykazać się umiejętnością wymyślania i jasnego opisywania rozwiązań.
Powinieneś wiedzieć
Notacja dużego OW, to baza do dalszej rozmowy. Jednak znacznie lepsze wrażenie zrobisz, jak użyjesz pojęcia dziel i zwyciężajW. Jak już wspomniałem konkretna, twarda wiedza jest ważna, ale umiejętność jej zastosowania jest jeszcze ważniejsza. Zatem najlepszą metodą przygotowania się do rozmowy, jest praktyka.
Pozytywnie zaskoczysz, gdy
Będziesz odpowiadać na pytania płynnie i jasno. Z mojego doświadczenia wynika, że problemem u kandydatów nie jest brak wiedzy, a brak umiejętności jasnego formułowania myśli. W dziedzinie umiejętności rzeczywiście zaskoczysz, gdy będziesz umiał omówić bardziej złożone algorytmy np. proste algorytmy kryptograficzne albo komunikacyjne.
Te okropne struktury danych
Skoro były algorytmy to jest i nieodłączny towarzysz. Struktury danych. Tu pytania są silnie uzależnione od konkretnego języka, który będzie twoim „natywnym” językiem do porozumiewania się z komputerem.
Musisz wiedzieć
Sprawa jest prosta. Tablice, listy, zbiory i mapy. Ładnie opisane, porównane i to bez zająknięcia. Przy czym nie musi to być super dokładna wiedza jak, która struktura jest zaimplementowana w danym języku. Takie pytanie skierowane do osoby początkującej ma sens badania, ile ona wie. Jednak nie może być czymś wymaganym. Podobnie ma się sprawa ze stosem, stertą czy wektorem.
Powinieneś wiedzieć
Kiedy jakie struktury stosować. Często jest tak, że kandydat potrafi omówić różnicę pomiędzy tablicą a listą tablicową, lecz nie potrafi wskazać przypadków użycia. Powinieneś też umieć zaimplementować te struktury na podstawowym poziomie. Może być niewydajnie, ale powinno działać.
Pozytywnie zaskoczysz, gdy
Będziesz umiał opisać bardziej zaawansowane struktury jak na przykład grafy. Znasz implementacje w bibliotece standardowej albo potrafisz zaimplementować je w taki sposób, że będą działać wydajnie. Dużym plusem będzie też umiejętność opisania i zaimplementowania struktury „biznesowej”. Wbrew pozorom obiekty domenowe od strony struktury danych, to ciężki kawałek chleba.
Podsumowanie
Algorytmy i struktury danych są zazwyczaj tworami niezależnymi od języka i ich znajomość na podstawowym poziomie jest wymagana. W parze z nimi idzie znajomość pojęć z zakresu matematyki i umiejętność opisu tego, co się robi. Problem, jaki mam na rozmowach z osobami początkującymi polega na tym, że zazwyczaj nie mamy czasu na dokładne sprawdzenie wiedzy. Powoduje to, że po maratonie takich rozmów mam zazwyczaj problem z wyborem. Dlatego tak ważne jest, by poza wiedzą nabrać wprawy w wyrażaniu swoich myśli.
Ile razy wiedza potrzebna do udzielenia poprawnej odpowiedzi na pytania z tego wpisu przydała się w pracy?
Mam wrażenie, że w przypadku algorytmów sortowania sens ma sprawdzenie czy taka osoba jest w stanie zamienić wiedzę o działaniu algorytmu na kod. W praktyce zazwyczaj wszystkie te algorytmy są już częścią języka lub bibliotek i nie ma potrzeby (ani sensu) pisanie ich od nowa.
@Realistam, ale o co pytać osobę, która nie wie nic? Celem tego typu pytań jest wstępna ocena kandydata. Nie będziesz drążyć tematu np. LazyInitEx z osobą, która jeszcze nie za bardzo potrafi w programowanie.
@Andrzej, samodzielna implementacja na podstawie specyfikacji. Dobór zadania tak, by próg wejścia był, jak najniższy i nie trzeba było znać żadnej domeny biznesowej. W przypadku magików od HTML i CSS zapewne zadanie polegało by na napisaniu prostego szablonu n-kolumnowego.
Wyłożywszy się kilka razy na algo podczas rozmowy upraszam szanownego Bartodzieja czy mógłbyś polecić jakąś pozycję, która pomogłaby dobrze podszkolić się w tej tematyce? Najchętniej coś z przykładami od razu w naszej Javie.
Książka to oczywiście Cormen i jego algorytmy. Co do praktyki polecam SPOJ oraz Project Eulrer. W zadaniach algorytmicznych ważna jest wprawa i umiejętność dowodzenia słuszności swojego toku rozumowania.
Dziękuję. Na pewno skorzystam.
Zaciągnąłem sobie swoisty dług algorytmiczny i niestety po mistrzowsku mnie dojechali, niestety tego się nie uniknie – to przestroga dla innych. Nie wybiegajcie za bardzo wprzód, wróćcie do źródeł!