Jestem kontrahentem dużej firmy. Obecnie w projekcie jest trzech programistów, w tym ja.
Problem polega na tym, że dwóch innych programistów tak naprawdę tego nie rozumie. Przez „to” rozumiem, co następuje:
- Nie rozumieją najlepszych praktyk dotyczących używanej przez nas technologii. Po 6 miesiącach ode mnie i innych, podając im przykłady, stosuje się straszne anty-wzory.
- Są programistami „kopiuj i wklej”, którzy produkują głównie kod spaghetti.
- Oni ciągle łamać rzeczy, wprowadzanie zmian, ale nie robi podstawowy test dymu aby sprawdzić, czy wszystko jest dobrze
- Odmawiają / rzadko proszą o recenzje kodu.
- Odmawiają / rzadko robią nawet podstawowe rzeczy, takie jak formatowanie kodu.
- Brak dokumentacji dotyczącej jakichkolwiek klas (jsdocs)
- Boję się usunąć kod, który nic nie robi
- Skomentuj bloki kodu wszędzie, mimo że mamy kontrolę wersji.
Czuję się coraz bardziej sfrustrowany, gdy formatuję inne kody, naprawiam błędy, odkrywam zepsute funkcje i tworzę abstrakcje, aby usunąć spaghetti.
Naprawdę nie wiem co robić. Staram się nie denerwować, ale to tylko bałagan. Lubię tych ludzi jako ludzi, ale mam wrażenie, że sytuacja w kodowaniu jest tak zła, że mógłbym poruszać się szybciej, gdyby po prostu przeglądali Internet przez cały dzień.
Czy nie byłoby w porządku poprosić naszego kierownika o sprawdzenie dostępu svn commit; zatwierdzeń może dokonać tylko osoba, która ma wiedzę na temat tego, co robimy? Jako kontrahent nie jestem pewien, czy to najlepszy ruch.
Czy istnieje subtelny / nie tak subtelny sposób wyjaśnienia, ile rzeczy naprawiam?
Odpowiedzi:
Mam coś takiego w moim zespole. Starałem się, aby ludzie robili to, co należy, i nie działało to zgodnie z oczekiwaniami, więc przeszedłem do innego rozwiązania.
Najpierw poszedłem do mojego menedżera i wypracowaliśmy umowę, żaden kod nie dostaje się do kontroli źródła, chyba że jest objęty testami jednostkowymi. Jeśli kod wejdzie bez testów jednostkowych, mam prawo weta, aby natychmiast cofnąć zatwierdzenie i pingować tego, kto był odpowiedzialny, może pracować nad testami, a następnie przesłać kod.
Mając tę zasadę, regularnie uruchamiam narzędzia do pokrywania kodu (w tym przypadku jacoco w naszej kompilacji sbt ), aby upewnić się, że elementy są poprawnie zakryte, a także stale refaktoryzuję i przeglądam kod w każdym kodzie przez nich przekazywanym. Ponieważ jest to projekt Java i Scala , mam mnóstwo narzędzi, które pomagają mi wychwycić rzeczy, których nie powinno być lub które nie działają tak, jak naszym zdaniem powinny, nie jestem pewien, jak możesz zrobić to samo z JavaScript, ale może jest rozwiązanie.
Najważniejszą rzeczą, która moim zdaniem pomaga mi nadążyć za tym, jest to, że mam jasny obraz tego, czego oczekuję od projektu i jego głównej architektury, więc za każdym razem, gdy widzę coś, co nie odzwierciedla tego widoku, mogę tam iść i napraw to. Powinieneś zrobić to samo, zdefiniować swój widok, wzorce, które należy zastosować, sposób pisania kodu i być na bieżąco, zawsze pozwalając im (i kierownictwu) wiedzieć, co się dzieje i co powstrzymuje projekt przed kontynuowaniem szybciej.
Z pewnością nadejdzie moment, w którym albo się poddadzą i zrobią coś dobrego, albo zarząd dostanie komunikat i usunie je z projektu.
źródło
Jestem pewien, że do tej pory widziałeś moje komentarze i mój inny post, więc nie będę udawał, że naprawdę znam odpowiedź. Najlepsze, co mogę zaoferować, to podsumowanie tego, co słyszałem / czytałem od innych, i dodałem własne doświadczenia do miksu.
Po pierwsze, chcę powiedzieć, że jakiś czas temu natknąłem się na blog, który należy do jednego z naszych członków Programmers SE, Martina Blore'a i IMO, ten konkretny post na temat samorealizacji TDD jest bardzo dokładny. TDD to ostatni, najwyższy poziom, który łączy wszystko razem, ale bez wcześniejszych poziomów, zwłaszcza największego, zasad i praktyk tworzenia jasnego i czytelnego kodu, bardzo trudno będzie, jeśli nie uniemożliwić, działanie TDD.
W mojej firmie zarówno Agile, jak i TDD zostały narzucone nam przez kierownictwo i na początku po prostu to zrobiliśmy, ponieważ powiedziano nam (co jest przeciwieństwem zwinności). Próbowaliśmy dwa razy TDD i chociaż jestem wielkim zwolennikiem korzystania z testów automatycznych, osobiście wyrzuciłem wszystkie te, które zespół spasował w ostatnim wydaniu. Były kruche, gigantyczne, kopiowały / wklejały wazoo i były wypełnione oświadczeniami dotyczącymi snu, które powodowały, że biegali naprawdę wolno i nieprzewidywalnie. Moja rada dla twojego zespołu: NIE ROBIJ TDD ... jeszcze.
Nie wiem, jaka jest twoja sytuacja, ponieważ wspomniałeś, że jesteś w firmie tylko przez 6 miesięcy i że jesteś wykonawcą. Czy Twoim długoterminowym celem jest pozostanie w tej firmie, czy też umowa się skończy? Pytam, bo nawet jeśli coś zrobisz, uzyskanie wyników może zająć sporo czasu.
Również kiedy dołączasz do zespołu, zwykle potrzeba czasu, zanim zdobędziesz wystarczającą wiarygodność i szacunek dla swojego zespołu, w którym oni (programiści i kierownictwo) rozważą nawet wszystko, co zaproponujesz. Z mojego doświadczenia wynika, że gasisz kilka pożarów i demonstrujesz, że masz umiejętności i wiedzę, na których inni mogą polegać. Nie jestem pewien, czy wystarczy 6 miesięcy. Dość często nowa, ambitna osoba dołączała do zespołu, a następnie pisała tutaj post z pytaniem, w jaki sposób może zmienić świat. Smutna rzeczywistość jest taka, że po prostu nie mogą.
Zakładając, że masz szacunek i uwagę swojego zespołu. Co teraz?
Po pierwsze, zarówno kierownictwo, jak i programiści muszą mieć świadomość, że występuje problem. Wyniki pomiaru mierzone są pod względem wykonanej pracy. Jeśli są zadowoleni z obecnej ilości i jakości funkcji, smutną rzeczywistością jest to, że nie będą słuchać. Jak zauważyli inni, bez wsparcia kierownictwa niezwykle trudno będzie wprowadzić jakąkolwiek zmianę.
Gdy uzyskasz wsparcie zarządzania, następnym krokiem jest dogłębne zbadanie i określenie głównych przyczyn, dla których zespół działa w ten sposób. Ten następny temat jest czymś, co było moją osobistą misją od jakiegoś czasu. Jak dotąd była to moja podróż:
źródło
Sugeruję, abyś porozmawiał ze swoim kierownikiem na temat problemu, ale prawie na pewno nie będzie chciał sprawdzać każdego zameldowania.
Zamiast tego sugeruję zasugerowanie zestawu testów jednostkowych / regresyjnych, które można podłączyć do SVN i uruchamiać przy każdym meldowaniu. Pomoże to przynajmniej uniknąć nieudanych kompilacji. Możesz stopniowo sugerować inne najlepsze praktyki.
Jeśli okaże się, że jest całkowicie niereceptyczny, może powinieneś przejść nad jego głową. Jeśli zdecydujesz się to zrobić, musisz zabrać ze sobą najlepszą grę. Zasadniczo będziesz kierować do kierownictwa, aby zostać zatrudnionym na wyższym poziomie, jeśli to zrobisz.
źródło