Jak powinna wyglądać moja „próbka kodu”? [Zamknięte]


24

Właśnie miałem całkiem niezły wywiad telefoniczny (na stanowisko związane z CakePHP, ale nie jest to szczególnie ważne w przypadku pytania). Osoba przeprowadzająca wywiad była pod wrażeniem mojego CV i osobowości. Na koniec jednak poprosił mnie o przesłanie do mnie e-maila z próbką kodu z mojego istniejącego projektu roboczego: „aby sprawdzić, czy nie jesteś potwornym programistą, ha ha!”

Nie martwię się zbytnio, że mój kod nie może stać na własnych nogach, ale jestem raczej programistą pośrednim niż ekspertem. Jakie oczywiste pułapki powinienem upewnić się, że próbka mojego kodu nie wpadnie, na wypadek, gdyby wykluczyli mnie na miejscu? Po drugie, i jest to prawdopodobnie trudniejsza część pytania, na jakie funkcje w przykładowym kodzie będą tak imponujące, że natychmiast sprawią, że będziesz o wiele bardziej przychylnie nastawiony do programisty?

Wszystkie pomysły i sugestie mile widziane!


2
Czy były jakieś wymagania dotyczące próbki kodu do wysłania? Wydaje się raczej bezcelowe, każdy może skopiować / wkleić piękny kod z sieci. Chyba próbują pozbyć się ludzi, którzy nie mogą nawet dostać tego prawo ...
FrustratedWithFormsDesigner

5
Tylko dla kopnięć możesz wysłać skrypt Perla, który ma kształt jego / jej imienia ...;)
FrustratedWithFormsDesigner

2
@thesunneversets: Sądzę więc, że absolutnie wspaniały kod źródłowy z twoich osobistych projektów jest niedostępny ...;) Poważnie, można to łatwo sfałszować. I czy twój obecny pracodawca jest w porządku, gdy podajesz reprezentatywną próbkę kodu źródłowego? Czy to w porządku, jeśli część kodu została napisana przez współpracownika (być może plik z czasem przewijał się między kilkoma osobami)?
FrustratedWithFormsDesigner

2
Implikacje etyczne są trochę niepokojące ... ale tylko trochę. Nie sądzę, że wpadam w pułapkę szpiegostwa przemysłowego. Jeśli chodzi o współpracowników, niestety tylko dwie osoby dostały tę bazę kodów, a kod tego drugiego faceta był wielkim bałaganem, więc jestem całkiem sam! :)
thesunneversets

4
@thesunneversets, pod warunkiem, że kod pracodawcy jest nie tylko nieetyczny, w wielu miejscach jest nielegalny. Nie rób tego.
HLGEM

Odpowiedzi:


17

Chciałbym zobaczyć czysty kod :

Wyczyść kod : kod oprogramowania, który jest poprawnie sformatowany i zorganizowany, aby inny koder mógł go łatwo odczytać lub zmodyfikować.

To znaczy:

  • Funkcjonalność - niektóre proste elementy funkcjonalności, które nie są trywialne (wiązka pobierających / ustawiających nie pokazałaby, że cokolwiek wiesz)
  • Spójny, czysty styl - popularny lub przynajmniej powszechny styl obudowy, wgłębienia, odstępów i wsporników
  • Dobre nazewnictwo - nazwy jakościowe - nie używaj, ichyba że jest to jedyna wartość przyrostowa. Nie używaj nonsensownych nazw zmiennych.
  • Inne atrybuty czystego kodu - dobre praktyki w zakresie sprawdzania błędów, warunków, pętli, metod wygody lub metod użyteczności oraz dobra separacja obaw (między metodami). To dobry moment, aby być w 100% SUCHYM - bez powtórzeń!

Chcesz wysłać im coś wystarczająco złożonego, aby było interesujące, ale wystarczająco czyste, aby dobry programista niemal natychmiast zrozumiał, co robi.

