Dobre projekty programistyczne podczas wywiadów [zamknięte]

26

Szukam niewielkich projektów programistycznych, które mogę dać potencjalnym pracownikom, aby ocenili swoje umiejętności programistyczne. Będą to programiści bezpośrednio po studiach. Szukam projektów, które zajęłyby komuś kilka godzin, a oni wysłaliby odpowiedzi e-mailem po rozmowie kwalifikacyjnej.

Jednym z przykładów byłoby pobranie tego akapitu tekstu i zwrócenie listy unikatowych słów w alfabecie. Po każdym słowie powiedz mi, ile razy to słowo się pojawiło i w jakiej formie wyraz był doceniany.

Czy ktoś ma jakieś dobre sugestie?

bigtang
źródło
Pytania konkursowe dotyczące programowania ACM. Archiwum tych pytań można znaleźć tutaj .
whatsisname
1
Czy te łamigłówki z programowaniem byłyby dla Ciebie interesujące? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

Odpowiedzi:

43

Już dawno doszedłem do wniosku, że nic, co ktoś może zrobić w krótkim czasie, nie może mi powiedzieć nic użytecznego na temat tej osoby. Ale każdy dobry kandydat ma już napisane osobiste projekty, które mogą wiele powiedzieć. Wymieniłem więc konkretne wyzwania na „daj mi kawałek kodu, z którego jesteś dumny i chętnie stemplujesz swoje imię”.

Ich wybór projektu mówi więcej niż jakieś godzinne zadanie. A potem możesz poświęcić godzinę na dyskusje, aby dowiedzieć się więcej.

pdr
źródło
4
Pamiętam, jak przeprowadzałem wywiad w firmie, otrzymałem dość prostą funkcję (15-20 linii) i pytano: „Co to robi?” Powiedziałem im, a potem zapytałem: „Czy ktoś się myli?”. Powiedziano mi, że większość ludzi, z którymi rozmawiali, nie mogła odpowiedzieć. Może to szybka alternatywa (nie znam nikogo, kto potrafi odczytać kod, który nie potrafi go napisać, ale może po prostu nie spotkałem niewłaściwych ludzi).
TMN
4
@TMN - Och, my też to trochę robimy. Ale spotkałem ludzi, którzy potrafią czytać kod i nie pisać go dobrze .
pdr
@TMN Będąc samoukiem, spędziłem znaczną ilość czasu wcześnie czytając kod do tego stopnia, że ​​byłem o wiele lepszy w czytaniu niż pisaniu. Może się to zdarzyć i po prostu wymaga czasu i praktyki, aby podnieść umiejętności pisania.
Jimmy Hoffa,
28

Mam już dość tego badziewnego badziewia. Byłem w miejscach, w których prosiłem mnie o próbki kodu, rozerwałem je na strzępy, a potem poprosiłem o wyjaśnienie przykładowego kodu z ich systemów, który wyglądał, jakby został napisany przez roztrzaskanych 2-latków. Poproszono mnie o implementację niejasnych algorytmów sortowania, usług sieciowych, gui, struktur danych (zawsze albo drzewa, albo listy połączonej). Każdy smak majstrowania irytujących pytań na temat tego, co uważa ankieter, jest najważniejszą częścią programowania.

W końcu to wszystko jest prawie bezużyteczne. Najlepszym sposobem oceny pracownika jest zatrudnienie go na 30 dni i sprawdzenie, jak dobrze wykonuje pracę. Poświęć cały czas na rozwijanie testów, a to nie powie ci nic o tym, jak ktoś działa na co dzień.

