Jestem doświadczonym programistą, ale nie przeprowadziłem wielu recenzji kodu. Poproszono mnie o przejrzenie kodu napisanego w Pythonie, ale nie znam Pythona.
Czy w ogóle ma sens przeglądanie kodu w języku, którego nie znam?
Jestem doświadczonym programistą, ale nie przeprowadziłem wielu recenzji kodu. Poproszono mnie o przejrzenie kodu napisanego w Pythonie, ale nie znam Pythona.
Czy w ogóle ma sens przeglądanie kodu w języku, którego nie znam?
Odpowiedzi:
Czy masz jakiś sens? Tak. Nawet jeśli nie wiesz nic o semantyce języka programowania, nadal możesz czytać znaki i zauważać niespójne formatowanie, brakujące komentarze, źle dobrane identyfikatory, oczywiste powielanie itp.
Jaki sens, czy wystarczający sens, aby spłacić koszty twojego czasu ? Nie jestem pewny. Zależy to od twojego stanowiska, znaczenia przeglądów kodu w przepływie pracy twojego zespołu i kilku innych czynników, których nie jesteśmy w stanie określić wystarczająco dobrze.
enumerate
.) Myślę, że twój komentarz jest doskonałym przykładem tego, dlaczego próba przeglądu języka, którego nie znasz, powinna co najwyżej być pouczająca.
Jako regularny współpracownik w Code Review Stack Exchange napotykam wiele pytań związanych z językowymi problemami, na przykład:
i lista jest długa. Jednak chociaż nie muszę znać języka, nadal mogę sprawdzić te problemy / punkty.
Kilku naszych najlepszych użytkowników ma najlepsze odpowiedzi w językach, których albo nie używają aktywnie, albo nie znają. Nawet dwa z mojej pierwszej dziesiątki są w językach, których ani nie znam, ani nie mogę skompilować / uruchomić na moim komputerze.
Powiedziałbym nawet, że byłoby to tak samo jak sprawdzenie czyjegoś pseudo kodu. Tak długo, jak będziesz mógł obserwować i komentować rzeczy istotne dla rzeczy, które rozumiesz, nic ci nie będzie i będzie odpowiednie.
Oto, moim zdaniem, wynik końcowy:
W szczególnej sytuacji, gdy nie znam Pythona, byłbym szczególnie ostrożny. Python ma wiele idiomów i standardowych praktyk, które sprawiają, że dobry Python wygląda zupełnie inaczej niż można by oczekiwać w innych językach. (Rzeczywiście, myślę, że rzeczy, na które podkreśla Python, sprawiły, że mój kod wygląda lepiej w innych językach, a nie na odwrót.) Poza PEP8 jest dobry przykład tego, jak możesz całkowicie przegapić sposób myślenia, do którego zachęca Python.
Spójrzmy na prosty przykład. Weź ten kod:
f = open('/home/me/something.txt')
try:
content = f.read()
finally:
f.close()
Widzisz problem z tym kodem? Jeśli nie pracowałeś z Pythonem, prawdopodobnie nie. Problem polega na tym, że w Pythonie istnieje bardzo preferowany styl, który robi dokładnie to samo:
with open('/home/me/something.txt') as f:
content = f.read()
To jest menedżer kontekstu. Czy wiesz, do czego są dobre? Czy wiesz, kiedy należałoby użyć jednego z nich? Czy wiesz, kiedy należałoby stworzyć własne? Nie? Prawdopodobnie nie jesteś gotowy na sprawdzenie Pythona.
Spójrzmy na inny przykład.
def add_fifty(other_list):
result = list()
for i in other_list:
result.append(i + 50)
return result
x = range(10)
y = add_fifty(x)
Widzisz problem? Problem polega na tym, że ta metoda jest całkowicie niepotrzebna . Prawdopodobnie powinieneś po prostu użyć rozumienia w miejscu, gdy operacja jest taka prosta:
x = range(10)
y = [i + 50 for i in x]
Jeśli tego nie widziałeś, nie znasz funkcji i idiomów Pythona.
Być może poprosili Cię o sprawdzenie kodu Pythona właśnie dlatego, że nie znasz Pythona . Istnieje teoria zarządzania , że warto mieć „głupca” w zespole. Nie nazywam cię złym imieniem :) Chodzi o to, że zespół może cierpieć z powodu myślenia grupowego i rozwijania wizji tunelu. Jednym ze sposobów wyjścia z tego jest włączenie kogoś z zespołu, którego inni członkowie zespołu uznaliby za „głupca”, to znaczy kogoś, kto nie zna tematu. Zadajesz pytania, aby się dowiedzieć, a pytania będą pochodzić z punktu widzenia, którego inni członkowie zespołu prawdopodobnie nigdy nie brali pod uwagę.
Nie znasz Pythona, więc to, co dla programistów Python może wydawać się zwyczajne, może ci się wydawać dziwne. Możesz zasugerować ulepszenie, którego zespół nigdy nie rozważał.
Przegląd kodu nie polega na wyszukiwaniu zmiennych z niepoprawną pisownią i nieprawidłowym formatowaniem. Jeśli używasz recenzji kodu, aby znaleźć takie rzeczy, przestań marnować czas i użyj narzędzia.
Przegląd kodu polega na ulepszeniu projektowania i wykrywaniu typowych błędów przez początkujących programistów.
Ponieważ programuję w C ++ i nie znam wystarczająco dobrze Pythona, nie odważyłbym się przejrzeć kodu Pythona. Mogę jednak pomóc w przeglądzie kodu Java.
Nie powiedziałeś, w którym języku programujesz, ale nie widzę, co możesz wnieść do recenzji kodu, jeśli nie znasz języka, w którym jest programowany.
Przeglądy kodu (oprócz faktycznego szukania błędów) są dobrym wprowadzeniem od jednego członka zespołu do innych w celu dodania lub zmiany kodu. Jeśli jesteś doświadczonym programistą , powinieneś być w stanie przeczytać wystarczająco dużo, aby w większości zrozumieć, co się dzieje.
Spójrz na recenzję kodu z punktu widzenia lidera zespołu: jest ktoś, kto rozumie, co powinna robić aplikacja (logika biznesowa), jest ktoś, kto rozumie kod (logika implementacji), i być może kilka innych osób tam, którzy muszą wiedzieć, jak to wszystko do siebie pasuje.
Zdecydowanie nie powinieneś być jedynym recenzentem, ale istnieje wiele dobrych powodów, aby zostać jednym z recenzentów. Nieznajomość języka nie stanowi dużej przeszkody w przypadku wielu pytań wymagających odpowiedzi podczas przeglądu kodu. Jako przykład, jestem jednym z 20 najlepszych odpowiedzi w tagu C # na tej stronie i nie napisałem tak bardzo w języku C #.
Pewna wiedza, którą możesz się podzielić bez znajomości języka:
Jest to również dobry sposób na przyspieszenie nowego produktu. Właśnie dołączyłem do nowego zespołu, w którym znam dość dobrze używane języki, ale nie znam domeny. Udział w recenzjach kodu pomógł mi lepiej nauczyć się domeny, mimo że nie byłem jeszcze w stanie wiele wnieść do tego.
W twoim przypadku będzie to dobry sposób na naukę idiomów nowego języka, gdy zobaczysz komentarze innych recenzentów. Tego rodzaju rzeczy bardzo trudno jest nauczyć się w inny sposób, ponieważ interpreter nie dba o to, czy kod jest pythoniczny, czy nie.
Może to być sytuacja korzystna dla obu stron. Chciałbym powiedzieć, że możesz być szczególnie cennym recenzentem, ponieważ jesteś dziewicą Pythona, która nie została skażona Klątwą Wiedzy .
Pomyśl o tym w ten sposób: jeśli kod jest wystarczająco przejrzysty, aby nawet dziewica Pythona mogła go zrozumieć, to musi to być dobry kod. Części, które trudno ci zrozumieć, mogą być kandydatami do przeróbki lub lepszego komentowania.
Oczywiście byłoby to również korzystne dla ciebie, ponieważ wybierałbyś nowy język na bieżąco. (Mam nadzieję, że otrzymany kod jest dobrym przykładem do nauki.) To ustawienie powinno szczególnie dobrze działać w języku Python, który ma reputację „pseudokodu wykonywalnego”. Jeśli jesteś doświadczonym programistą, nie powinieneś mieć większych trudności ze zrozumieniem istoty programu Python.
Zastrzeżenie polega na tym, że nie można oczekiwać, że zauważysz błędy wynikające z błędów językowych . Ale wykrywanie błędów nie jest jedynym celem przeglądów kodu. Jeśli nic więcej, uczestniczysz w transferze wiedzy, po prostu wiedząc, jakie rzeczy dzieją się w kodzie kolegi.
Kiedyś zostałem poproszony o audyt projektu podwykonawcy, który wydawał się mieć poważne problemy z wydajnością. Dość szybko ustaliłem, że czynnikiem krytycznym był pojedynczy moduł Perla. Nigdy wcześniej nie spotkałem Perla i nie mieliśmy w organizacji nikogo, kto by o tym wiedział, więc postanowiłem sam to zrozumieć. Nigdy nie doszedłem tak daleko do zrozumienia szczegółów, ale było bardzo jasne, że algorytm, którego używał, miał kwadratowy rozmiar danych i to było przyczyną wszystkich problemów. Tak więc, czytanie kodu w języku, którego nie rozumiesz w pełni, może zdecydowanie być produktywne. Dodatkową korzyścią jest to, że uczysz się nowych trików, gdy o tym mówisz.
Kilka uwag:
1) Jeśli jesteś doświadczonym programistą, wybierzesz Python (lub przynajmniej tyle, ile musisz wiedzieć), po prostu pracując z nim. Będzie to przypadek „uczenia się przez działanie”. Na początku będzie ciężko, ale będzie łatwiej, gdy zaczniesz mówić. Potraktuj to jako okazję do nauki innego języka (ludzie często uczą się języków „obcych” poprzez „zanurzenie”).
2) W witrynach SE znajduje się wiele cennych osób, które są „nietechniczne”, ale znają się na gramatyce, komunikacji i logice. Tacy ludzie przynoszą „świeże oko” badanym i dokonują szeregu poprawek „bez zastanowienia”, których inni pomijają, ponieważ są zbyt „związani” materiałem. Prawdopodobnie konsultowano się z tobą w sprawie twoich umiejętności „nie technicznych” (tj. Nie w języku Python), takich jak logika i ogólne umiejętności programowania.
A jeśli nie dokonałeś dużo recenzji kodu, prawie jakakolwiek znajomość kodu pomoże ci jako programista. Wygląda to na dobre dopasowanie umiejętności i potrzeb do potrzeb zespołu.
To zależy od celu przeglądu; czyli to, co masz na myśli przez skuteczne .
Nadal prawdopodobnie będziesz w stanie wykryć niektóre problemy. Jeśli jesteś wszystkim, z czym muszą się zapoznać i mają tylko nadzieję, że obejrzenie tego pomoże niektórym i być może coś złapie, to na pewno. Wiele koncepcji struktury jest podobnych w różnych językach. Szczególnie można przejrzeć komentarze. Należy na tyle dobrze skomentować, że programista nie z tego konkretnego języka powinien być w stanie dobrze zrozumieć, co się dzieje. Jeśli nie ... możesz powiedzieć im, gdzie brakuje ich komentarzy. Jeśli jest to tak dobrze skomentowane ... to powinieneś być w stanie przejrzeć sporo ich struktury tylko za pomocą adnotacji o tym, co się dzieje, zamiast faktycznie czytać kod tego, co się dzieje.
Ale prawdopodobnie nie wykryjesz wielu innych problemów. Więc jeśli zamierzają, aby twoja recenzja była wyczerpującym ustaleniem, czy jest to dobrze wykonany / wykonalny program, będą rozczarowani.
To, czy ten wynik jest wart twojego czasu, zależy w dużej mierze od projektu.