Niektóre z powyższych komentarzy wydają się dotyczyć tego, jak łatwo można to sfałszować. * Jeśli chcesz się przed tym zabezpieczyć, prawdopodobnie wyślij krótki opis celu i historii kodu w wiadomości e-mail.


* Przynajmniej jeśli ankieter zapytałby z góry o wcześniejsze projekty, a następnie poprosił cię o próbkę z tego projektu i zapytał, co wymagało od ciebie napisania lub jak ewoluował, myślę, że proces byłby dość kłamliwy. Myślę, że większość kandydatów, którzy będą leżeć będą wykazywały problemy w innych dziedzinach, w każdym razie.


Jeśli poprosisz osobę o wyjaśnienie kodu, a on nie może tego nie napisać lub dostosował kod innej osoby w zakresie konserwacji, nie zadając sobie trudu, aby go najpierw zrozumieć. Zdumiewające dla mnie, ilu ludzi rozmawiałem przez lata, którzy nie potrafią wyjaśnić własnej próbki.
HLGEM

Dodaj komentarze, na wypadek gdyby Twój marker nienawidził czystego kodu.
Ewan

9

Kiedy szukałem pracy, rozwiązałem wiele pytań konkursowych dotyczących programowania ACM w kilku różnych językach i od tego czasu wykorzystuję je do próbek kodu. Myślę, że stworzyli dobre przykłady kodu, ponieważ:

  • Rozwiązali trudne problemy
  • Problem nie wymagał dużej ilości kontekstu, a także łatwego zadawania pytań
  • Napisany kod nie wiąże się z żadnym ryzykiem IP.
  • Każdy problem może istnieć w jednym pliku i często nie jest zbyt długi, więc każdy powinien mieć łatwą kompilację i przetestować swoje rozwiązanie oraz może korzystać z danych testowych z pytań.
  • Pokazuje, że możesz podzielić skomplikowany problem na mniejsze części.
  • Jeśli zostaniesz zapytany o sposób działania któregoś z aspektów swojego rozwiązania, będzie to świetna okazja, aby pokazać, że wiesz, o czym mówisz, zwłaszcza jeśli ma on wiele lat, ale możesz szybko rozszyfrować, co się dzieje.

Następnie tworzony kod powinien być przejrzysty, spójny, łatwy do odczytania i zrozumiały.

I wreszcie:

  • Warto je rozwiązywać dla zabawy i jest to dobra praktyka.

To świetne rozwiązanie. Zamierzam to zrobić. Czy były jakieś pytania, które najbardziej Ci się podobały?
zkent

1
Jako komentarz ode mnie, uważam, że posiadanie próbki kodu z jednym plikiem niekoniecznie jest świetnym pomysłem, chyba że ubiegasz się o stanowisko w celu optymalizacji kodu lub algorytmów. Kod z pewnością nie powinien być ogromny, ale powinien być w pewnym stopniu reprezentatywny dla tego, co faktycznie można osiągnąć (np. Jeśli możesz napisać dobry kod OO i podzielić kod na moduły w rozsądny sposób, powinien to wykazać).
Namey

6
  • Powinien on kompilować / interpretować bez błędów i ostrzeżeń na najwyższym poziomie ścisłości.
  • Nie powinien to być kod, który piszesz codziennie. Spraw, by był wyjątkowy i interesujący, aby było oczywiste, że go nie skopiowałeś / wkleiłeś.
  • Powinien mieć kilka interesujących decyzji projektowych z komentarzami wyjaśniającymi, w jaki sposób / dlaczego je podjąłeś.
  • Wydrukuj nie więcej niż 2-3 strony.
  • Powinien być w języku, o który się ubiegasz.
  • Nie powinien boleć mojego mózgu, gdy czytam go po raz pierwszy. Poproś znajomego, aby to przejrzał lub opublikował w widoku kodu.

3

Cóż, gdybym przeprowadzał z tobą wywiad, chciałbym zobaczyć twój kod.

