Jak ocenić jakość kodu, jeśli nie znasz języka? [Zamknięte]

10

Jako hipotetyczne, gdybym miał przeprowadzić wywiad z kimś na nowym stanowisku programisty PHP, kiedy mam doświadczenie w .NET, w jaki sposób mogę ustalić, czy dostarczony mi kod próbki jest wydajny i dobrej jakości?

Innymi słowy, jaki jest najlepszy sposób oceny kodu programisty, jeśli nie znasz języka?

Jason Towne
źródło
1
Nie chcę ci tego łamać, ale ty nie :-) Uwzględnij kogoś w wywiadzie, który zna język lub sam się go naucz.
Joppe
2
Dlatego rozmowa kwalifikacyjna jest wysiłkiem zespołu. Oceniasz to, co potrafisz ocenić, i przekazujesz tego rodzaju rzeczy niektórym znawcom zespołu technicznego.
Kaz
Dla mnie najlepszą miarą jest rozmiar funkcji (w tym tutaj głębokość zagnieżdżania), a następnie rozmiar klas / plików.
m3th0dman,

Odpowiedzi:

20

jak mogę ustalić, czy dostarczony mi przykładowy kod jest wydajny i dobrej jakości?

Rzeczy, których nie będziesz w stanie ocenić, to poprawne użycie idiomów języka i użycie biblioteki. To nie są rzeczy, na które powinieneś spojrzeć.

Co możesz ocenić to:

  • Jak dobrze wygląda struktura kodu
  • Dobrze nazwane zmienne (czy możesz coś zrozumieć)
  • Dobrze skomponowane funkcje / jednostki kodu
  • Spójność w bazie kodu

Powyższe punkty (choć nie wyczerpujące) wskazują, czy kod pachnie czy nie i powinien być czymś, co doświadczony programista może zidentyfikować jako dobry lub zły.

W skrócie - szukaj rzeczy, które powinny wskazywać dobry kod niezależnie od języka.

Oded
źródło
5
Kolejna ważna kwestia: „Czy komentarze są jasne, znaczące i łatwe do zrozumienia?” Czy mógłbyś dowiedzieć się trochę o tym, co fragment kodu robi z komentarzy, nawet jeśli masz niewielki kontakt z językiem?
FrustratedWithFormsDesigner
2
@FrustratedWithFormsDesigner - Komentarze? Co to są? Poważnie jednak, kod powinien sam się komentować. Komentarze powinny być tam tylko po to, aby wyjaśnić przyczynę lub podać zły kod.
Oded
6
Nalegam, aby zachować szczególną ostrożność: bardzo łatwo jest dokonać wyboru na podstawie tego, kto pisze kod najbardziej, jak jesteś przyzwyczajony, co może być stosunkowo słabym użyciem tego języka.
Jerry Coffin,
@FrustratedWithFormsDesigner Oded prawdopodobnie uważa, że ​​powinieneś przeczytać ten elegantcode.com/2010/04/18/…
Joel
4

Poproś, aby schemat blokowy lub przeprowadził cię przez niego w ramach wywiadu. Masz idealną wymówkę, by o to zapytać, a ona mówi sporo o tym, jak myślą, aby zobaczyć, jak wyjaśniają.

Jeśli zamierzają przejść do preferowanego języka, wiesz, że masz dużo mentoringu, więc powinieneś przede wszystkim szukać dobrych umiejętności logiki / rozumowania.

Jeśli będą nadal pracować w preferowanym przez ciebie języku, musisz zaakceptować fakt, że w pewnym stopniu sam się zarządzę szczegółowymi szczegółami dotyczącymi konkretnego języka, dopóki ktoś inny nie podejmie tempa, więc wszystko, co musisz zrobić z jest tam również strona projektowa.

Rachunek
źródło
1
Jeśli kandydat jest w stanie wyjaśnić swój kod, aby intencje i cele stojące za nim były jasne, a pod względem wizualnym organizacja i ogólna struktura wygląda rozsądnie, prawdopodobnie mają wystarczającą wiedzę na temat tego, co kod przedstawia. I prawdopodobnie powtórzy podobną czystą reprodukcję. Nawet jeśli poszczególne części są wyjaśnione za pomocą „ponieważ to właśnie pokazał konkretny materiał refernce, jak to zrobić”, podczas nazywania materiału refernece, masz przynajmniej skromną reprezentację umiejętności nie tylko „kodowania”, ale także znajdowania i zastosuj rozwiązania problemów, z którymi nie spotykają się rutynowo.
JustinC,
1

Pomijając kość z głową / oczywiście niewłaściwy kod, sprawność będzie w dużej mierze zależeć od kompilatora / interpretera danego języka, a tak naprawdę nie będziesz w stanie spojrzeć na to z próbki kodu. Próbka kodu może być pięknie napisana i elegancka jak porcelana na serwetkach, ale działa wolno, jeśli źle skompilowana / zinterpretowana.

