Pytanie:
Programiści, którzy są wysoce zalecani, ale nie radzą sobie z pytaniami dotyczącymi programowania testów papierowych
Graviton
2019-01-11 08:52:30 UTC
view on stackexchange narkive permalink

tl; dr: Jak radzić sobie z programistami, którzy są wysoce rekomendowani, ale nie radzą sobie z pytaniami dotyczącymi programowania testów papierowych

Rozmawiałem z kandydatem na stanowisko programisty. Niedawno ukończył studia na wydziale informatyki.

Otrzymał doskonałą rekomendację od swojego przełożonego podczas stażu na stanowisku programisty, aw czasie studiów miał na koncie szereg pobocznych projektów programistycznych. Niezbyt trudne projekty, ale zdecydowanie samodzielne i użyteczne strony internetowe / aplikacje mobilne. Na podstawie CV wygląda jak gwiazdor.

Jedynym problemem jest to, że kiedy dałem mu test papierowy - w zasadzie musi używać pióra i papieru, aby odpowiedzieć na niektóre pytania programistyczne, walczył i nie mógł nie dostałem ani jednego poprawnego. Wszystkie moje pytania są bardzo podstawowymi pytaniami programistycznymi - gdzieś na poziomie fizzbuzz, dopasowując element w tablicy - rodzaj pytań, na które mogą łatwo odpowiedzieć osoby, które uczęszczają na jeden semestr kursu programowania na poziomie podstawowym.

Wspomniałem już, że w ogóle nie obchodzi mnie składnia / język. Pseudokod jest dla mnie wystarczająco dobry

Poprosił o cofnięcie pytań w celu uzyskania odpowiedzi, na co się zgodziłem. Następnego dnia przesłał mi w pełni poprawione rozwiązania. Wykonał zadania na IDE i udało mu się uzyskać prawidłowe wszystkie odpowiedzi.

To mnie zastanawia - jeśli jest tak dobry, jak sugeruje jego rekomendacja, dlaczego nie radzi sobie z testem papierowym? Czy to możliwe, że są ludzie, którzy potrafią dobrze kodować przed ekranem komputera, ale kiedy przychodzi do pisania rozwiązań programistycznych na papierze, mają problemy?

Edycja:

  1. Nie obchodzi mnie składnia, zostało mu to jasno przekazane
  2. Poziom pytań korzysta tylko z najbardziej elementarnych konstrukcji, takich jak for , if ... w ogóle nic o ezoterycznych wywołaniach bibliotek. Wszystko, co wymaga praktycznej wiedzy w określonych ramach, jest uważane za nie-podstawowe. Dlatego nie proszę osoby zdającej o zapamiętanie jakichkolwiek wywołań metody http .
Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/88205/discussion-on-question-by-graviton-programmers-who-are-highly-recommended-but-c).
Nie rozumiem, dlaczego nadal używasz testu papierowego.Kiedy ktoś pisze na papierze?Powinieneś pozwolić mu zrobić test w IDE w systemie z lustrzanym wyświetlaczem i obserwować jego proces.To powie Ci * DUŻO * więcej o tym, z kim pracujesz.Twój test jest równoważny postawieniu kogoś przed mikserem farb w Home Depot i wykorzystaniu tego wyniku do podjęcia decyzji, czy dana osoba jest dobrym malarzem portretowym.
Jako minimum możesz pomyśleć, że możesz dać kandydatowi edytor tekstu i komputer, a nie tylko ołówek i papier.Edytowanie ołówkiem i papierem jest uciążliwe.My, programiści, jesteśmy przyzwyczajeni do wstawiania rzeczy.
Jako programista nigdy nie wierzyłem w te testy.Zbyt często zawierają pytania dotyczące rzeczy, których nigdy nie potrzebujesz, i oczekują, że będziesz wiedzieć, aby wiedzieć rzeczy.
Kiedy mówisz, że nie potrafił poprawnie rozwiązać problemów, czy masz na myśli to, że nie zrozumiał poprawnie składni lub że nie był nawet w stanie stworzyć pseudokodu?
@DaveG, nie był nawet w stanie opracować pseudokodu
Czy to możliwe, że kandydat w dużym stopniu polega na próbach i błędach?Algorytmy komputerowe mogą być uruchamiane i debugowane w sposób, w jaki nie są w stanie napisane algorytmy.
@Graviton Pamiętam, że jeszcze w szkole próbowali uczyć pseudokodu tak, jakby był to inny język.Więc kiedy pytam kogoś, mówię coś w stylu „czy możesz napisać jakiś pseudokod lub napisać jakieś instrukcje logiczne, aby wyjaśnić”, aby dać początek napisaniu czegokolwiek, co wygląda jak kod, a nie jakiś nowy standard pseudokodu.
@Graviton Czy możesz nam powiedzieć, jakie były niektóre z pytań?Pomogłoby nam to ustalić, dlaczego nie można na nie odpowiedzieć.FizzBuzz jest źle sformułowany i nie jest wystarczająco precyzyjny, aby wydawać instrukcje programiście.Jest w Userspeak.
@TrevorD, FizBuzz jest dosłownie jednym z pytań.Inne pytania to „pobierz pozycję indeksu elementu w tablicy”, „ciąg Fibonacciego”.
Mam problem z określeniem tego, czego szukasz na podstawie tego pytania - i dlatego nie przykuwa wymaganej uwagi.Czy możesz powtórzyć na górze jasnym językiem, czego szukasz w Internecie?
@Mirv, Na początku tego pytania umieściłem tl; dr
Szesnaście odpowiedzi:
Justin Cave
2019-01-11 09:23:53 UTC
view on stackexchange narkive permalink

Czy to możliwe? Pewnie. Ludzie mogą tak przyzwyczaić się do środowiska IDE z autouzupełnianiem składni i podświetlaniem składni, że napotykają na psychiczną blokadę, gdy próbują pisać kod na papierze lub na tablicy.