Czystość jest dobra, rozwiązywanie problemów jest dobre, ale prawdziwy kod jest lepszy. Dobry programista wie, kiedy został oszukany przez innego programistę, więc pewność siebie może spaść.

Czytanie kodu innej osoby jest jak taniec podczas uprawiania seksu: wiesz, kiedy jest to prawdziwa rzecz, a jeśli druga osoba ją oszuka, w końcu nastąpi katastrofa. (właśnie zdałem sobie sprawę, że prawdziwi frajerzy nie umieją tańczyć)

Zaufaj sobie i swoim umiejętnościom kodowania . Chyba że naprawdę znasz swojego ankietera, nie możesz przewidzieć, czego on oczekuje od twojego stylu / umiejętności kodowania.


10
Uwielbiam to, że nie sądzisz, że frajerzy potrafią tańczyć, ale jesteś pewny ich sprawności seksualnej! : D
thesunneversets

Nie, sam widziałem zbyt wiele katastrof ... :)
Machado

W mojej szkole jedynymi osobami, które pojawiają się na lekcje tańca towarzyskiego / bale, są inżynierowie.
Eva

Aby być bardziej dokładnym, powinieneś zamienić seks na odniesienia do gier :)
zkent

2

Uważaj również, aby NIE był to kod twojego obecnego pracodawcy (są jego właścicielami, których nie posiadasz, i gwarantuję, że nie spodoba ci się to, że je udostępniasz). Weź coś, z czego jesteś dumny i przerób to na własną rękę, aby nie było specyficzne dla pracodawcy (pozbyć się odniesień do tabel baz danych lub nazw serwerów itp.). Cokolwiek robisz, nie przesyłaj kodu, który zawiera błędy lub jest słabą techniką dla tego typu kodu (prawdopodobnie odrzuciłbym osobę, która przesłała kursor, gdy operacja na zestawie byłaby prostsza i działałaby lepiej podczas przeglądania kodu SQL. Istnieją podobne techniki dla innych języków, które są w stanie rozwiązać jeden stosunkowo rzadki problem, którego można użyć w przypadku innych, bardziej powszechnych problemów, ale nie są najlepszym wyborem dla tych innych problemów. Czy to zdanie miało sens?)


Zgadzam się, całkowita przeróbka, aby nie zawierała już żadnych informacji specyficznych dla pracodawcy, wydaje się dobrym pomysłem. Etyka jest ważna - dzięki za wskazówkę!
thesunneversets

0

Dodałbym drugi post z Renesis na temat czystego kodu, ale dodałbym do listy dostarczającej wysokiej jakości i dobrze udokumentowane testy jednostkowe do przesłanego kodu. Dobry programista powinien pisać testy jednostkowe dla swojego kodu.


0

Według jednej opinii osoby, która prosi o próbki kodu podczas oceny kandydatów, istnieje kilka funkcji wysokiego poziomu (treść kodu) i kilka funkcji niskiego poziomu (struktura kodu). Funkcje wysokiego poziomu:

  1. Tożsamość : smak kodu. Jeśli rozliczasz się jako programista UI / HCI, chcę zobaczyć dobry wygląd / wyczucie czegoś wizualnego po uruchomieniu. Jeśli jesteś konstruktorem baz danych, chcę zobaczyć coś interesującego z reprezentacją danych lub analizą. Próbka powinna być czymś, z czego jesteś dumny . Jeśli nie masz co najmniej jednego z nich, nie masz tożsamości.
  2. Dojrzałość : Czy zmieniasz strategie dla różnych problemów? Czy rozwiązujesz ciekawe problemy? Czy kod lub podejście można łatwo rozszerzyć na podobny problem? Z drugiej strony, czy mam wrażenie, że patrzę na członka gminy kultowej?
  3. Komunikacja : czy kod łatwo wyjaśnia, co robi i dlaczego? Nie oznacza to, że kod musi być prosty. W rzeczywistości jest to bonus, aby skomplikowany kod był łatwy do zrozumienia.

