Jak mogę szybko usunąć kodery „kopiuj i wklej”? [Zamknięte]

15

Potrzebuję sposobu na odfiltrowanie CV osób, które po prostu kopiują i wklejają kod, a następnie mają nadzieję, że zadziała, i sprawdzą, czy to działa. Wszystko to dzieje się bez zrozumienia (lub starania), aby zrozumieć resztę kodu w systemie.

Jasne, że wiem, że kopiowanie i wklejanie kodu jest częścią uczenia się nowego obiektu, kontroli itp. ... ale jak można stwierdzić, czy stanowi to 70% (lub więcej) ich kariery programistycznej?

Spotkałem ludzi z wyższego szczebla, których umiejętności są tak przestarzałe lub nieistotne dla projektu, że wszystko, co robią, to Google, kopiowanie, a następnie wklejanie kodu bez myślenia o rozwiązaniu jako całości. W rezultacie mamy niedopasowanie JSON, AJAX, callbacki, ASMX, WCF i postbacki w tym samym projekcie. Oczywiste jest, że nie ma spójności ani logiki w przypadku stosowania każdej technologii.

W najgorszym przypadku ten typ programisty stwarza problemy bezpieczeństwa i wektory do ataku.

Pytanie

Jak poleciłbyś odfiltrować osoby o słabym doświadczeniu programistycznym? Czy mogę to zrobić na poziomie wznowienia? Jeśli nie, jak mam to zrobić podczas wywiadu.

goodguys_activate
źródło
Wygląda na to, że potrzebujesz architekta technologii do swojego projektu. Ktoś musi wprowadzić prawo WRT do zastosowanych standardów, zastosowanych technologii i odejść od idei tygodnia dla zwierząt.
szybko_now

Odpowiedzi:

47

Spotkałem ludzi z wyższego szczebla, których umiejętności są tak przestarzałe lub nieistotne dla projektu, że wszystko, co robią, to Google, kopiowanie, a następnie wklejanie kodu bez myślenia o rozwiązaniu jako całości. W rezultacie mamy niedopasowanie JSON, AJAX, callbacki, ASMX, WCF i postbacki w tym samym projekcie. Oczywiste jest, że nie ma spójności ani logiki w przypadku stosowania każdej technologii.

Nie sądzę, że umiejętności twoich programistów stanowią problem. Twój problem leży gdzie indziej, być może lider zespołu lub architekt, który nie ma pewności siebie, by „zachęcać” do lepszych dyscyplin kodowania, lub zespół zarządzający, który nie rozumie znaczenia zarządzania długiem technicznym i nie daje programiści czas i zasoby, aby to zrobić. Czy Twoja firma przechowuje recenzje kodu?

Problemem może być przywództwo, a nie programiści kopiuj-wklej.

Robert Harvey
źródło
16
+1 Leadership may be the problem, not copy-paste developers. To była dokładnie moja interpretacja.
George Marian
Poważnie. Coś jest poważnie AWOL w dziale komunikacji.
MIA,
+1: To samo dotyczy komentarzy George'a Mariana. Bardzo dobrze powiedziane, Robert.
Jim G.
to dobrze. Mam nadzieję, że dotrze tak samo jak ankieterów, rekrutujących menedżerów.
Saar
wydaje się, że istnieje duża zgoda co do tej odpowiedzi, ale czy ludzie z „wyższego poziomu” nie dyktują funkcjonalności, a następnie implementacja jest pozostawiana programistom, prawda? Mam na myśli, że facet na wyższym poziomie może powiedzieć „Hej, nie używaj hordy technologii, po prostu użyj <tych dwóch>”, ale deweloperzy kopiowania wklejek zamierzają kopiować! Czy się mylę ?
Chani
13

Aby wyeliminować programistów, którzy nie mogą programować, należy ustawić praktyczne ćwiczenia programistyczne w ramach fazy kontroli lub fazy wywiadu. (To drugie jest prawdopodobnie lepsze, ponieważ można kontrolować środowisko, aby zapobiec oszukiwaniu.)