Czy to możliwe, że ktoś inny zrobił to praca? Jasne.

Dlaczego nie poprosić go, aby wrócił i rozwiązał podobny zestaw problemów z komputerem z dowolnym skonfigurowanym IDE. Jeśli jest w stanie stworzyć wysokiej jakości kod w środowisku znacznie bliższym rzeczywistemu miejscu pracy, to świetnie. W przyszłości możesz zaoferować kandydatom wybór między używaniem IDE lub zadawaniem pytań na papierze z góry, jeśli ludzie mają blok psychiczny z testami papierowymi.

+1 lub ludzie mogą mieć niepełnosprawności jak ja.Mam dysgrafię, więc właściwie nie mogę dużo pisać.(Gubi się między moim mózgiem a ręką), ale potrafię bardzo dobrze pisać.Im bardziej usuwany jest test z pracy, tym mniej wartościowy jest test.
Sesja kodowania na miejscu lub test kodu, podczas którego otrzymują komputer i muszą kodować coś w locie, byłyby dobre, a następnie poproś o wyjaśnienie, co zrobili.Wydaje się, że jest to lepsza refleksja na temat tego, jak ludzie pracują.Jeśli używasz parowania w swojej pracy, możesz je również sparować z pracownikiem.
@RichardU Jeśli masz dysgrafię, to jak zdałeś egzaminy w szkole?
Może warto dać jedno i drugie.Możesz też zmienić na nieco trudniejsze pytania wielokrotnego wyboru.Byłbym wspaniale udzielić jednej z możliwych odpowiedzi - Żadnej z tych.
@Graviton Przynajmniej w Wielkiej Brytanii studenci mogli otrzymać dodatkowy czas na egzaminy, a nawet zezwolenie na używanie komputera do odpowiadania na pytania egzaminacyjne, w zależności od niepełnosprawności, u której mogli zostać zdiagnozowani.Miałem przyjaciela, który stał się quadriplegic w liceum i dyktował każdy egzamin skrybie ze 100% dodatkowym czasem.
Oto, co się z nami stało.Zaprosiliśmy niesamowitego kandydata z powrotem po tym, jak rozwiązał problemy z kodowaniem na tablicy.Daliśmy mu internetowe IDE z podstawowym środowiskiem kompilatora / wykonywania i ponownie zadaliśmy pytanie o algorytm (składnia nadal nie miała znaczenia).Szczerze mówiąc, druga rozmowa właśnie potwierdziła pierwszą.Kandydat zbyt długo zajmował kierownictwo i był zbyt zardzewiały w programowaniu, nawet danie mu IDE nie pomogło.
@RichardU Chociaż częściowo zgadzam się, że dobrze jest wykonywać testy zbliżone do rzeczywistych wymagań, uważam, że omówienie pseudokodu jest istotną częścią większości prac programistycznych opartych na zespołach.Teraz, poproszony o napisanie kodu na papierze, rozmówca może rzeczywiście myśleć o „napisaniu programu”, zamiast omawiać ogólne algorytmiczne rozwiązanie problemu.Zgodnie z odpowiedzią dałbym mu przynajmniej inne możliwości wyjaśnienia, w jaki sposób mógłby to rozwiązać: biała tablica, ja piszę mu wyjaśniając, rozmawiam itp., Ale ogólną umiejętność abstrahowania od kodu uważam za rzeczywisty atut.
@Darkwing Tak, nie radzę sobie dobrze w tych ustawieniach, jednak uratowałem mojej firmie 1,5 miliona w zeszłym tygodniu.Jednak nie testuję dobrze.nigdy nie zrobił.
@RichardU Gratulacje.Nie mówię, że nie możesz być świetny, jeśli nie możesz ich zaliczyć, ale w wielu miejscach komunikacja zespołowa o tym, co robisz i dlaczego jest ważna i jest to narzędzie do testowania tej umiejętności (jak powiedziałem, zgadzam się, że programowanie na papierze to dośćwiele wad i miałbym to tylko jako opcję spośród innych opcji).Nie powiedziałbym też, że powinna to być jedyna umiejętność, której szukasz podczas rozmowy kwalifikacyjnej, a czasami, na przykład, jeśli chcesz zatrudnić jednego programistę, który Cię interesuje i nie obchodzi Cię, jak to zrobić, nie powinno tak byćna stole w ogóle.
@Darkwing Wiem, że mój przypadek jest wyjątkowy.Mam coś, co nazywa się „dysgrafią”.Jest przerwa w ścieżkach neuronalnych w moim mózgu między częścią, która myśli, a częścią, która pisze.Potrafię pisać, potrafię mówić w bardzo elokwentny sposób, po prostu nie mogę wykonać fizycznej czynności pisania.
@RichardU Widziałem twój oryginalny komentarz.Prawdopodobnie poradziłbyś sobie wtedy z ustnym wyjaśnieniem algorytmu i jeśli czujesz, że możesz ujawnić, że podczas rozmowy kwalifikacyjnej z pewnością albo napiszę dla ciebie na białej tablicy, jeśli zajdzie taka potrzeba, albo pozwolę ci użyć komputera / tabletu do wzięcianotatki.Chodziło mi tylko o to, że samo kodowanie nie jest jedyną umiejętnością wymaganą od programisty w wielu zawodach, w szczególności umiejętność wyjaśnienia, dlaczego na poziomie abstrakcyjnym jest również często cenną umiejętnością i uważam, że uczciwie jest to sprawdzić(ale z otwartym zestawem narzędzi).
Daj kandydatowi 30-45 minut, odejdź i monitoruj jego ruch sieciowy.Sprawdź, czy odwiedza specyfikację API / Stack Exchange lub zaczyna komunikować się ze znajomymi za pośrednictwem mediów społecznościowych.Daj mu znać, że jest monitorowany.
Trevor
2019-01-12 00:54:21 UTC
view on stackexchange narkive permalink

Ten link z komentarzy https://blog.codinghorror.com/why-cant-programmers-program/ przedstawia interesujący problem, którego pisanie na papierze jest naprawdę frustrujące.

Dlaczego?

Oto wymagania w tekście:

Napisz program, który wypisuje liczby od 1 do 100. Ale dla wielokrotności trzech wypisz " Fizz ”zamiast liczby i jako wielokrotność pięciu wypisz„ Buzz ”. W przypadku liczb, które są wielokrotnościami trzech i pięciu, wypisz „FizzBuzz”.

Oto wymagania jako kroki

  1. Pętla od 1 do 100 i wydrukuj liczba
  2. Sprawdź, czy występują wielokrotności 3 i wypisz „Fizz” zamiast liczby
  3. Sprawdź, czy występują wielokrotności 5 i wypisz „Buzz” zamiast liczby
  4. sprawdź wielokrotności 3, a także wielokrotności 5, wypisz "FizzBuzz"

Tutaj się rozpada. Programiści nie myślą, jak wykonać wszystkie 4 kroki naraz, robią jeden krok na raz. Na komputerze jest to łatwe, napisz pierwszy krok, następnie edytuj w drugim, a potem edytuj w trzecim, sprawdź, czy czwarty zadziałał.

Ale na papierze musiałbyś napisać to 3+ razy na papierze lub w głowie. Zajmuje to ogromną ilość czasu, ponieważ nie w ten sposób uczono programistów myślenia. Każdy mały błąd to kolejne przepisanie.

Programowanie to sztuka szybkiego robienia setek małych błędów i ich naprawiania. Powielanie tego na piśmie zajmuje absurdalnie dużo czasu. Zajmowanie przez starszego programistę 15 minut jest całkowicie rozsądne.

Jest to również duży stres, który można nałożyć podczas regularnej rozmowy kwalifikacyjnej, stres, który zwykle jest już trudny dla programistów. Więc zamarzają.

