I co ja robię tu… II

Poprzednia część:

I co ja robię tu… I

Skoro już przeszedłeś etap pytań o twoje podstawowe narzędzie pracy, to czas na podstawowy zestaw pytań.

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.

8 myśli na temat “I co ja robię tu… II

  1. Ile razy wiedza potrzebna do udzielenia poprawnej odpowiedzi na pytania z tego wpisu przydała się w pracy?

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

  3. @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.

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

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

  6. 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ł!

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax