Czy powinienem martwić się zleceniami programowymi nadinżynieryjnymi podanymi w trakcie rozmowy kwalifikacyjnej? [Zamknięte]

27

Niedawno miałem wywiad telefoniczny z firmą. Po tym wywiadzie telefonicznym powiedziano mi, aby ukończyć krótkie zadanie programistyczne (mały program; nie powinno to zająć więcej niż trzy godziny). Jestem tylko bezpośrednio instruowany, aby wykonać zadanie i przekazać kod. Dano mi pełną swobodę w używaniu dowolnego języka, który chciałem i nie powiedziano mi dokładnie, jak wprowadzić kod.

Natychmiast planowałem rzucić go na Github, napisać dla niego pakiet testowy, używając Travis-CI (darmowa ciągła integracja dla publicznych repozytoriów Github) do uruchomienia zestawów testowych i używając CMake do zbudowania plików makefile dla Travis-CI. W ten sposób nie tylko mogę wykazać, że rozumiem, jak korzystać z Git, CMake, Travis-CI i jak pisać testy, ale mogę również po prostu link do strony Travis-CI, aby mogli zobaczyć wyniki testów. Pomyślałem, że to sprawi, że będzie to nieco wygodniejsze dla ankietera.

Ponieważ znam te technologie, nie przydałoby się to w zasadzie do zadania.

Martwię się jednak trochę, że wykonanie tego wszystkiego dla stosunkowo prostego zadania wyglądałoby źle. Chociaż nie dałoby mi to więcej czasu, nie chcę, żeby myśleli, że spędzam zbyt dużo czasu na rzeczach, które powinny być proste.

DormoTheNord
źródło
5
Byłbym ostrożny, udzielając odpowiedzi na pytania dotyczące wywiadów w serwisie github, ponieważ niektóre firmy lubią zachować poufność swoich problemów.
Scroog1
7
Pytania są publicznie dostępne na ich blogu (wysłali mi link do posta na blogu), więc nie sądzę, żeby się tym przejmowali.
DormoTheNord,
3
@DormoTheNord Powiedziałbym, że nie jesteś nadmiernie inżynieryjny: dobry proces rozwoju jest czymś zupełnie innym niż nadmierna inżynieria i jest (IMO) dobrym znakiem.
K.Steff,
3
Spędziłbym trochę tego dodatkowego czasu na dokumentowaniu wszelkich szarych obszarów w specyfikacji problemu, założeniach, ograniczeniach ... Pokaż, że nie nurkujesz tylko w kodowaniu, ale kontemplujesz problem i jego kontekst.
HABO,
4
@DormoTheNord Pytania mogą być publiczne, ale twoje odpowiedzi też będą. Będzie dostępny dla innych rozmówców, jeśli będą mogli go znaleźć. Tego prawdopodobnie im się nie spodoba.
Izkata,

Odpowiedzi:

29

Jako ankieter byłbym szczęśliwy widząc wiedzę na temat procesu tworzenia oprogramowania wykazaną przez to podejście; w przeciwieństwie do samego pisania kodu.

W szczególności posiadanie zestawu testów nawet dla bardzo prostych problemów byłoby dobrym znakiem (nawet poziom FizzBuzz). Widziałem kandydatów przedstawiających rozwiązania, które nawet nie rozwiązały problemu, i pokazałby to prosty zestaw testów. Ponadto posiadanie historii zatwierdzeń pozwala mi zorientować się, jaki proces myślowy wykorzystał kandydat, aby znaleźć rozwiązanie.

Z drugiej strony, wiem, że niektóre firmy odrzucają ludzi na wczesnym etapie procesu nadmiernej inżynierii. Jednak w większości przypadków było to spowodowane nadmierną inżynierią rozwiązania, niekoniecznie stosowanymi procesami.

Scroog1
źródło
2
Czy posunąłby się pan tak daleko, że gdyby firma odrzuciła mnie za robienie tego, co planuję, byłby to znak, że firma nie przestrzega metodologii tworzenia oprogramowania i wolałbym nie pracować dla tej firmy?
DormoTheNord,
7
Niekoniecznie posunę się tak daleko, ponieważ wiąże się to z pewnym szczęściem (niestety). Możesz mieć jednego ankietera, który nie lubił tego podejścia; lub mogą być w złym humorze tego dnia i nie chcą przeglądać dodatkowych danych dostarczonych przez to podejście. To powiedziawszy, zwykle nie ma szkody w wyjaśnieniu wymaganego poziomu szczegółowości. Również zadawanie jednego lub dwóch pytań wyjaśniających może być dobrym znakiem dla ankietera (choć oczywiście nie bombarduje ich nieprzemyślanymi pytaniami).
Scroog1
+1 - tak długo, jak nie przeszkadzasz w rozwiązaniu, chciałbym zobaczyć testy jednostkowe i cokolwiek innego, co robisz bez monitowania.
Telastyn,
1
Zbyt wiele, aby przejrzeć ryzyko, można złagodzić, wysyłając zarówno podstawowy link github, jak i link bezpośrednio do samego kodu źródłowego testu dla leniwych / zajętych.
Dan Neely
15