To bardzo dobry punkt, ponieważ podzielenie wymagań na kroki to dobry pomysł.W rzeczywistości ktoś mógłby napisać kod i test dla każdego wymagania, co jeszcze bardziej utrudniłoby wykonanie na papierze.
Ale w tym miejscu zezwolenie na pseudokod eliminuje potrzebę przepisywania.Możesz napisać na papierze: `` LOOP 100 TIMES '', a następnie z wcięciem: `` CHECK MODULO 3 '' i z wcięciem `` IF TRUE PRINT '' Fizz '' itp. Na przykład składnia w Pythonie pozwala na to bez przepisywania nawet na papierze:)
Nie zapisałeś poprawnie wymagań;)
@Juha Untinen czy jednak pseudokod dowodzi czegoś użytecznego?Czy pytanie nie dowodzi niczego poza tym, że osoba przesłuchiwana nie może zmienić ścieżki i zobaczyć całego problemu w swoim umyśle?Ponieważ jest to bardzo specyficzny wymóg, zwykle w przypadku leadów ta umiejętność jest pomocna.Teraz, gdybym zatrudniał programistę front-end, mógłbym poprosić go o napisanie podstawowej strony internetowej z przyciskiem, tytułem i pogrubioną etykietą, tylko po to, aby sprawdzić, czy w ogóle coś wiedzą.Ale to nie wymaga żadnej logiki.
@Chan-HoSuh Naprawiono to, ale to wiele mówi o jakości instrukcji, prawda?Przeprowadziłem go obok kilku osób i dostałem kilka interpretacji.
W pewnym sensie zgadzam się z opisaną tutaj zasadą (długopis i papier w niczym nie przypominają IDE i nic nie przypomina testowanej pracy) i zgodziłbym się z nią w przypadku problemu o znacznej złożoności.Ale przykład FizzBuzz jest naprawdę, bardzo, bardzo łatwy, a twierdzenie, że „starszy programista, który zajmuje 15 minut jest całkowicie rozsądne” jest szalone.
@BittermanAndy Spróbuj sam, wybierz swój trzeci ulubiony język i napisz go.Zmierz czas, upewnij się, że składnia i wcięcia są dokładne.Jeśli popełnisz błąd, zacznij od nowa, ale nie uruchamiaj ponownie stopera.Kiedy spróbowałem, zbudowanie go źle po ponownym przeczytaniu instrukcji zajęło mi 12 minut :(
@TrevorD Zapytałem OP, a on stwierdził, że kandydat nie mógł nawet napisać pseudokodu.Innymi słowy, nie była to kwestia składni.Podejrzewam, że kandydat normalnie mógłby to zrobić dobrze, ale po prostu „zamroził mózg”, kiedy został postawiony na miejscu (chyba że w jakiś sposób jest całkowitym oszustem).
@DaveG Zgadzam się, brzmi podejrzanie.Osoba przeprowadzająca rozmowę powinna być w stanie wykryć całkowite zamknięcie i stwierdzić różnicę.Pisanie pseudokodu nie jest trudne (nie są to tak naprawdę zasady, więc wszyscy piszemy w czymś zbliżonym do pierwszego języka, którego się nauczyliśmy), więc nie ma powodu, aby nawet nie bazgrać na papierze.
Bycie pedantem tutaj.„Oto wymagania jako kroki” jest bardziej poprawnie wyrażone jako „Oto konkretne rozwiązanie, które realizuje wymagania”.Istnieje wiele architektur, które mogłyby zaimplementować wymagania i nic w wymaganiach nie ogranicza tego, jakiej architektury należy użyć.
@PeterM Przepraszam, że przekroczyłeś mój angielski na tym jednym, ale jeśli chcesz zasugerować zmianę, sprawdzę to i zatwierdzę.
To nie jest wymóg edycji ... bardziej żart / sarkazm.Z mojego punktu widzenia lista kroków nie jest wymaganiami, ale szczegółami implementacji - i że może istnieć wiele sposobów realizacji tych samych wymagań.Starałem się być sprytny, zwracając na to uwagę, ale oczywiście byłem zbyt sprytny dla własnego dobra.
Od ręki przy mojej pierwszej próbie: Dla N = 1 do 100 (jeśli N równo dział 15, to wypisz FB, w przeciwnym razie N równomiernie dział 3 wypisz F w innym przypadku, jeśli N równomiernie dział 5 wydrukuj B jeszcze wydrukuj N).A na moim papierze było ładniej niż tutaj.
@DarkMatter W mojej głowie już przeprojektowałem to, martwiąc się o odstępy między wierszami na wyjściu.Pytanie wydaje się sugerować, że nie chce, aby słowa były połączone w jedną długą linię, ponieważ FizzBuzz dzieje się w 9 i 10, co nie jest wymagane dla FizzBuzz.Czy musisz wrócić do pętli i upewnić się, że FizzBuzz nigdy nie zdarzy się przypadkowo, jeśli nie jest wielokrotnością 3 i 5?I zamknąłem się w wywiadzie, próbując to przemyśleć
Ponieważ jest to pseudokod, przy implementacji po prostu założyłem, że „print” oznacza „print line”.
@DarkMatter Jeśli nie jest to określone w wymaganiach, możesz robić, co chcesz.Mam klienta, który ma zamiar strzelić sobie w stopę z tego powodu.
@TrevorD Dla niektórych osób pisanie pseudokodu jest * bardzo trudne *, zwłaszcza, że jest to pseudo!Myślą o napisaniu poprawnego programu bez pomocy swojego IDE, co jest frustrujące, ponieważ zdają sobie sprawę, że tak naprawdę nie znają poprawnej składni.Może to bardzo pomóc, jeśli pozbędziesz się tego sposobu myślenia, tj. Poproś ich o wyjaśnienie algorytmu, którego użyliby do czegoś, tylko po to, aby intuicyjnie nie spróbowali napisać poprawnego składniowo programu.Jest to łatwiejsze, jeśli jesteś już w abstrakcyjnej reprezentacji problemu, takiej jak wykres, na którym można omówić algorytmy wykresu na przykładzie.
@Darkwing To interesująca kwestia, zastanawiam się, czy w wywiadzie nie byłoby korzystne opisanie logiki kodu werbalnie zamiast zapisywania?
@TrevorD Wydaje mi się, że wiele osób, które napotkają ten problem, z większym prawdopodobieństwem dostanie się do „abstrakcyjnego poziomu” myślenia, gdy dostarczysz im biało-czarną tablicę - nawet lepiej, jeśli ma już mały przykład, na którym mogą wizualizować swój algorytm.Nadal zostawiłbym im swobodę używania papieru lub zapisywania konkretnego algorytmu w pseudokodzie na tablicy lub na papierze, ale to daje im punkt wyjścia.Jeśli jednak patrzysz na kod, uważam, że zapewnienie IDE lub umożliwienie korzystania z własnego laptopa jest lepszą alternatywą niż papier.Generalnie pozostawiłbym wybór narzędzia tak otwartego, jak to tylko możliwe.
@TrevorD Myślę, że nie ma jednego najlepszego rozwiązania dla wszystkich, więc staram się zostawiać wybór narzędzi tak otwartych, jak to tylko możliwe i być może sugeruję jedno lub drugie narzędzie do różnych zadań, aby sprawdzić, czy poradzą sobie ze wszystkimi lub mają szczególne mocne strony / silne preferencjez jednym.
Warto wspomnieć, że jedynym powodem, dla którego ludzie mogą napisać FizzBuzz w kilka minut, jest to, że _ w pełni zinternalizowali_ dokładnie, jak to działa, i dlatego jest to taki zły przykład.FizzBuzz ma więcej wspólnego z tajnym uściskiem dłoni niż z wyzwaniem kodowania.Albo znasz to na pamięć, albo będziesz wyglądać na niekompetentnego, ponieważ nie możesz tego zrobić bez myślenia jak dwóch ostatnich facetów.
Patricia Shanahan
2019-01-12 06:38:24 UTC
view on stackexchange narkive permalink

Pierwsze programy napisałem w 1967 r., a pracę jako programista dostałem w 1970 r. Przez pierwsze kilka lat mojej kariery pisałem programy na arkuszach programistycznych.

Istnieją trzy istotne różnice między wtedy i teraz, z których każdy mógłby stanowić problem dla programisty z doświadczeniem jedynie w IDE:

  1. Pamiętanie struktur zewnętrznych. W IDE możesz skonfigurować np. jeśli-to-jeszcze przed wypełnieniem treści. Na papierze musisz pamiętać, gdzie byłeś z każdą niekompletną strukturą.
  2. Spojrzenie w przyszłość: IDE oferują opcje i uzupełnianie słów, które nie są dostępne na papierze. Podczas programowania na papierze potrzebowałem podręczników w zasięgu ręki, do wszystkiego, czego nie zapamiętałem do końca. Jeśli musisz wykonać testy programowania na papierze, podaj odpowiednie odniesienia na komputerze lub na martwych drzewach.
  3. Pismo ręczne. Mogłem bardzo szybko tworzyć czytelne wielkie litery, robiąc to przez cały dzień każdego dnia. Kiedy stosunkowo niedawno miałem do czynienia z pewnymi egzaminami akademickimi, które musiały być zrobione na papierze i ołówku, przygotowywałem się, ćwicząc pisanie, w tym pisanie notacji matematycznej. Minęło wiele lat, odkąd pisałem odręcznie.

O ile naprawdę nie potrzebujesz umiejętności programowania bez IDE, powinieneś skonfigurować środowisko programistyczne do swoich testów.

red-shield
2019-01-11 14:54:48 UTC
view on stackexchange narkive permalink

Jeśli jest tak dobry, jak sugeruje jego rekomendacja, dlaczego nie radzi sobie z testem papierowym?

Ponieważ nie ma potrzeby zapamiętywania wszystkiego, co można znaleźć w Google w mgnieniu oka. Uważam, że pytania dotyczące złożoności algorytmów, znajdowania elementów tablic lub sortowania itp. Są onieśmielające i nieprofesjonalne. Są to rzeczy, o których możesz przeczytać bardzo szybko, jeśli ich potrzebujesz.

Czy to możliwe, że są ludzie, którzy potrafią dobrze kodować przed ekranem komputera, ale jeśli chodzi o pisanie programów rozwiązania na papierze, walczą?

Tak, jest to możliwe, ponieważ o wiele ważniejsze jest, aby mieć ogólne pojęcie o tym, co robisz i móc myśleć abstrakcyjnie, zajęło to dużo czasu wyświetlić lub zobaczyć szerszy obraz i być w stanie znaleźć potrzebne informacje w razie potrzeby, niż znać na pamięć każdy algorytm. Czysta wiedza encyklopedyczna jest bezwartościowa, gdy ludzie nie wiedzą, jak ją właściwie zastosować.

Zbyt wiele wywiadów koncentruje się na takich kwestiach, jak to, czy wiesz, jak szybkie jest sortowanie pewników (co można znaleźć w ciągu kilku sekund) zamiast oceniać sposób myślenia ludzi.

Zatem poproszenie cię o rozwiązanie podstawowego problemu koncepcyjnego w informatyce bez żadnego konkretnego języka lub struktury nie jest okazją do „oceny sposobu myślenia”.co jest?:)
@Affe mhmm ... Myślę, że nie jesteśmy jeszcze na tej samej stronie, ponieważ nie do końca o tym piszę.Chodzi mi o to, że _jak myślisz__ nie jest oceniana, ale twoja encyklopedyczna wiedza - która w większości przypadków i tak niczego nie dowodzi.
Przepraszam, że mój wyzwalacz dotyczący osób, które odpowiadają na każde pytanie słowami „po prostu wygooglowałbym to”, był skierowany do ciebie;).Moi stażyści są świetnymi pracownikami Google, chyba że chcą, aby wynagrodzenie stażystów dało mi ** coś. ** Rozumiem, co mówisz o umiejętnościach rozwiązywania problemów, a nie o ciekawostkach.Nie obchodzi mnie, czy odpowiedź jest „dobra” czy „zła” na jedno konkretne pytanie, ale rozmowy kwalifikacyjne były frustrujące w ciągu ostatnich kilku lat, kiedy nie mogę znaleźć ** żadnego ** tematu, który ludzie będą mielirozmowa o tym nie jest ciekawostką o frameworku, z którego ostatnio korzystali!
Jest artykuł o rozwoju opartym na przepełnieniu stosu - https://dzone.com/articles/stack-overflow-driven-development-sodd-its-really
Mam dokładnie jedno duże pytanie O w moim zwykłym zestawie pytań do rozmowy kwalifikacyjnej, ale po nim pojawia się pytanie, w jaki sposób kandydat spodziewałby się, że ten algorytm będzie grał na prawdziwym nowoczesnym procesorze PC?To, czego szukam, to świadomość przewidywania gałęzi, strasznych kosztów pominięć pamięci podręcznej i podobnych rzeczy.Czy kandydat rozumie, że duże O nie jest jedyną rzeczą, która ma znaczenie.To przerażające, ilu kandydatów albo nie może odpowiedzieć na pierwszą część, albo źle upada na temat różnicy między teorią CS a prawdziwymi maszynami.
PhD
2019-01-11 10:15:51 UTC
view on stackexchange narkive permalink