Aspekty niskiego poziomu są prostsze:

  1. Styl : kod powinien być czysty, spójny (zgodny z ustalonymi wytycznymi) i dobrze udokumentowany.
  2. Pakowanie : Powinno być co najmniej krótkie readme, wersja do uruchomienia i testy do uruchomienia. Plik Readme powinien mi powiedzieć, jak uruchomić dwa ostatnie, a także dlaczego demonstrujesz ten konkretny przykładowy kod.
  3. Język (i) : zazwyczaj pytam kogoś o próbkę w języku dla tego stanowiska, a także tego, w którym czują się najsilniejsi. Daje dobry obraz obecnych pułapów danej osoby.

Dla dobrego kandydata oczekuję, że próbka będzie: A) Kuloodporna, mała próbka lub B) Dobra część większego interesującego projektu (np. Moduł z osobistego repozytorium Github). Oczekuję, że będą to projekty osobiste lub akademickie. Jeśli wyślą jeden z płatnego projektu, spodziewam się, że otrzymali pozwolenie na jego użycie. Jeśli nie dostanę tej notatki, odetnę ich od kandydatów (słaby kandydat) lub zapytam o to podczas rozmowy kwalifikacyjnej (silny kandydat). Brak pozwolenia byłby wielką czerwoną flagą (prawdopodobnie nie do pokonania). Dla zaawansowanego kandydata spodziewam się wyłączenia odpowiedzialności, stwierdzając, że niektóre z ich najlepszych próbek źródłowych nie mogą zostać pokazane, ponieważ zostało to wykonane w ramach ich pracy. Spodziewam się jednak, że będą dumni z tego, dlaczego są dumni z tego nieukrywalnego projektu i jak kochają go jak dziecko.

Wreszcie, o ile niektórzy twierdzą, że „Och, ktoś może po prostu pobrać próbkę kodu z Internetu”, kontrargumentem jest to, że większość ludzi, którzy nie rozumieją kodu dobrej jakości produkcji, również go nie rozumie, kiedy go widzi. . Poza tym zawsze można Google wyróżnić linię do sprawdzenia kodu. Ponadto, w najlepszym wypadku, kradzież kodu spowoduje, że kandydat zostanie zaproszony na rozmowę, w której sami się zawstydzą („Więc dlaczego to zrobiłeś w ten sposób ...?”).

Ostatnia uwaga na temat kodu z wcześniejszego zatrudnienia: Po prostu nie. Z punktu widzenia HR prośba o kod z poprzedniego zatrudnienia jest nieodpowiednia i oznacza czerwoną flagę na temat firmy. Oboje ponosilibyście odpowiedzialność prawną (tj. Moglibyście być pozwani) i pokazuje, że nie mają pojęcia, co robią. Kod sporządzony dla poprzedniego pracodawcy nigdy nie powinien być podawany, chyba że kod jest już publicznie dostępny lub nie masz wyraźnej zgody tego pracodawcy. Co gorsza, w dużej firmie twój bezpośredni szef może nie być w stanie udzielić ci pozwolenia, więc baw się dobrze z działem prawnym w takim przypadku? Jestem pewien, że będą zadowoleni z ujawnienia swojego adresu IP dla wychodzącego pracownika.


Zwrócę również uwagę, że w pełnym ujawnieniu dostarczyłem próbkę kodu do laboratorium absolwenta szkoły, gdzie otrzymałem doktorat. Ten przykładowy kod był pełnym kodem autonomicznego robota (5-10 tys. Linii), z wyróżnieniem trzech konkretnych plików. Dokumentacja była godna szacunku, ale nie nieskazitelna. Gdybym musiał to zrobić od nowa, prawdopodobnie nie przyniosłbym drukowanej wersji kodu do mojego wywiadu na miejscu (mógłbym przynieść 100 stron z napisem „ROOKIE MISTAKE” dużymi literami). Otrzymałem pełne stypendium, więc nie było to zbytnio faux pas. Morał: Za dużo> = za mało.
Namey
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.