Jestem przy prywatnym projekcie, który ostatecznie stanie się open source. Mamy kilku członków zespołu, wystarczająco utalentowanych z technologiami do tworzenia aplikacji, ale nie dedykowanych programistów, którzy potrafią pisać czysty / piękny i co najważniejsze długoterminowy kod, który można utrzymać.
Postanowiłem przebudować bazę kodu, ale jest to trochę niewygodne, ponieważ ktoś w zespole w innym kraju, z którym nie mam regularnych kontaktów, może aktualizować tę całkowicie oddzielną rzecz.
Wiem, że jednym z rozwiązań jest szybka komunikacja lub przyjęcie lepszych praktyk PM, ale nie jesteśmy jeszcze tacy wielcy. Chcę tylko wyczyścić kod i połączyć się ładnie z tym, co zaktualizował. Czy korzystanie z oddziału byłoby odpowiednim planem? Połączenie najlepszych starań? Coś innego?
źródło
Nigdy nie jesteś „wystarczająco duży, aby się komunikować”. Jeśli potrafisz pisać na klawiaturze, twoje usta też mogą mówić. Na koniec dnia poprawa technologii to 85% komunikacji i 15% techniczne. To, że wolisz siedzieć i pisać kod, zamiast mieć z kimś trudną rozmowę ... nie oznacza, że to dobry pomysł. Komunikacja jest w rzeczywistości trudnym elementem tego, czego próbujesz, ale nie tylko tego unikaj.
źródło
Tak, oddział jest na to dobrym rozwiązaniem.
Sugeruję, abyś zaczął pracować nad tym w gałęzi i upewnić się, że
HEAD
w międzyczasie ma on czystą kontrolę nad bieżącym (tj. Wykonuj zmiany w testach i łączą się w regularnych odstępach czasu, aby upewnić się, że możesz łatwo zastosować zmiany, a testy nadal przebiegają pomyślnie - - szukajgit rerere
też pomocygit
w tym zakresie). Następnie, gdy skończysz, dokonaj zmiany bazy i scal zmiany w swoimHEAD
.Im szybciej zaczniesz nad tym pracować, tym lepiej, ponieważ zmiana architektury staje się coraz większa, tym zimniejszy jest kod. Ponadto może istnieć wiele przykładów kodu zakodowanego ręcznie w całej bazie kodu, gdzie np. Nowa funkcja pomocnika shinera może uprościć sprawę.
źródło
Czy rozważałeś opcję „Nie rób tego jeszcze”?
Podczas gdy wykonywanie tej pracy w osobnej gałęzi jest prawdopodobnie najlepszym podejściem, przygotowujesz się na masywne bolesne scalenie wzdłuż linii.
Inni faceci prawdopodobnie dodają wiele nowych funkcji, zmieniając istniejącą i ewentualnie usuwając niektóre.
Gdy główny nurt deweloperów zwolni nieco w pewnym momencie w przyszłości, możesz być w znacznie łatwiejszej pozycji do refaktoryzacji.
źródło
tl; dr - Wygląda na to, że czas wkroczyć do wielkich lig. Nałożenie pomadki na świnię nie sprawia, że jest ładniejsza, chyba że lubisz takie rzeczy ...
Problem ludzi
Pierwszym problemem jest synchronizacja zatwierdzeń. JEŚLI masz wiele osób pracujących nad tym samym kodem w tym samym czasie, potrzebujesz tylko jednej reguły, aby zapobiec problemom:
Jeśli chodzi o DVCS, trudno jest wprowadzić zmiany w zdalnej gałęzi (tj. Głównym repozytorium) i bardzo łatwo wprowadzić zmiany w lokalnym. Każda osoba jest odpowiedzialna za dopasowanie własnych dodatków kodu do większej całości bez problemów. Jeśli 2 osoby nie zaangażują się dokładnie w tym samym czasie, nie powinieneś tego doświadczać. Zatwierdź dostęp do źródła / zdalnego wzorca powinien być ograniczony tylko do kilku programistów i powinni pobierać zmiany od innych programistów za pośrednictwem zdalnych gałęzi śledzenia.
Problem z kodem
Skąd wiesz, że wprowadzone zmiany nie powodują uszkodzenia kodu?
Prosta odpowiedź ... Napisz testy, aby udowodnić, że nie. Jeśli zignorujesz szkołę myślenia TDD (Test Driven Design), cały sens testów polega na dodaniu poziomu weryfikacji, który umożliwia zmianę kodu bez jego łamania.
Ponadto, zanim przejdziesz do źródła / zdalnego wzorca, należy uruchomić pełną gamę testów.
Zachowaj swoje zobowiązania tak małe i zwięzłe, jak to możliwe. W ten sposób, jeśli będziesz musiał wycofać się z zmiany, która później coś popsuła, zaoszczędzisz od konieczności ponownego wdrażania części, które nie złamały kodu.
Najpierw może być konieczna restrukturyzacja organizacji
Jeśli powyższe rozwiązania nie mogą być łatwo zastosowane, prawdopodobnie istnieją pewne problemy ze strukturą programistyczną, które należy rozwiązać w pierwszej kolejności.
Właścicielem projektu powinien być strażnik. Jeśli występują problemy z synchronizacją zatwierdzeń, prawdopodobnie zbyt wiele osób ma dostęp do zatwierdzania. Nawet w przypadku dużych projektów, takich jak jądro Linuksa, tylko garstka programistów ma dostęp do źródłowego / zdalnego głównego repozytorium. W rzeczywistości istnieje wiele poziomów repozytoriów do zarządzania zatwierdzeniami. Zamiast modelu zatwierdzania jednowarstwowego, w którym wszyscy wypychają swoje zmiany do źródła, model hierarchiczny ma strażników, którzy dokonują zmian i sprawdzają ich jakość przed włączeniem do projektu. Hierarchiczny model zatwierdzania może skalować się o wiele większy i bardziej efektywny niż model jednowarstwowy bez utraty jakości.
Dla deweloperów, którzy nie mają dostępu do zatwierdzania, powinni nauczyć się tworzyć własne gałęzie zdalnego śledzenia (git i gitorious są do tego dobre), więc deweloperzy, którzy to robią nie popełnić dostępu można łatwo wyciągnąć / zintegrować gałęzie do pochodzenia. Jeśli zmiany są niewielkie, łatki będą działać równie dobrze.
Zdolność do wyciągania zmian przed scaleniem / rebasesem zakłada, że nie rozwijasz się w lokalnym oddziale głównym. Najłatwiejszym sposobem jest poradzenie sobie z tym, zanim zaczniesz kodować, a następnie wykonasz całą pracę w tej gałęzi. Trudno jest rozgałęzić go tuż przed scaleniem i wycofać master.
Zdefiniuj styl kodowania dla całego projektu i spraw, aby deweloperzy podążali za nim. Współpracujący deweloperzy powinni pisać kod, który jest zgodny ze standardami / normami projektu, aby zminimalizować czyszczenie. Styl kodowania może stanowić dużą barierę ego w otwartym projekcie. Jeśli nie zostanie ustawiony żaden standard, wszyscy będą kodować w swoim preferowanym stylu, a baza kodów stanie się bardzo brzydka bardzo szybko.
Mit „Miesiąca mitycznego człowieka”
Wierzcie lub nie, większe / bardziej udane projekty open source nie są prowadzone jak demokracja. Są prowadzone jako hierarchia. Stwierdzenie, że projekt nie może skutecznie przekroczyć 8-10 programistów, jest naiwne. Gdyby tak było, to nie istniałyby tak wielkie projekty jak jądro Linuksa. Głębszą kwestią jest to, że udzielenie każdemu dostępu tylko utrudnia efektywną komunikację.
Problem mitycznego miesiąca człowieka można rzeczywiście rozwiązać. Musisz tylko uruchomić swój projekt jak wojsko. W hierarchii istnieje wiele poziomów, ponieważ powszechnie wiadomo, że poszczególne osoby są tak naprawdę skuteczne tylko w zarządzaniu komunikacją z garstką ludzi. Dopóki żadna osoba nie jest odpowiedzialna za zarządzanie pracą więcej niż 5-7 osób, system może skalować się w nieskończoność.
Może ograniczyć najlepszych / doświadczonych programistów do większej integracji i projektowania / planowania wyższego poziomu, ale to nie jest złe. Częścią zwiększenia skali jest podjęcie decyzji, że projekt potrzebuje długoterminowego planu. Osoby na najwyższych poziomach, które mają największe inwestycje (czas jest również zasobem) w przyszłe projekty, powinny być odpowiedzialne za podejmowanie wielkich decyzji.
Miło jest słyszeć o projekcie open source przechodzącym bóle. Gratulacje i powodzenia.
źródło
Z mojego doświadczenia wynika, że czysty / piękny jest wrogiem utrzymania. Piękny kod często:
Z drugiej strony, możliwy do utrzymania kod:
źródło