Satanicpuppy
źródło
8
Kodowanie prostego algorytmu, takiego jak opisany bigtang, nie jest co najmniej „grą umysłową”. Możliwość zrobienia czegoś takiego powinna być warunkiem wstępnym nawet uzyskania wywiadu (i to w mojej firmie). Jest to bardzo przydatne do sprawdzania kandydatów, którzy inaczej świetnie wyglądają na papierze. Ostatnią rzeczą, którą chcę zrobić, jest spędzanie godzin na przeprowadzaniu wywiadów z kimś, kto nie może napisać funkcji, aby stwierdzić, czy ciąg znaków jest palindromem. Byłbyś zaskoczony liczbą doktorów CS z najlepszych szkół, którzy nie mogą wykonać testu Bigtanga. Krótko mówiąc, ukończenie takiego testu jest konieczne, ale niewystarczające.
Jer
+1 @Jer. Ostatnim razem, gdy przeprowadzałem wywiad dla programisty, sześciu z ośmiu kandydatów nie mogło wykonać najbardziej podstawowych zadań (nawet z Google i SO). Nie ma mowy, żebym pozwolił im zbliżyć się do mojej prawdziwej bazy kodów na pięć minut, a co dopiero na 30 dni.
Julia Hayward
2
@JuliaHayward: Spodziewałbym się, że każdy będzie mógł ukończyć projekt z dostępem do stron internetowych / dokumentacji. Problem pojawia się, gdy ktoś zaczyna rzucać w ciebie modnymi słowami i niejasnymi algorytmami sortowania bez dostępu do Internetu, pod fałszywym założeniem, że zapamiętanie różnych technik sortowania lub cokolwiek innego ma kluczowe znaczenie dla codziennej pracy.
Satanicpuppy
12

Pozwolenie komuś na wykonanie praktycznego projektu we własnym czasie niekoniecznie oznacza, że ​​to on to robi.

Każdy przyjeżdża wcześnie na rozmowę kwalifikacyjną (przynajmniej powinien). Mamy arkusz „podczas oczekiwania”, aby mogli pracować, dopóki nie będziemy gotowi ich zobaczyć. Zawiera osiem (8) pytań, które sprawdzają wiedzę kandydatów w języku, którego używamy głównie.

Nie szukamy odpowiedzi na wszystkie pytania, ponieważ każdy może je poprawnie uzyskać, mając przed sobą komputer. Szukamy procesu, czy w ogóle podejmą pytanie, w jaki sposób dochodzą do odpowiedzi.

Kiedy przychodzimy na rozmowę, omawiamy ją z nimi i odpowiadamy na wszelkie pytania, które mogą mieć, co może również prowadzić do uzyskania prawidłowej odpowiedzi. Pozwala nam to również zapytać, w jaki sposób uzyskali odpowiedzi, na które wpadli.

To, w połączeniu z poprzednimi pracami, jest najlepszym sposobem na odfiltrowanie kandydatów.

AKTUALIZACJA 2016/06/15

Znacząco zmieniliśmy nasz proces zatrudniania programistów.

Faza 1: 15-minutowy wywiad telefoniczny, w którym zadajemy 7 pytań. Pierwsze 2 to „Jaka jest najfajniejsza rzecz, nad którą pracowałeś?” (nie musi być związany z programowaniem) i „Co piszesz dla zabawy w wolnym czasie?”.

Faza 2: Mini projekt, który realizują we własnym czasie. Następnie udostępniamy im zrzut ekranu, który pokazuje nam, co zbudowali. Podczas udostępniania ekranu zachęcamy ich również do wprowadzenia dwóch zmian w projekcie, a następnie obserwujemy, jak pracują nad nim i działają.

Faza 3: rozmowa osobista.

Ten proces pozwala nam od razu ustalić dopasowanie kultury (faza 1). Jeśli potrafią wykonać pracę i faktycznie przeprowadzić rozmowę (faza 2). Na koniec upewnij się, że ich wartości są zgodne z tym, czego szukamy (faza 3).

RDL
źródło
1
To jest trochę genialne. Lubię to!
davidhaskins
3
chociaż byłem w wielu wywiadach, które zmieniają się w ciekawostki. Uważaj, aby nie zagłębić się w ten szczególny fragment sysntax i uzyskać zrozumienie na dużą skalę. Zwłaszcza jeśli zarzuca się im talent lub zainteresowanie. w rezultacie nie chciałem dla nich pracować i jestem pewien, że to było wspólne.
John Nicholas
„Umożliwienie komuś wykonania praktycznego projektu we własnym czasie niekoniecznie oznacza, że ​​to on to robi” - To prawda, ale jeszcze nie spotkałem kogoś wystarczająco odważnego, aby przyjść na rozmowę kwalifikacyjną i zapytać go o kod, którego nie ma napisane. Jeśli tak się stanie, nie przejdą wywiadu i próby, ale mogę ponownie rozważyć moje podejście.
pdr
@Jan. Zgadzam się, nie może być „och, zapomniałeś przecinka”. Jak wspomniałem, chodzi o zrozumienie, w jaki sposób podejście i czy rozumieją język. Jeśli wiedzą, że ich rzeczy zdecydowanie przechodzą do większych rzeczy.
RDL,
2
@RDL, Większość naszego procesu wywiadu ma na celu być zabawą dla poszukiwanego przez nas programisty, a resztą - piekło. Wiesz, jak dobrzy deweloperzy nie mogą się oprzeć wyzwaniu.
pdr
4

