Tracę kontrolę nad przepływem mojej aplikacji PHP, z którą ciężko jest pracować

14

Programuję od kilku lat i z czasem bardzo dobrze poznałem C # i JavaScript. Mam kilka większych projektów w języku C # i JavaScript, do których nie mam problemów z nawigacją. Niedawno rozpocząłem projekt PHP i AngularJS do pracy bez wcześniejszego doświadczenia z PHP.

Strumień strony PHP staje się trudny do śledzenia (strona JavaScript jest większa, ale łatwa do opanowania), kiedy próbuję to przemyśleć, wyobrażam sobie splątaną kulkę wątku. Główne błędy projektowe, które popełniłem, kiedy zaczynałem, zaczynają się gromadzić i wpływać na mój projekt. Zaimplementowanie czegoś nowego zajmuje coraz więcej czasu.

Mam napięty termin i coraz trudniej jest mi pisać dobry, SUCHY, SOLIDNY ​​kod. Coraz bardziej zachęcające jest kopiowanie / wklejanie fragmentów kodu, aby wprowadzić niewielkie zmiany w jego zachowaniu w miarę upływu czasu projektowania. Powrót do bazy kodu zajmuje dużo czasu, gdy muszę zmienić kontekst (z jednego projektu na ten z powrotem), mam wrażenie przerażenia, gdy wracam do pracy nad tym projektem.

Jakie kroki mogę podjąć, aby temu zaradzić? Dodatkowy czas, jaki może to zająć, również musi być uzasadniony, mój szef nie jest programistą i nie jest zaznajomiony z cyklami rozwojowymi ani programowymi, więc wyjaśnienie może być trudniejsze niż zwykle.

Douglas Gaskell
źródło
1
Dzięki @gnat Jestem jednak mniej zainteresowany tworzeniem sprawy dla mojego szefa, niż zastanawiam się, jak samodzielnie rozwiązać problemy. Zgłaszanie sprawy mojemu szefowi nic nie da, jeśli nie znam dobrego metodycznego sposobu identyfikowania i zmieniania problemów.
Douglas Gaskell,

Odpowiedzi:

11

Bierzesz na siebie dług techniczny. Im bardziej usprawiedliwisz niedbały kod terminami, tym więcej terminów będzie oznaczało, że osiągasz coraz mniej.

Zrozum, że możesz całkowicie tego uniknąć. Nikt cię nie złapie, robiąc bałagan i wyrzucając cię z równowagi. Po prostu obudzisz się pewnego dnia otoczony bałaganem.

W tym momencie albo zaktualizujesz swoje CV i sprawisz, że będzie to dla mnie problemem, albo zdecydujesz się spłacić dług i poświęcić trochę czasu na czyszczenie kodu.

Jeśli pójdziesz do czyszczenia, zrozum, że nie chodzi o „poświęcanie więcej czasu na projektowanie”. Chodzi o zerwanie z leniwymi nawykami i wyjęcie śmieci.

Wyrzucanie hurtowego brudnego kodu to zły pomysł. Nie z powodu włożonej w to pracy, ale dlatego, że działający kod przechwytuje pomysł. Przenieś pomysł do czystego kodu, zanim usuniesz brudny kod.

Pomagają w tym testy jednostkowe, ale jeśli stworzyłeś testy z taką samą starannością, jaką wkładasz w bałagan, prawdopodobnie również potrzebują naprawy.

Nie poddawaj się sztywności. Jeśli nie możesz tego zmienić, to nie jest to oprogramowanie.