Ale nie sądzę, żeby to naprawdę rozwiązało twój problem.

... mamy niedopasowanie JSON, AJAX, callbacki, ASMX, WCF i postbacki w tym samym projekcie. Oczywiste jest, że nie ma spójności ani logiki w przypadku stosowania każdej technologii.

IMO, prawdziwym problemem jest to, że Twój zespół nie wykonuje wystarczającej wewnętrznej oceny kodu i nie opracowuje „poradnika” preferowanych rozwiązań znanych problemów. Jest to częściowo kwestia kultury, częściowo kwestia komunikacji, a (prawdopodobnie) częściowo kwestia terminów realizacji projektu.

Inną kwestią jest to, że projekt zwykle ma długą żywotność, a podczas tego okresu pojawią się nowe technologie / techniki, a stare prawdopodobnie nie wypadną z łask. Jeśli chcesz uniknąć korzystania z technologii / technik „śniadania dla psów”, musisz:

  • ustalić i egzekwować listę technologii / technik, które mogą być stosowane w przypadku każdego projektu, lub
  • włóż wysiłek w odświeżenie technologii wykorzystywanych w projekcie.
Stephen C.
źródło
1
Jeśli nie przeprowadzasz testu pisemnego podczas wywiadu, możesz strzelać sobie w stopę. Miałem je u moich czterech ostatnich pracodawców i często byłem zaskoczony, jak proste były niektóre pytania. W jednym miejscu powiedziano mi, że inny kandydat odszedł bez zaliczenia testu, płacząc.
Adrian J. Moreno,
1
Absolutnie zgadzam się, że test pisemny podczas rozmowy kwalifikacyjnej jest jedynym sposobem, aby upewnić się, że twoi rekruci naprawdę mają dobre umiejętności programistyczne. Ale głównym celem mojej odpowiedzi jest to, że same umiejętności programistyczne nie są wystarczające do rozwiązania problemu SO.
Stephen C
Został złapany przez licznik edycji. Całkowicie zgadzam się, że standardy i przegląd są konieczne. Niedawno opublikowaliśmy nowy dokument standardów kodowania i w połączeniu z kilkoma nowymi procesami przeglądu kodu mieliśmy znacznie mniej błędów w kontroli jakości. Jednym z moich następnych celów jest stworzenie wewnętrznego zespołu szkoleniowego.
Adrian J. Moreno,
10

Zatrudnij ludzi na 3-miesięczny okres próbny. Zwolnij ich, jeśli będą do bani.

Jeśli nie INSPEKCJA, nie możesz OCZEKIWAĆ. Recenzje kodu, narzędzia audytu. Serwer CI może uruchomić je automatycznie.

Zadawaj prawdziwe pytania podczas wywiadów, tak jak pytania z prawdziwego kodu.

Poproś, aby napisali kod na tablicy.

Jeśli jesteś kierownikiem nietechnicznym, nie masz uprawnień, aby to oceniać.

Jeśli jesteś niewykwalifikowany, poproś o pomoc renomowanego, profesjonalnego konsultanta, który przeprowadzi testy. Zapytaj swoich obecnych ludzi i konkurentów biznesowych, czy znają 100-krotnie produktywną osobę. Zapłać im za rozmowę.

Jeśli chcesz prowadzić szpital bez szefa gabinetu, idź dalej.

Tim Williscroft
źródło
mówisz o doświadczonym? Dlaczego należy odejść z pracy i dołączyć do miejsca, w którym potrzebują 3 miesięcy, aby pozwolić im być do bani lub nie :) Dlaczego są zasoby ludzkie?
Saar
Mówię o doświadczonych, kompetentnych ludziach. Na dłuższą metę są tańsze. Zasoby ludzkie uniemożliwiają pozwanie Cię za naruszenie prawa pracy. Oryginalnie miał tam robić drażliwe rzeczy dla menedżerów numerycznych Henry'ego Forda. Prawdziwa historia, spójrz na nią. Jeśli już wiesz, że ta osoba dobrze sobie poradzi, cóż, jesteś w tym lepszy ode mnie. Osoba zmieni pracę, ponieważ jesteś świetny do pracy, jest świetne środowisko pracy, a po okresie próbnym dostaje grubą premię. Jeśli zostaną zwolnieni na stałe, firma wypłaci dodatkowe trzy miesiące. Coś w tym stylu
Tim Williscroft,
9