jeśli jest tak dobry, jak sugeruje jego rekomendacja

To dlatego, że Twoje oczekiwania są zbyt wysokie zarówno dla kandydata, jak i przełożonego. List polecający, jeśli jest bezstronny, oznacza jedynie, że poziom kandydata jest zadowalający w stosunku do osoby, która napisała list. Nie oznacza to, że kandydat jest zręczny w stosunku do Twoich standardów .

Na przykład 14-letnie dziecko, które potrafi skompilować program Hello-World, może zaimponować swojej babci. ale nie ty.

Prawdopodobnie masz lepszą wiedzę techniczną niż przełożony lub przynajmniej ktoś, kto ma większe oczekiwania co do doskonałości.

Kilisi
2019-01-11 10:23:34 UTC
view on stackexchange narkive permalink

Czy to możliwe, że są ludzie, którzy potrafią dobrze kodować przed ekranem komputera, ale kiedy przychodzi do pisania rozwiązań programistycznych na papierze, mają problemy?

Możliwe są różne rzeczy, od blokady psychicznej po oszukiwanie. Ale żaden z nich nie może być znany na pewno i żaden nie dotyczy tego, co musisz zrobić, czyli ocenić kompetencje i przydatność. Wszystko inne jest równe, CV kandydata powinno znajdować się na samym dole stosu.

Rekomendacje są tylko papierowe, lepsze niż nic, ale nie można na nich w pełni polegać. Widziałem wspaniałe rekomendacje udzielane osobom, których osoba polecana ledwo zna lub w ogóle nie zna.

Rishi Goel
2019-01-11 11:50:57 UTC
view on stackexchange narkive permalink

Testy papierowe nie są złe i są prawie standardem w całej branży w regionie, z którego pochodzę. Moją sugestią byłoby poproszenie kandydata o napisanie algorytmów, a nie faktycznego kodu. Mogę kupić, że kandydat nie zna dokładnej składni. Ale powinni być w stanie zapewnić algorytmy / pseudokod.