candied_orange
źródło
1
„Nikt cię nie złapie, robiąc bałagan i wyrzucając cię z równowagi”. ... Chyba że przeglądasz kod. ;)
jpmc26
1
@ jpmc26 Jeśli uważasz, że recenzje kodu ocalą cię od tego losu, jesteś w błędzie. Recenzje kodu pomagają tylko wtedy, gdy chcesz uczyć się od innych. Nie, kiedy skupisz się na terminie. Działający, nieuporządkowany kod będzie wielokrotnie przebijał opinie. Widziałem, jak menedżerowie rozwiązują te spory, zmieniając jedną czwartą. Jeśli nie zależy ci na jakości, nikt nie będzie w stanie wyciągnąć jej z ciebie. Nie myśl, że możesz polegać na innych, aby powstrzymać cię od bałaganu. Jeśli do tego dojdzie, po prostu przydzielą cię do aktualizacji dokumentacji.
candied_orange
Jeśli przeczytałeś mój komentarz i pomyślałeś, że mówię, że recenzje kodu są magiczne jak jednorożce i tęcze, które naprawią wszystko bez żadnego wysiłku i chęci, jesteś niesamowicie w błędzie. Ale dają komuś szansę, żeby cię do tego wezwał.
jpmc26
1
@ jpmc26 Jeśli przeczytałeś moją odpowiedź i pomyślałeś, że mówię, że nie ma nadziei, po prostu się poddaj, jesteś niesamowicie w błędzie. Wzywam programistów do wzięcia osobistej odpowiedzialności za czysty kod zamiast polegania na jakimkolwiek procesie, aby to się stało. Tylko jedna rzecz ma znaczenie. Albo cię to obchodzi, albo nie.
candied_orange
Oczywiście, ale nawet najlepszy programista co jakiś czas podejmie głupie decyzje. Recenzje kodu z inną osobą dają Ci możliwość umieszczenia kodu przed kimś, kto może go wcześniej złapać. To cały punkt . Jest to trudne , aby zobaczyć spoty problem przez siebie aż rzeczywiście spróbować coś zmienić i staje się trudne. Oczywiście przeglądy kodu i wszelkie inne techniki są bezużyteczne, jeśli cię to nie obchodzi.
jpmc26
9

Zaimplementowanie czegoś nowego zajmuje coraz więcej czasu.

To jest twoje uzasadnienie. „zejdź na dół, zjedz trochę kruków i wyjaśnij, dlaczego wszystko trwa dłużej i że musisz poświęcić trochę czasu na przebudowę i przeprojektowanie systemu.

Jeśli tego nie zrobisz, musisz stopniowo refaktoryzować, na najniższym poziomie. Zadania już trwają dłużej, niż chcesz - poświęć trochę czasu za każdym razem, gdy dotkniesz podstawy kodu, aby spróbować coś ulepszyć. Dodaj test integracji. Wyodrębnij abstrakcję.

Głupia odpowiedź na pytanie „Jak refaktoryzować ogromny projekt?” to „Jeden kawałek na raz”.

EDYTOWAĆ

Czytałem powiązane posty i natknąłem się na ten post na blogu: http://ronjeffries.com/xprog/articles/refactoring-not-on-the-backlog/ . TLDR : nie próbuj tworzyć ogromnej „fazy” refaktora w swoim projekcie; jest mało prawdopodobne, aby uzyskał wpis od właścicieli projektów, a Ty nie będziesz mieć wyboru w kwestii tego, co masz rozwiązać w tym czasie. Zamiast tego poświęć trochę czasu na każdą nową zmianę lub poprawkę, aby usunąć zepsuty kod, nad którym obecnie pracujesz. Nie pozwól, aby zapachy pozostały wokół, gdy masz okazję je naprawić.

Jen
źródło
3
Tak właśnie zrobiłem z moimi dziedzictwami w przeszłości. Fajna rzecz: kiedy osiągniesz punkt zwrotny, projekt zaczyna świecić jak z bajkowego pyłu.
qwerty_so,
-2

Sonarqube obsługuje PHP, dzięki czemu możesz pomóc w śledzeniu obecnego zadłużenia i nowych wycieków. http://docs.sonarqube.org/display/PLUG/PHP+Plugin

Próbka na żywo z Drupal https://sonarqube.com/dashboard?id=drupal

Archimedes Trajano
źródło
1
Niestety nie mogę zainstalować JVM na moim urządzeniu roboczym. W przeciwnym razie wygląda to na świetne narzędzie.
Douglas Gaskell,
To dość drakońskie jak na stanowisko programistyczne.
Archimedes Trajano,
Nie mam lokalnego administratora ani żadnych uprawnień instalacyjnych, ani nie uruchamiam uprawnień dla aplikacji nie umieszczonych na białej liście. Kiedyś było gorzej ... niestety.
Douglas Gaskell,
Nie mogę powiedzieć, że współczuję, ale współczuję.
Archimedes Trajano,
głosowane, ponieważ jest to tylko reklama / link do narzędzia, a nie odpowiedź na pytanie PO.
James Snell,