Możesz sprawdzić fantastyczne Cyber-Dojo Jona Jaggera .

Jest to zintegrowane środowisko internetowe zaprojektowane do celowej praktyki programowania opartego na testach i poznawania dynamiki zespołu. Ma wiele małych zadań programistycznych (kata) i obsługuje wiele języków, od Python i Ruby po Java i C ++.

W przeciwieństwie do IDE zaprojektowanych pod kątem produktywności, nie ma uzupełniania kodu, podświetlania składni ani automatycznego refaktoryzacji, więc możesz zobaczyć, co twój rozmówca może zrobić bez nich.

Najlepszą rzeczą jest to, że po wykonaniu kata możesz wrócić i spojrzeć na czerwony / zielony postęp (a może nie, jeśli nie robią TDD * 8 ') każdego z kata. Każda kompilacja / test zatwierdza zmiany w repozytorium git wraz z wynikami testu.

Myślę, że użycie tego do testów kodowania rozmowy kwalifikacyjnej może wiele powiedzieć o nie tylko zdolności kandydatów do rozwiązania problemu, ale także o ich podejściu do rozwiązywania problemów i procesie, którego używają, gdy nie są ograniczone przez czynniki zewnętrzne, wystarczy wybrać kata odpowiednie dla czas, jaki chcesz spędzić na kandydacie.

Jeśli chcesz mieć własny serwer CyberDojo, cały projekt można znaleźć na github, a stamtąd jest nawet podłączona wirtualna maszyna Linux pod klucz, co oznacza, że ​​zakładając, że masz już zainstalowany VMware player lub VirtualBox , możesz zacząć działać w kilka minut pobierania urządzenia!

Mark Booth
źródło
3

Rozmawiałem tylko z jedną firmą, która to zrobiła. Zadali arkusz pytań 6 lub 7 problemów. Instrukcje miały stworzyć metodę rozwiązania każdego problemu.

Jedną częścią zadania było uświadomienie sobie, że można ponownie użyć kodu. Problemy mogą korzystać z kodu z innych rozwiązań. To też nie było sekwencyjne. Na przykład pytanie 3 można napisać przy użyciu metody użytej dla pytania 5.

Sugerowałbym wypróbowanie czegoś takiego.

Co do pytań? Niektóre pytania początkowe na stronie Project Euler są dobre.

Możesz także wypróbować prostą grę, jeśli chcesz zobaczyć, jak mogą złożyć projekt.

Lub, jeśli nie chcesz czegoś wymyślić, poproś ich o przesłanie kodu z ostatecznego projektu.

Tyanna
źródło
3

Aby poprosić ludzi o ukończenie projektu, powinieneś mieć określony zestaw umiejętności, które chcesz ocenić i zaprojektować projekt w celu przetestowania tych umiejętności.

Jednym z przykładów byłoby pobranie tego akapitu tekstu i zwrócenie listy unikatowych słów w alfabecie. Po każdym słowie powiedz mi, ile razy to słowo się pojawiło i w jakiej formie wyraz był doceniany.

Czego szukasz z tym pytaniem? Ile jest sposobów rozwiązania tego problemu i co każde podejście mówi o osobie, która napisała odpowiedź? Czy umiejętności przedstawione w skutecznej odpowiedzi na to pytanie są tymi samymi umiejętnościami, które są najważniejsze dla Twojej firmy?

Nie chcę odpowiedzi na te pytania; Chcę tylko, abyś pomyślał o odpowiedziach, zanim poddasz grupę kandydatów swojemu procesowi. Jeśli wiesz, jakich umiejętności szukasz, zadawanie pytań w celu ich znalezienia nie jest trudne. Jeśli użyjesz pytania innej osoby, nie do końca rozumiejąc, co zostało zaprojektowane do oceny (jeśli w ogóle), to po prostu oszukujesz siebie i marnujesz czas wszystkich.

Caleb
źródło
Przepraszam, że zmarnowałem twój czas.
bigtang
1
@bigtang, wcale tak nie jest. Przepraszam, jeśli powyższe wydaje się być rantem - rozumiem, jak to może być - ale moim celem było zbudowanie sprawy do stworzenia własnego projektu w oparciu o umiejętności, których szukasz w nowych pracownikach. Możesz zrobić mały projekt z prawie wszystkiego, ale aby było opłacalne zarówno dla ciebie, jak i rozmówców, wymagania powinny zależeć od umiejętności, które najbardziej cenisz.
Caleb
Całkowicie usunąłem pierwsze zdanie (z szacunkiem, jeśli nie jesteś wystarczająco sprytny, aby samemu wymyślić przyzwoity projekt, co sprawia, że ​​uważasz, że jesteś wystarczająco sprytny, aby ocenić opinie kandydatów? ”). wartość i wydawało się nieco rantish
Michael Durrant
0

Jednym z przykładów byłoby pobranie tego akapitu tekstu i zwrócenie listy unikatowych słów w alfabecie. Po każdym słowie powiedz mi, ile razy to słowo się pojawiło i w jakiej formie wyraz był doceniany.

W jakim języku by to napisali? Jeśli wychodzą ze szkoły, która skupia się głównie na C, nie byłoby tak szybko pisać, jak ta, która uczy Python / Perl / Ruby itp. Lub nawet Java lub C #. Niemniej jednak jest to dobry mały test.

Proponuję te łatwiejsze podczas rozmowy. Żadnych podchwytliwych pytań. W tej sprawie jestem z TMN. Daj im kilka funkcji, które wykonują podstawowe zadania i zapytaj, co robią (czytanie kodu innych osób). Następnie daj im kilka podstawowych zadań (<20 linii) do pisania w wybranym przez siebie języku. To powinno wystarczyć, aby poziom wejściowy wiedział, czy potrafią kodować, czy nie (na poziomie wejściowym). To wraz z wywiadem i GPA powinno dać ci dobry pomysł na to, co musisz wiedzieć.

Obudzić
źródło
1
Nie uważam tego języka za krytyczny, można go nawet zrobić za pomocą pseudokodu. Główną ideą jest sprawdzenie, czy domniemany pracownik „wejdzie” i wykaże dobre oznaki rozwiązywania problemów.
Jonas Byström,
Szczerze mówiąc, każdy język z split () i tablicami / listami (z push / append) uczyniłby to trywialnym. Pozwól programiście C „założyć” split () i listę, a stanie się to równie trywialne :-)
ChuckCottrill
-1