Posiadanie jako rozmówcy kogoś, kto rozumiał takie rzeczy jak kontrola wersji, CI, testy jednostkowe i tym podobne, byłby krokiem naprzód w stosunku do tego, co zwykle widzę.

Chociaż dla mnie najważniejsze jest to, że problem został rozwiązany i rozwiązany dobrze, wiedząc, że kandydat zrozumiał sposoby poprawy jakości swoich produktów z pewnością zwróci moją uwagę.

To, co ogólnie widzę, to ludzie, którzy nie tylko nie rozumieli problemu, ale także nie rozumieli, jak rozwiązać problem - i byliby ignorowani bez względu na to, ile dodatkowych narzędzi użyli w tym procesie.

Steve Hill
źródło
6

Pamiętaj, że istnieje limit czasowy. Ankieter wie o tym, więc oznacza to (gdybym był ankieterem), że zobaczy, że nie tylko rozwiązałeś problem w wyznaczonym czasie, ale czy zrobiłeś to tak szybko, że pozostał ci czas na złocenie, co jest dobrym znakiem umiejętności rozwiązywania problemów, a także docenienia rygoru i staranności.

Nadmierna inżynieria to złe słowo, gdy tworzysz adaptery AbstractFactoryManager, które są podłączane do systemu BuzzManager i FizzManager w celu rozwiązania FizzBuzz.

To, co robisz, to nadmierna staranność, co nawet nie jest rzeczą (choć zdecydowanie niedostateczna jest zdecydowanie).

To powiedziawszy, jeśli skończysz z czasem lub z jakimś półhackowanym rozwiązaniem, ponieważ wykorzystałeś swój czas na dodatki, które, jak twierdzisz, „nie dodają czasu”, będzie to wyglądać tak, jakbyś bardzo słabo rozumiał, jak duże wydają się małe zadania mogą być. Może to być niebezpieczna cecha u inżyniera i zbyt powszechna wśród juniorów. Nadaj odpowiednie priorytety i zrób dodatkowe czynności dopiero po ukończeniu wymaganego rozwiązania.

Jimmy Hoffa
źródło
Nie ma sztywnego limitu czasu, ale tylko notatka mówiąca, że ​​zadanie nie powinno zająć porządnego programisty dłużej niż trzy godziny. Czy naprawdę sprawdziliby mój dziennik git, aby upewnić się, że spędziłem na nim tylko trzy godziny od zatwierdzenia nr 1 do ostatniego zatwierdzenia?
DormoTheNord,
2
@DormoTheNord, jeśli nie ma limitu czasu, czas niewykorzystany na żądane rozwiązanie może być postrzegany jako zły priorytet. Niestety inżynierowie są niezależnymi myślicielami i dlatego mają swoje własne opinie na te tematy od jednego do drugiego, w takich przypadkach może być szczęście z losowania, czy osoba oceniająca to, co zrobiłeś, jest tego rodzaju, czy widzi to w ten sposób, czy sortuj, aby zobaczyć to jako wielki dar. Znałem świetnych inżynierów obu zakrętów. Sprowadza się w tych przypadkach do tego, co cenisz, pokazuje to i kogoś, kto ceni to samo, co docenisz, to z kim chcesz pracować.
Jimmy Hoffa,
Tego nienawidzę w rozmowach kwalifikacyjnych ... szczęścia związanego z zaspokajaniem osobistych preferencji ankietera. Może powinien być znormalizowany :)
DormoTheNord,
Nie martw się, szczęście nawet się rozwinie w twojej karierze. Musisz mieć szczęście, kiedy masz szczęście, a kiedy dostajesz źle :)
Scroog1
1
Byłbym ostrożny w opisywaniu go jako „złocenie”, ponieważ zwykle przyjmuje się, że termin ten jest zły: en.wikipedia.org/wiki/Gold_plating_%28analogy%29
whatsisname
6

Kolejnym punktem do rozważenia jest to, że twoje podejście nie jest ani dobre, ani złe. Mogę sobie wyobrazić ankieterów, którzy uważają, że to za dużo, i wyobrażam sobie ankieterów, którzy chcieliby jeszcze więcej inżynierii.

