Ciągle przytłaczają mnie duże projekty, kiedy osiągają pewien poziom złożoności. Gdy osiągnę pewien punkt w projekcie, moje postępy zwalniają do pełzania i nieustannie śledzę moje kroki i rozwiązuję wszelkie zamieszanie.
Naprawdę dobrze sobie radzę z refaktoryzacją z powodu mojej słabości. I zawsze staram się rozkładać moje obiekty na mniejsze, łatwiejsze do zarządzania. Ta słabość prawdopodobnie spowodowała, że zbyt wiele uwagi poświęciłem projektowaniu.
Wiem, że jeśli uda mi się rozdzielić moje problemy na mniejsze, będę w stanie bez problemu rozwiązać. Jedną ze strategii, która przychodzi na myśl, jest rozwój oparty na testach. Co jeszcze mogę zrobić?
object-oriented
programming-practices
refactoring
development-methodologies
problem-solving
szczenię
źródło
źródło
Odpowiedzi:
przestań myśleć o kodzie
zacznij myśleć o warstwach, funkcjach, modułach, usługach i innych abstrakcjach wyższego poziomu
jesteś przytłoczony, ponieważ myślisz na zbyt niskim poziomie
źródło
Uproszczenie kompleksu jest łatwe ; poczekaj, pomyśl, że jest na odwrót.
Każdy ma z tym problem, nie ma prostego rozwiązania, które byłoby tak skuteczne.
Ponieważ nie wymieniłeś tego w swoich pytaniach, proponuję:
Skoncentruj się na spójności funkcjonalnej poprzez:
Jeśli umieścisz go w Google wśród wyników na pierwszej stronie, znajdziesz dwa świetne zasoby:
Czym jest spójność w informatyce?
Jeśli masz jakieś pytania, daj mi znać.
źródło
Rozłóż elementy na najmniejszy możliwy element. Na przykład pojedyncze pole w formularzu. Wybierz najbardziej ryzykowny lub o najwyższym priorytecie i idź naprzód, jakby to była prosta poprawka, a nie duży projekt. To prawda, że później dokonasz refaktoryzacji, ale przynajmniej będziesz iść do przodu.
źródło
Z mojego doświadczenia odpowiedziałeś na swoje pytanie komentarzem na temat TDD. Dla mnie często czułem to samo co Ty, szybki sukces szybko przerodził się w drobne szczegóły, gdy system osiągnął określony rozmiar. Zauważyłem, że z TDD pomogło, ponieważ możesz poradzić sobie z każdą częścią systemu jako małe porcje, wiedząc, że reszta systemu będzie lub powinna nadal działać, tak jak ją opuściłeś. Myślę też, że dzięki TDD pomaga upewnić się, że twój system jest wyraźnie podzielony na mniejsze części, które można niezależnie przetestować.
źródło
Niektóre osoby są dobre w projektowaniu modułowych, łatwo zrozumiałych programów, ale większości programistów brakuje tej możliwości, w mniejszym lub większym stopniu. Wiem, że nie znam żadnej książki, procedury ani praktyki, które mogłyby zmienić jednego z pierwszych programistów w drugi, z wyjątkiem być może dużego doświadczenia. Ale nawet nie jestem tego pewien.
Najważniejsze jest to, że większość programistów będzie miała trudności z wzniesieniem się ponad przeciętną, niektórym uda się być w porządku (to miejsce, w którym umieściłbym siebie i być może 50% profesjonalnych programistów z (powiedzmy) branży IB) i bardzo mała mniejszość będzie doskonała. Powinienem powiedzieć, że nigdy w mojej długiej karierze nie spotkałem jednego z tych doskonałych :-)
źródło
Myślę, że wiele osób próbuje nad-inżynierować rozwiązania. Przyjmują podejście „Adam i Ewa”, gdy tylko nieco bardziej praktyczne uprościłoby sprawy o wiele.
Specjalistyczne klasy nie są złe, są naturalną konsekwencją dźwiękowego projektowania oprogramowania.
Moim zdaniem wielu programistów nie rozumie tego i nie znam żadnej książki, która by to wyjaśniała.
Inną rzeczą, która z pewnością pomaga, jest TDD, która pozwala zrozumieć „w jaki sposób” będziesz korzystać z zajęć w praktyce i może w wielu przypadkach uratować dzień, ponieważ pokazuje ewentualne problemy / ograniczenia na początku dnia.
Na koniec, kolejną BARDZO ważną rzeczą, której bym szukał, gdybym był tobą, są wzory. Wzorce projektowe to sposób, w jaki ludzie mądrzejsi od ciebie lub mnie rozwiązują problemy programistyczne. Pomysł na wzorce, zgadnij co ?, polega na tym, że nie można ich używać jako książek kucharskich, przepisów, które po prostu uderzasz tam, ale w zamyśleniu i przede wszystkim rozumiejąc domenę aplikacji.
Mądre użycie wzoru znacznie zmniejszy ilość szczegółów, którymi musisz zarządzać.
Dobra biblioteka wzorców projektowych zaprojektowana z myślą o twoich potrzebach okaże się bezcenna. Zobaczmy bardzo prosty przykład, aby umieścić rzeczy w kontekście:
wyobraź sobie, że masz formularz, w którym po naciśnięciu przycisku inne formularze muszą się zaktualizować. Jest to typowy wzorzec „obserwatora”. Masz podmiot i kilku obserwatorów, którzy rejestrują się w temacie. Dlaczego musisz wdrożyć interfejs? Możesz po prostu dodać metody, lub jeszcze lepiej, użyć interfejsu dla obserwatorów i ogólnej listy dla tematu. Teraz masz to, co najlepsze z obu światów: niezależność dla obserwatorów i brak bzdurnych rzeczy na ten temat.
Mam nadzieję, że ma to dla ciebie sens!
Andrea
źródło
Problem szybkości i czytelności deweloperów może pojawić się, gdy przeoczymy potrzebę abstrakcji. W niektórych dużych bazach kodu, nad którymi pracowałem, najczęstszym wrogiem była ogromna liczba wyspecjalizowanych klas, które mają bardzo podobne funkcje, które powodują wzdęcie kodu. Jeśli cofniemy się o krok i zrozumiemy wymagania jako całość, a nie części aplikacji, wówczas przyjdzie nam na myśl wiele abstrakcji.
Kilka prostych kroków, które mi pomogły
źródło