Mogą wystąpić dwa potencjalne problemy.

  1. Kandydat może faktycznie oszukiwać.

  2. Kandydat zajmie więcej czasu na wykonanie zadania niż zwykle, co oznacza, że ​​spędza czas na czytaniu postów, w których występuje problem.

To sprowadza się do sposobu, w jaki zostałeś wychowany. W naszych czasach dużo uwagi poświęcano algorytmom i uczono nas pisać algorytmy na papierze. Zanim pojawiło się IDE, musieliśmy napisać kod w notatniku, co sprawiło, że trzymaliśmy się składni znacznie mocniej niż ktoś, kto nauczył się IDE. Właściwa składnia nie jest bardzo ważna, ale jeśli kandydat zmaga się do tego stopnia, że ​​moim zdaniem nie może odpowiedzieć na jedno pytanie, to kandydat musi popracować nad podstawami programowania. Są szanse, że będą mieli problemy i wykonanie zadania zajmie im dużo więcej czasu niż normalnie by się tego spodziewano.

Zanim pojawił się notatnik, istniały IDE.Chyba że mówisz o edytorze VI w systemie UNIX.Ponadto niektórzy z nas są starsze od GUI, ale klawiatura nadal jest łatwiejsza do zapisania niż papier.Testy papierowe są przestarzałe
Turbo Pascal został wydany w 1983 roku i był IDE.Bez zmiany programów można napisać program, edytować go, kompilować i uruchamiać.Był znacznie łatwiejszy w użyciu niż inne systemy programistyczne dla komputerów domowych.Kiedyś istniał system, który nie pozwalał ci napisać niepoprawnego składniowo programu Pascal, ale to sprawiało, że używanie go było bardzo trudne.
Na moich dwóch stopniach (Associate i Bachelor) w zakresie tworzenia oprogramowania nie mieliśmy ** ani jednego ** kursu z algorytmów.Wiele z nich zostało „osadzonych” w temacie, ale nigdy nie powiedziano wprost, że obecnie badamy algorytmy.Nigdy nie mieliśmy czegoś takiego jak nauka szybkiego sortowania, robienie btrees lub O-notacja i analiza.Chodziło o opracowywanie rozwiązań różnych problemów przy użyciu dowolnej metody, którą uznaliśmy za odpowiednią.Głównie za pomocą C.
Ertai87
2019-01-12 00:31:17 UTC
view on stackexchange narkive permalink

Wszystko, co kandydat mógłby zrobić bez Twojej opieki nad nim, ma mniej więcej zerowe znaczenie, jeśli chodzi o ocenę jego wyników. Wszystko, na co nie masz kontroli, może zostać użyte do oszukiwania. W szczególności dałeś mu test do zabrania do domu, a on zdał go. W międzyczasie, kiedy wyszedł z twojego biura, a kiedy wrócił, nie miałeś żadnej kontroli nad wszystkim, co robił. Powiedzenie „mógł wygooglować odpowiedzi” jest naprawdę najmniejszym z twoich problemów; mógł po prostu dać test swojemu kumplowi i poprosić go o napisanie dla niego wszystkich odpowiedzi na wszystko, co wiesz.

Oto kilka opcji, co możesz zrobić, jeśli jesteś zainteresowany tym kandydat:

  1. Poproś go o wykonanie odpowiedniego testu programistycznego w prawdziwym środowisku programistycznym. Konfigurujesz laptopa, konfigurujesz środowisko, konfigurujesz IDE, on robi kod. Uzyskuje pełny dostęp do autouzupełniania, jeśli tego chce, kompilatora, jeśli tego potrzebuje, itp. Następnie możesz sprawdzić, czy rzeczywiście potrafi kodować (zamiast pisać na papierze). W prawdziwym życiu każdy korzysta z wydajności zapewnianej przez nowoczesne IDE, więc nie ma powodu, aby tego nie robić podczas rozmowy kwalifikacyjnej.

  2. Zaproś kandydata z powrotem i podkreśl, że może użyj pseudokodu; jeśli napiszą „List.append” zamiast „List.add” lub nawet „dodaj X do listy”, to w porządku. Ponownie, w rzeczywistości w sytuacji zawodowej będą mieli dostęp do rzeczy, które mogą to za nich zrobić. Być może kandydat rozłączył się z pytaniem „czy uzyskałem właściwą składnię?” i nie mogę dać ci tego, czego naprawdę chcesz. Jeśli powiesz, że składnia nie ma znaczenia, możesz dostać to, czego chcesz.

  3. Zadawaj dociekliwe pytania. „Napisz FizzBuzz” tak naprawdę niewiele Ci mówi; po prostu powie ci, czy zapamiętał rozwiązanie FizzBuzz. „Wyjaśnij mi, jak napisać program wykonujący X” mówi o wiele więcej. W szczególności informuje cię, czy dana osoba ma zdolności umysłowe do zaprojektowania rozwiązania problemu, który wcześniej widziała lub nie. Jeśli nawet nie mogą Ci powiedzieć prostymi słowami (a „powiedzieć” Ci jest słowem operacyjnym, powinno to być ćwiczenie werbalne, aby uniknąć problemów takich jak dysgrafia lub dysleksja), jaki jest pierwszy krok do rozwiązania problemu, to jest czerwona flaga, której szukasz, aby wysłać je do domu.

gnasher729
2019-01-12 05:40:19 UTC
view on stackexchange narkive permalink

„Czy to możliwe, że są ludzie, którzy potrafią dobrze kodować przed ekranem komputera, ale kiedy przychodzi do pisania rozwiązań programistycznych na papierze, mają z tym problem?”

Absolutnie możliwe. Różni ludzie pracują na różne sposoby. Ich mózgi działają na różne sposoby. Niektórzy mają po prostu problemy z ręcznym zapisywaniem rzeczy.