Nie martw się tak bardzo. Zamiast tego rozwiąż problem w sposób, który uważasz za najlepszy, a prawdopodobnie otrzymasz oferty pracy od osób, które się z tobą zgadzają. To świetny pierwszy krok w kierunku produktywnego środowiska pracy. Pamiętaj, że wywiady odbywają się na dwa sposoby. Odpowiedź ankietera na twoje rozwiązanie również wiele o nich powie. Czy naprawdę chcesz pracować z ludźmi, którzy uważają, że twoje instynkty rozwojowe i filozofia są błędne?

Corbin March
źródło
3

W rzeczywistości nikogo nie obchodzi, czy kandydat może w pośpiechu przygotować repozytorium git lub utworzyć makefile, ponieważ to tylko przypomnienie tego, czego nauczył się na pamięć. Są to umiejętności drugorzędne w stosunku do faktycznego rozwiązywania problemów i projektowania aspektów pytania podczas rozmowy kwalifikacyjnej.

Tak, twoja intuicja wskazuje, że potencjalnie źle wygląda, ponieważ może wyglądać, jakby kandydat wierzył, że ktoś, kto potrafi cofnąć kilka zapamiętanych poleceń i wzorców, aby stworzyć szkielet projektu, ma imponujące umiejętności programistyczne.

Aspekt pakietu testowego rozwiązania jest jednak dobry. Dostarczenie odpowiedzi za pomocą zestawu testów regresji prawdopodobnie zapewni ci punkty. Tym bardziej, jeśli Twój zestaw testów wykonuje najistotniejsze przypadki w kodzie. Zestaw testowy nie musi mieć wielu pułapek formalnych i opierać się na narzędziach; sam fakt, że jakoś tam masz, wystarczy na rozmowę kwalifikacyjną. Jest mniej lub bardziej oczywiste, że jeśli możesz przygotować testy jednostkowe ad hoc w quizie wywiadu, możesz to zrobić za pomocą narzędzi w prawdziwym projekcie.

Kaz
źródło
1

Niedawno miałem wywiad telefoniczny z firmą. Po tym wywiadzie telefonicznym powiedziano mi, aby ukończyć krótkie zadanie programistyczne (mały program; nie powinno to zająć więcej niż trzy godziny).

Postępowałbym ostrożnie. Oceń trafność wyzwania dla pracy i upewnij się, że w przyszłości zwrot kosztów od pracodawcy sprawi, że 3 godziny twojego czasu będą warte zachodu.

Kwestionuję wartość tego rodzaju testów i wolę oceniać kogoś na podstawie jego przeszłych osiągnięć. Predefiniowane krótkie zadanie nie może powiedzieć pracodawcy niczego o tym, co możesz zrobić. Tylko to, czego nie możesz zrobić, a to można szybko ustalić za pomocą kilku pytań przez telefon.

Testowanie ma swoje miejsce. Zadaj sobie następujące pytania dotyczące testu i odpowiednio odpowiedz.

  1. Czy biorąc pod uwagę aktualny poziom kariery, testy są uczciwe?
  2. Czy test ma jasno określoną poprawną odpowiedź?
  3. Czy osoba przeprowadzająca wywiad interesuje się twoim potencjałem jako osoby, czy też wykazuje większe zainteresowanie wynikami testu (tj. Agencje zatrudniające są do tego straszne).
  4. Czy test reprezentuje rodzaj pracy, którą lubisz wykonywać, czy też jest to niejednoznaczna weryfikacja umiejętności (tj. Test, jeśli znasz składnię Java).

Jestem tylko bezpośrednio instruowany, aby wykonać zadanie i przekazać kod.

Właśnie odpowiedziałeś na swoje pytanie.

Natychmiast planowałem rzucić go na Github, napisać dla niego pakiet testowy, używając Travis-CI (darmowa ciągła integracja dla publicznych repozytoriów Github) do uruchomienia zestawów testowych i używając CMake do zbudowania plików makefile dla Travis-CI.

Nie, nie o to prosili.

W ten sposób nie tylko mogę wykazać, że rozumiem, jak korzystać z Git, CMake, Travis-CI i jak pisać testy, ale mogę również po prostu link do strony Travis-CI, aby mogli zobaczyć wyniki testów. Pomyślałem, że to sprawi, że będzie to nieco wygodniejsze dla ankietera.

Ostrożnie wykazywałbym umiejętności zbyt wcześnie lub za późno w trakcie rozmowy kwalifikacyjnej. Jeśli uważasz, że nie poradziłeś sobie dobrze podczas rozmowy, a teraz próbujesz to zrekompensować, to nie zadziała. Z drugiej strony robienie zbyt wiele, gdy się o to nie pyta, demonstruje nadmierną chęć. Może to spowodować, że pracodawca skontaktuje się z ofertą niższego wynagrodzenia, niż się spodziewałeś.