Bez pewnej znajomości nie będziesz w stanie ocenić idiomatycznego wykorzystania funkcji językowych / cukru syntaktycznego / konwencji.

Powinieneś być w stanie stwierdzić, czy ogólnie jest dobrze napisany w oparciu o uniwersalne względy, takie jak porządek, przepływ kontroli, nazewnictwo zmiennych, kolejność operacji i tak dalej.

Jednak, bardziej praktycznie, jeśli wiesz, jaki język będzie wprowadzany w ten proces, możesz spróbować znaleźć jeden lub więcej przewodników po stylu dla tego języka, przejść do księgarni i przejrzeć kilka książek dla tego języka i przejrzyj przykłady kodu szukając analogów do czegoś, co znasz w / w wybranym języku (językach), sprawdź jeden lub więcej projektów open source, które używają tego języka i tak dalej.

Jeśli masz czas i nie ma bariery kosztowej, możesz nawet posunąć się do skonfigurowania środowiska programistycznego dla tego języka i wypróbować aplikację Hello World, zrobić kata kodu lub w inny sposób napisać prostą małą aplikację w tym. Dość szybko opracujesz podstawowe ramy odniesienia, które nie tylko pozwolą ci przejrzeć konkretny cel przeglądu danego kodu, ale możesz być zmuszony przez język i nieco się rozgałęzić.

Ed Hastings
źródło
1

Niezależnie od języka:

  • Czy istnieją wyraźne rozróżnienia między obawami, odpowiednie użycie klas (dla języków OO), czy jakieś oznaki celowych prób rozbicia kodu na modułowe „części” wielokrotnego użytku?
  • Podobnie, jakieś dowody testowania - testy jednostkowe czy w inny sposób?
  • Jeśli jest to kod produkcyjny, czy jest on wypełniony ciągami debugowania, które mogą sugerować niewielką separację między programowaniem a wdrażaniem?
  • Czy kod jest zgodny z jakąkolwiek konwencją nazewnictwa (czy podoba ci się ta konwencja, czy nie, jest nieistotna!)?
  • Jeśli masz plik, a nie wydruk, czy każda funkcja / klasa w pliku odnosi się do (więc jeśli jest to plik o nazwie data_access_layer , dowód na to, że funkcje przetwarzające obrazy byłyby prawdopodobnie nie na miejscu).
  • Wszelkie oznaki braku zaufania do danych wprowadzanych przez użytkowników są również dobre, szczególnie w przypadku języków internetowych, takich jak PHP. Więc struktury takie jak input = escape (input) przynajmniej pokazują, że są świadomi problemu.
  • Komentarze lub kod opisowy są zawsze dobre. Istnieje kilka szkół myślenia na temat ilości komentarzy, które powinny być obecne, ale całkowity brak komentarzy
  • Kosztem bycia cynicznym, chciałbym również google trochę kodu przed wywiadem. Niestety może to być zadanie kopiowania i wklejania.

Nie twierdząc, że kod, który nie zawiera wszystkich tych elementów, jest automatycznie słaby, ale uważam, że są to wskaźniki kogoś, kto zastanowił się nad swoją praktyką i zastanowił się nad nią.

Jednak w przypadku wszystkich tych wskaźników należy zapytać, jakie jest uzasadnienie takiego kodu. Może istnieć dobry, specyficzny dla danego języka powód ich wyboru ... a potem google jest twoim przyjacielem, kiedy oni i inni kandydaci odchodzą, ponieważ możesz sprawdzić, czy to, co powiedzieli, brzmi prawdopodobne ...!

Powodzenia, ponieważ zatrudnianie dobrych ludzi jest jedną z najważniejszych ról w Twojej organizacji;)

frackham
źródło
Z perspektywy czasu powiela to wiele z tego, co powiedział @Oded (i komentarze).
frackham
0

Powinieneś poprosić kogoś, kto zna dany język, aby przyszedł na rozmowę lub rzucił okiem na próbkę. Taka osoba znacznie bardziej prawdopodobne będzie znalezienie złych miejsc, jeśli takie wystąpią.

Czy kandydat będzie pracował w zespole? Niech członkowie zespołu go spotkają i zadadzą pytania o jego umiejętności.

Marcel
źródło
-2

Zapytaj ich o ograniczenia, na które natrafili podczas korzystania z języka. Poproś, aby pokazali ci proste zapytanie SQL. Każdy deweloper php warty przeszukania powinien być w stanie wykonać podstawowe zapytanie wyboru / aktualizacji / usuwania bez zbytniego wysiłku.

doug

SnoopDougieDoug
źródło