Poproś, aby wdrożyli grę życia Conwaya dla dowolnego języka, na który patrzysz, używając paradygmatów projektowania tego języka.

Gra życia Java lub C # Conway powinna być zorientowana obiektowo, LISP lub F # działałyby itp.

George Stocker
źródło
2
Jak długo dałbyś im to zrobić?
Job
Zajmuje mi około 4 godzin, aby przejść przez całą implementację OO, ale zrobiłem to już kilkanaście razy. Jeśli chcesz zobaczyć, jak myślą i jak daleko się posuwają (i czy piszą testowalny kod), daj im mniej czasu. Jeśli zrobisz to osobiście, daj im 45 minut i sprawdź, jak daleko się posunęli i dlaczego wybrali ścieżkę, którą zrobili. To jeden z tych problemów, o których chcesz, aby wiedzieli z wyprzedzeniem, aby nie byli całkowicie zagubieni, a nawet zachęcać ich do samodzielnego wypróbowania. To wiele mówi o programistach.
George Stocker
8
Poproszenie kandydata o napisanie testów Conwaya Game of Life, jak niedawno byli na studiach, lub napisanie i przestudiowanie tego problemu. Zatrudniłbyś @George Stocker, ponieważ napisał go kilkanaście razy. Jak bardzo skorelowana jest gra życia z jakimikolwiek pracami rozwojowymi w świecie rzeczywistym?
ChuckCottrill