Martwię się jednak trochę, że wykonanie tego wszystkiego dla stosunkowo prostego zadania wyglądałoby źle.

Tak, wygląda źle. Rozwiązanie ich problemu za pomocą jednego wiersza kodu będzie znacznie bardziej imponujące niż pełny projekt.

Z mojego doświadczenia wynika, że ​​nie tak wygrywasz rozmowę o pracę, ale jest to jeden ze sposobów na utratę pracy. Test kodu jest kwestią kontroli jakości. Robi to każda firma, która korzysta z testów kodu podczas zatrudniania ludzi, ponieważ wcześniej nie korzystali z testów kodu. Mieli złe doświadczenia, że ​​ktoś prześlizguje się przez pęknięcia procesu wywiadu, co nie powinno mieć miejsca.

Zabiorą kod źródłowy i przekażą go w biurze. Ludzie skomentują to, a ty nie chcesz, żeby powiedzieli: „Popełnił ten błąd? Spędzał czas, używając Git, CMake i Travis-CI. Co za idiota, który nie zauważył tego błędu”.

to jest to! Straciłeś.

Chcą wiedzieć, że umiesz kodować, ponieważ nie mogą cię tego nauczyć. Git, CMake i Travis-CI można łatwo nauczyć.

Reactgular
źródło
2
@ JimmyHoffa, czy nie zgadzasz się z całą moją odpowiedzią czy tylko moimi komentarzami na temat testowania? Może nie udało mi się poprawnie wyrazić mojej perspektywy, a może nie? Dla mnie bardziej cenię element ludzki niż test pisemny. Kandydat, który nie zda FizzBuzz, nic mi nie udowodni. Muszę porozmawiać z tą osobą, aby zrozumieć, dlaczego. ale chcę zatrudnić wykwalifikowanych pracowników (zawsze). Po prostu nie sądzę, żebyś poszedł do domu, napisał ten test i wrócił. Jest to skuteczny sposób, aby to zrobić. Wolę zadać pytanie FizzBuzz i obserwować, jak to rozwiązują. Czy rozumiesz?
Reactgular,
1
@ JimmyHoffa Myślę, że sprowadza się to do oczekiwań pracodawców dotyczących zatrudnienia. Powiedziawszy to, przechylam się bardziej na twoją stronę, im więcej czytam o testach FizzBuzz. Programista, który nie może przejść na żadnym poziomie kariery, ma problemy. Po prostu nie jestem pewien, czy tego rodzaju testy są takie same jak OP. Zobacz to powiązane pytanie: stackoverflow.com/questions/117812/…
Reactgular
Mówiąc najprościej, jestem fanem mozolnych rozmów kwalifikacyjnych i kandydatów, którzy starają się wykraczać poza granice (bez uszczerbku dla podstawowych próśb; w przeciwnym razie źle traktują swój czas). Twoja cała odpowiedź wydaje się przemawiać przeciwko obu tym rzeczom.
Jimmy Hoffa
@JimmyHoffa Myślę, że moje podejście wynika z freelancingu w dziedzinie kreatywności, w której klienci często proszą dostawcę o ukończenie pracy twórczej lub testów w ramach procesu licytacji przed pracą. Nie wykonuję tego rodzaju pracy, ponieważ gdybym spędzał godziny nad każdą perspektywą, nie wykonałbym żadnej rozliczanej pracy. Kiedy powiedziałem OP, aby postępował ostrożnie, chciałem powstrzymać go od marnowania czasu. OP chciał zainwestować czas w wykonanie dodatkowej pracy. To pokusa, ale czy warto z tego skorzystać? Może, ale OP nie wyjaśnił tego. Może to być krótkoterminowa praca kontraktowa.
Reactgular,
0

Myślę, że twoje podejście nie jest ani dobre, ani złe samo w sobie . Zapytałbym ankietera, czy korzystanie z Github i innych narzędzi jest w porządku. Jak wskazał @Izkata w komentarzach, upubliczniasz swoje rozwiązanie.

Jako ankieter wiedziałem, że kandydat zwykle nie szkodzi próbując wyjaśnić kilka rzeczy. Zadanie jednego lub dwóch pytań może być dobrym znakiem, ponieważ nie spiesz się, aby robić rzeczy, których nie rozumiesz.

Pamiętaj jednak, że najważniejsze jest to, że problem został rozwiązany i rozwiązany dobrze. W tym względzie wszyscy zgadzają się, że zestaw testów pomaga. Ale w tym celu może wystarczy wysłać kilka klas testowych wraz z projektem / rozwiązaniem.

Hbas
źródło