Potrafię pisać rzeczy bez zastanawiania się nad procesem pisania, który przechodzi prosto z mojego mózgu na ekran. Pisanie na papierze jest trudniejsze. (Mówienie rzeczy jest o wiele trudniejsze, przekształcanie myśli w mowę pochłania duży procent mocy mózgu).

Więc jeśli chcesz obserwować ludzi, obserwujesz ich za pomocą narzędzi, do których są przyzwyczajeni, i tam widzisz, jak dobrze potrafią. Jeśli ktoś źle pisze na papierze i dobrze posługuje się IDE, zatrudnij go. I odwrotnie, nie rób tego.

Old_Lamplighter
2019-01-11 20:00:32 UTC
view on stackexchange narkive permalink

Mógłby mieć DYSGRAPHIA, tak jak ja. Albo autyzm lub cokolwiek innego, co mogłoby powodować problemy w zapisywaniu rzeczy.

Poza tym, jeśli nie zamierzasz mieć ludzi programujących segregator trzypierścieniowy, porzuć testy papierowe. Weź zapasowy laptop i przygotuj program aplikacyjny / test na ten temat.

Poza tym nie żyjemy w czasach, w których trzeba było przelewać książki i podręczniki oraz zapamiętywać wszystko. Języki programowania stały się znacznie bardziej złożone, dopracowane i rozwlekłe niż w czasach COBOL-a.

Mam wrażenie, że sprawy stały się prostsze, ponieważ to, co COBOL zrobił ze składnią, jest obsługiwane przez wywołania bibliotek we współczesnych językach.
gazzz0x2z
2019-01-11 17:58:03 UTC
view on stackexchange narkive permalink

Może się zdarzyć, że facet jest bardzo dobry ze swoimi narzędziami i bardzo zły bez nich. Albo może być tak, że facet jest po prostu oszustem, kradnąc na cudzej pracy i po prostu gromadząc wszystko, co znajdzie, bez większego zrozumienia.

Na koniec, niezależnie od odpowiedzi, wszystko sprowadza się do twoich konkretnych potrzeb . czy potrzebujesz kogoś swobodnie posługującego się jakimiś narzędziami? Ktoś, kto potrafi zakodować algorytm w języku COBOL, nawet jakby nigdy nie znał tego języka i nienawidzi kodowania proceduralnego? Wtedy bez względu na to, jak dobry może być ten facet, nie pasuje.

Czy potrzebujesz kogoś, kto składa kod, ponieważ większość ciężkiej pracy w Twoim sklepie jest wykonywana przez API, a najtrudniejszą częścią jest znaleźć sprytne interfejsy API i efektywnie z nich korzystać? W takim razie ten facet, jaki zły może być, naprawdę pasuje.

Zdecyduj o swoich potrzebach. Zdecyduj, dlaczego test papierowy jest istotny - czy nie. Zdecyduj, dlaczego test domowy (z możliwością zapytania o rozwiązania w Internecie) jest istotny - czy nie. Oto odpowiedź. Na wielu stanowiskach wystarczy ktoś, kto zadaje właściwe pytania w Internecie i jest wystarczająco wykwalifikowany, aby zebrać odpowiedzi w sensowny sposób. W przypadku niektórych innych stanowisk ten sam facet jest tylko obciążeniem.

Przemyśl ponownie, czego naprawdę potrzebujesz, i odpowiednio podejmij decyzję.

Dan
2019-01-12 01:38:37 UTC
view on stackexchange narkive permalink

Poprosił o cofnięcie pytań w celu uzyskania odpowiedzi, na co się zgodziłem. Następnego dnia przesłał mi w pełni poprawione rozwiązania. Wykonał zadania w IDE i udało mu się uzyskać poprawne wszystkie odpowiedzi.

Prawdopodobnie wydarzyły się dwie rzeczy:

  1. Wyszukał odpowiedź w Google. Prawdopodobnie usunęło to z przepełnienia stosu. Zapomniałem, kto napisał artykuł, ale pamiętam, że jedna osoba wspomniała, że ​​im bardziej rozbudowany / sprytny jest ich FizzBuzz, tym bardziej prawdopodobne jest, że wiesz, że wpisali w Google odpowiedź zamiast myśleć o niej z czubka głowy. Założenie jest takie, że ludzie, którzy rozumieją programowanie, nie musieliby szukać czegoś tak prostego jak FizzBuzz i wyszliby z najprostszą odpowiedzią.
  2. Myśli lepiej w IDE niż z długopisem i papierem. Mógłby również polegać na automatycznym uzupełnianiu IDE lub funkcjach wyszukiwania, takich jak w phpStorm lub msdn zintegrowanych z Visual Studio.

Zgadzam się z odpowiedzią Ertai87, że najlepszym sposobem jest podanie im prawdziwych światowy test. Ostatecznie celem testu FizzBuzz jest ustalenie, czy przynajmniej potrafią programować, ale to jest coś innego niż uzyskanie rzeczywistej pracy, wejście w kod i wprowadzenie odpowiedniego rozwiązania.

Barry Franklin
2019-01-12 02:04:36 UTC
view on stackexchange narkive permalink

Dla mnie osobiście programuję raczej dobrze (tak mi się wydaje); ale nigdy nie radziłem sobie dobrze z terminami, pojęciami ani wyjaśniając ludziom różne rzeczy, gdy zadawano mi pytania dotyczące programowania. Może to mieć coś wspólnego z tym, jak się nauczyłem lub jak myślę, nie wiem. Ale to nie znaczy, że nie jestem dobrym programistą.

Z drugiej strony widziałem wielu programistów, którzy potrafią wyjaśnić wszystkie koncepcje, znają wszystkie terminy i wydają się naprawdę słuszni, dopóki nie zabiorą się do kodowania i okazuje się, że są dość źli na to.

Jakiego rodzaju programistę byś chciał, kogoś, kto potrafi dobrze kodować, czy kogoś, kto potrafi dobrze mówić o kodowaniu?