Ostatnie kilka lat spędziłem na rozmowach z ludźmi i stwierdziłem, że 90% kandydatów po prostu nie może programować. Moja technika rozmowy w celu ustalenia programowania polega na udzieleniu kandydatowi zbyt prostego streszczenia i pozwoleniu mu rozwiązać go za pomocą markera i tablicy.

Tryby awarii obejmują:

wymyślanie projektu, a następnie wdrażanie czegoś innego. Ci kandydaci są odrzucani, ponieważ są niebezpieczni w zespole. nie postępuj zgodnie ze specyfikacjami, pisz błędy itp ...

Nie można wymyślić projektu. Zaskakująca liczba „doświadczonych” kandydatów potrzebuje specyfikacji obejmującej projekt wdrożenia.

nie znając języka programowania, mimo że CV twierdziło o doświadczeniu.

Nie zadawanie dodatkowych pytań w celu wyodrębnienia pełniejszych specyfikacji.

Brak możliwości wyjaśnienia decyzji projektowych. Ten jest ważny. Jeśli ktoś nie umie wyjaśnić, dlaczego, to za każdym razem zrobi to inaczej, a spójność zostanie utracona.

Efektem końcowym było to, że spędziłem dużo czasu na przeprowadzaniu wywiadów i niezbyt częstej rekrutacji. jednak zespół programistów był bardzo dobry i miał pełny szacunek dla całej firmy i dostarczył!

Michael Shaw
źródło
Twoje doświadczenie brzmi całkiem normalnie.
szybko_now
5

Sugerowałbym FizzBuzz, o którym wspomina Jeff Atwood w poście na stronie http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Napisz program, który drukuje liczby od 1 do 100. Ale dla wielokrotności trzech drukuj „Fizz” zamiast liczby i dla wielokrotności pięciu drukuj „Buzz”. Dla liczb będących wielokrotnością zarówno trzech, jak i pięciu drukuj „FizzBuzz”.

Jetti
źródło
9
-1. FizzBuzz wykrywa całkowitą liczbę idiotów. Aby pisać i kopiować, nie możesz być kompletnym idiotą.
back2dos
@ back2dos - Powinieneś już porzucić „całkowitych idiotów”, zanim dotrzesz do rozmowy osobiście. FizzBuzz sprawia, że ​​ktoś myśli o problemie i jak go najlepiej rozwiązać. To nie jest trudne, więc powinno ujawnić tych, którzy kopiują i wklejają, ponieważ ci, którzy kopiują i wklejają, nie uczą się „dlaczego” za tym.
Jetti
3
+1. FizzBuzz wykrywa więcej niż idiotów. Wykrywa także osoby, które kompensują brak umiejętności technicznych ponadprzeciętnymi umiejętnościami społecznymi. Ci ludzie mają duże szanse na zdanie pierwszego testu przesiewowego. Np. Mogą bardzo dobrze legitymować się dyplomami.
MSalters
1
Cóż, pytacie MNIE fizzbuzz, a ja natychmiast odchodzę. :) IMO w kategorii juniorów nie jest zbyt przydatne, ponieważ i tak będziesz trenować facetów, aw kategorii seniorów jest to bezużyteczne + ofensywa. powinieneś być w stanie podnosić ludzi sprytnych i zadawalających się innymi metodami. Kodowanie w pytaniach podobnych do miejsca jest wskazówką IME firm zajmujących się hodowlą łasic. Jeśli naprawdę interesują mnie umiejętności kodowania kogoś, zadaję pytanie dotyczące przeglądu kodu . I uzyskaj wszystkie odpowiednie odpowiedzi bez frustracji.
Balog Pal
@BalogPal: Śmiałbym się i zaczynałem pisać jak szalony przez dwie minuty, a potem wstydzę się samego siebie, jeśli nie skompiluje się, nie uruchomi i nie zadziała za pierwszym razem.
gnasher729
2