Poza tym nie pamiętam nic bez Intellisense. Czy ludzie naprawdę myślą, że programiści mogą zapamiętać każdą metodę z każdego rodzaju każdego języka, z którym mają pracować?

Ponadto testy są głupie. FizzBuzz jest głupi. Daj mi zadanie, które mogę wykonać w IDE, na przykład jak bym pracował, gdybym pracował ... i naprawdę nie ma znaczenia, jak to zrobię, jeśli otrzymam to z powrotem i tego chcesz. Mogę używać Google, przepełnienia stosu, narożnika c # ... co to ma znaczenie? Nie-programista nie może programować, patrząc na przepełnienie stosu. Ktoś, kto nie jest programistą, nie znałby nawet właściwych pytań, które należy zadać, aby uzyskać odpowiedzi, których szuka.

Naprawdę powinieneś iść ze swoim przeczuciem, co z pewnością każe ci go zatrudnić.

Czy mogę zapytać, jakie prace programistyczne posiadałeś?Z mojego doświadczenia wynika, że jeśli pracujesz w zespole nad złożonym projektem, musisz ** zarówno ** umieć kodować, jak i wyjaśniać kolegom z zespołu, co robi twój kod.
@CharlesE.Grant Nie powiedziałem, że nie potrafię wyjaśnić, co robi mój kod.Chodzi mi o to, że nie mogę wyjaśnić koncepcji OOP w żaden sposób, który brzmi, jakby był poprawny.Albo czym jest polimorfizm.A jeśli musisz wyjaśnić komuś, co robi Twój kod, to znaczy, że nie zakodowałeś go poprawnie i / lub inni programiści nie potrafią czytać.Dobry programista powinien być w stanie spojrzeć na dobry kod i dowiedzieć się, co robi.
Chociaż jako programista zgadzam się z twoją odpowiedzią.Odpowiedź jest bardzo negatywna i brzmi jak wyładowanie frustracji w odpowiedzi.
Potrzebujesz ludzi, którzy potrafią dobrze kodować i rozmawiać o kodowaniu, chyba że zatrudniasz jedną osobę i nie zamierzasz zatrudniać innej.Ktoś, kto nie potrafi wyrazić podstawowych pojęć, jest o wiele mniej przydatny niż ktoś, kto potrafi.Ponadto testy, takie jak FizzBuzz, są przydatne jako szybki sposób na usunięcie całkowicie nieodpowiedniego.
Zgadzam się, że od programistów nie można oczekiwać, że będą pamiętać każdą metodę na każdej klasie w każdej używanej przez nich bibliotece.Ale nie potrzebujesz żadnych bibliotek do pisania FizzBuzz.Musisz napisać pętlę for i użyć operatora mod.FizzBuzz może być głupi, ale jeśli nie możesz napisać pętli for z czubka głowy, to nie jesteś programistą.
@Dan Jak powiedziałem, szybki sposób usunięcia całkowicie nieodpowiedniego.W zależności od jakości kandydatów może to być przydatne.
Lukali
2019-01-17 20:00:03 UTC
view on stackexchange narkive permalink

Istnieje możliwość, że oszukiwał na uniwersytecie, a jego staż polegał na tym, że pracował dla znajomego rodziny na wysokim stanowisku. Znam koleżankę, która ma dobry staż, jakkolwiek chce w tygodniu, ze względu na koneksje matki. Znam też kogoś, kto oszukał ich drogę na uniwersytet, a potem jeden rok na uniwersytecie zrobił ktoś inny.

Byłbym tutaj bardzo ostrożny, podałbym kolejny test z limitem czasu przez e-mail i poinformował go, że otrzyma go w określonym czasie i ma tyle czasu, aby go ukończyć. Jeśli naprawdę jest wszystkim, mogą zrobić coś znacznie trudniejszego niż programowanie na poziomie podstawowym.

user53651
2019-01-19 04:32:48 UTC
view on stackexchange narkive permalink

Daj mu więcej testów, ale tym razem użyj tablicy, aby nie różniła się tak bardzo od IDE. Jeśli nadal nie może tego zrobić, pomiń go.

Papierowe testy sprawdzają tylko, czy nie jest zbyt uczony - możliwość szybkiego przypomnienia sobie faktów, które zapamiętałeś, aby zwykle były w Twojej pamięci roboczej . Jeśli jesteś dobry w programowaniu, nie ma powodu, aby wiedzieć więcej niż motywy, ponieważ każdą dodatkową wiedzę, której potrzebujesz, możesz po prostu sprawdzić w Dokumentach. Powinieneś poświęcić moc swojego mózgu na naukę nowych technologii, a nie składni i podstawowych rzeczy, których po prostu nie używasz. Wielu programistów, z którymi rozmawiam, od czasów studiów nie poruszyło kwestii takich jak algorytmy sortowania. Testy papierowe powinny pozostać na uczelni, tam gdzie ich miejsce.

Fizz na tablicy jest o wiele łatwiejszy do rozwiązania, ponieważ możesz po prostu wymazać i wprowadzić poprawki w locie. Nie zawsze możesz tego zrobić z papierem. Specyfikacje projektowe również bardzo się zmieniają. Być może chcesz zobaczyć, jak twój programista robi coś innego, a może twój programista po prostu zrobił najłatwiejszą rzecz, jaką mógł mieć. Na papierze musiałbyś dokonać oceny punktów dokowania. Na tablicy możesz po prostu zmienić ich wymagania i zobaczyć, jak reagują, nie martwiąc się o nic.

Strader
2019-01-22 02:35:58 UTC
view on stackexchange narkive permalink

jest szansa, że ​​jest programistą inteligentnym w Google :)

https://www.hanselman.com/blog/AmIReallyADeveloperOrJustAGoodGoogler.aspx



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...