Zadaję trzy pytania do rozmowy kwalifikacyjnej

  1. Napisz połączoną listę, która może przechowywać niektóre typy liczbowe w Javie bez importowania czegokolwiek ze środowiska kolekcji
  2. Napisz kod pokazujący, jak możesz dodawać / usuwać węzły z tej listy
  3. Napisz kod pokazujący, w jaki sposób możesz uzyskać maks. / Min z tej listy

Widziałem ludzi, którzy ukończyli to w 5 minut i widziałem, jak ludzie walczą przez 30 minut, zanim się poddają.

sal
źródło
Pierwszy wymóg powinien być bardziej szczegółowy. java.util.LinkedList l = new java.util.LinkedList()nic nie importuje, ale z pewnością korzysta z wbudowanych kolekcji.
Barry Brown,
To jest uczciwe pytanie, szczególnie dla absolwentów. Jeśli zwróciłeś na to uwagę lub poświęciłeś czas na programowanie, powinno to być prawie banalne. Zakładam, że nie musi to być dokładne, ale wystarczająco blisko.
Bryan Harrington,
3
@Bryan, nikt jeszcze tego nie próbował. I naprawdę nie dbam o to, czy odpowiedź jest w 100% poprawna. Tyle tylko, że rozumieją problem i są w stanie podejść do niego w kompetentny sposób. Najczęstszym problemem jest problem polegający na tym, że dodawanie / usuwanie nie działa na początku lub na końcu listy. Polecam zatrudnienie ludzi na podstawie ich reakcji na mnie, zwracając na to uwagę.
sal
2

Nie możesz tego zrobić na poziomie wznowienia, ponieważ zasadniczo mają nieskończony czas na napisanie tego, ale możesz to zrobić podczas rozmowy telefonicznej, jeśli zadasz kilka pytań, które wymagają technicznej wiedzy na temat tego, co robią. To daje zarówno odpowiedź (dobrą lub złą), jak i ile czasu zajęło im dotarcie.

Podczas rozmowy poproś, aby napisali kod. Jest to jedyny sposób, aby stwierdzić, czy potrafią programować naprawdę. Uprość problem, daj mu komputer z połączeniem internetowym, a IDE, którego używasz, jest zainstalowane, pozwól mu zadać dowolne pytanie (oprócz gimme-hte-codez) i obserwuj, jak działają.


EDYCJA: Do analizy pośmiertnej wydaje się, że PMD ma wykrywacz kopiuj / wklej, aby go znaleźć: http://pmd.sourceforge.net/cpd.html


źródło
Zgodziłem się z tobą do „... i IDE, którego używasz”. Kodery zwracają szczególną uwagę na nasze środowiska pracy i raczej nie znają $ random-IDE. Koduję od ponad 20 lat i marnuję pierwsze 10 minut, próbując wymyślić, jak pracować z IDE, jeśli rzucisz je we mnie. Korzystam z edytora (bluefish podczas robienia rzeczy webby, emacs do wszystkiego innego) i narzędzi wiersza poleceń do wszystkiego innego (kontrola wersji, kompilacja w razie potrzeby itp.). W ogóle nie używam debugerów. Nauczono mnie, że jeśli potrzebujesz debuggera, robisz to źle: po to jest kod debugowania!
HedgeMage
@HedgeMage, nie powiedziałem, że musieli go użyć ... Widząc, jak dana osoba radzi sobie z tą sytuacją, jest bardzo wymowna. Czy wystarczy notatnik + javac? Czy pobiera i instaluje NetBeans? Czy zapyta, jak wykonać X w twoim IDE, zhakować trochę i poprosić o Y i Z?
@HedgeMage, kod debugowania jest świetny, jeśli możesz z wyprzedzeniem określić wszystkie możliwe rzeczy, które możesz chcieć wiedzieć. Debugery są przydatne w przypadkach, w których musisz zobaczyć odpowiedzi na pytania, aby ustalić następne pytanie, które wraz z kodem debugowania wymaga nowego pliku binarnego, uruchom ponownie i przejdź ponownie do lokalizacji.
1
@ Thorbjørn: To prawda, że ​​moje rachunki były opłacane przez pracę w tłumaczonych językach od kilku lat, ale nawet w czasach kodowania C odrzuciłem debugera na rzecz dobrego kodu do debugowania. Być może to po prostu z mojej strony uprzedzenie: poszedłem na studia z mnóstwem ludzi, którzy nigdy nie nauczyli się kodować per se - po prostu spakowali coś, a potem naprawili to, o czym krzyczał debugger, aż „trochę” zadziałało. Nie znoszę tego rodzaju kodowania slipshod. Nie chciałem sugerować, że debuggery są złe, tylko że one i inne funkcje IDE nie należą do wszystkich przepływów pracy.
HedgeMage
@HedgeMage, zgadzam się, że podejście do debugowania „pobij to, aż zadziała” nie jest dobre, ale stwierdzenie, że debugery są złe, jest być może zbyt szeroką konkluzją.
1

Prosty

  • (1) Zamknij je w pokoju + wolny tlen.
  • (2) Daj im komputer z połączeniem internetowym + IDE + dostęp do żywności.
  • (3) Mieć wireshark lub podobną metodę rejestrowania całego ruchu przychodzącego i wychodzącego.
  • (4) Daj mu średnie zadanie.
  • (5) Sprawdź cały ruch HTTP, ukończenie przypisania.
  • (6) Jeśli podmiot skopiował duże fragmenty kodu źródłowego, zakończ Temat ...

Edytować:

Jak zauważono autorofthings7, w praktyce można zrobić zrzut wideo (zrzut ekranu).

Ciemna noc
źródło
Powieść, ale ostatecznie niepraktyczna.
Robert Harvey
... lub po prostu przechwyć wideo, zobacz postęp logiki. Obserwuj piękno (lub chaos).
goodguys_activate
1
zakończyć Temat? Odciągając darmowy tlen? Niechlujny!
@ Thorbjørn: Nie tak niechlujny jak strzelający sobie w stopę po skopiowaniu dużych fragmentów kodu źródłowego.
Joe D,
1
Ci, którzy nie korzystają z Internetu na swoją korzyść, są zablokowani we wczorajszych trybach. ZAWSZE zakładam, że są to dla mnie dobre przykłady, bez względu na to, jak banalne jest to pytanie. Nie kopiuję i nie wklejam, oglądam dobre przykłady i stosuję najlepszą technikę. Jestem programistą z pełnym stosem, co oznacza, że ​​jestem generalistą, a nie specjalistą i polegam na reszcie świata. Wyraźnie grzeszne!
śmieciowy
1

Jeśli chcesz „wyeliminować” słabych programistów, możesz wypróbować na przykład Matrycę kompetencji programisty (przydatna, ale raczej nie dotyczy wszystkich możliwych obszarów - oczywiście możesz stworzyć własną) lub codility.com (zadania są bardzo dobre i oszczędza dużo czasu).

Ogólnie rzecz biorąc, zatrudnienie dobrych programistów jest trudne i często wymaga wielu lat praktyki. Możesz założyć własną bazę danych pytań do wywiadu, nie tylko pytając o kodowanie, ale także matematyki, logiki, nie wspominając o pytaniach motywacyjnych.

Wojciech Sroczyński
źródło
0

Powiedziałbym, że problem z twoimi kandydatami nie polega na tym, że w ogóle nie mogą programować, ale że nie mają poczucia, że ​​używają odpowiedniego narzędzia do pracy. Moja sugestia to pytanie na temat eseju, w którym otrzymaliby wysokie wymagania dotyczące nowego systemu i poproszeni o dostarczenie architektury i uzasadnienie wyboru komponentów. Ale zachowaj FizzBuzz dla kandydatów, którzy nie mogą w ogóle kodować bez przeglądarki.

Larry Coleman
źródło