Jak mogę ocenić, czy projekt jest szczególnie złożony, czy powolnie go podejmuję?

16

Robię niewielkie postępy w dużym projekcie. Źródło jest ogromne, wiele warstw obiektów, kod makaronu, wykresy podwójnego diamentu wielokrotnego dziedziczenia, na wpół wypalone cechy zamrożone, gdy oryginalny pisarz odszedł, i nikt nie wie, dlaczego wiele jego elementów zostało zaprojektowanych tak, jak były.

Podejrzewam, że każdy kompetentny programista miałby problem z ustaleniem tego wszystkiego na tyle dobrze, aby naprawić błędy, dokończyć niedopieczone rzeczy i dodać nowe funkcje. Podejrzewam jednak, że idę wolniej niż typowy programista.

Jak mam ocenić, czy źródło jest wyjątkowo złe i robię to tak dobrze, jak ktokolwiek inny, w porównaniu do źródła typowego dla takiego projektu i jestem po prostu powolny lub nieumiejętny?

DarenW
źródło
11
Zrozumienie kodu innych osób jest aktem empatii. Zapomnij o tym, jak szybko idziesz, a także zapomnij o tym, jak bandą głupich m ********** są ludzie, którzy napisali kod. Odkrywanie tego jest ćwiczeniem elastyczności. Załóżmy, że źródło jest wyjątkowo złe i że masz nadmiar umiejętności, wróć do pracy i przestań grzebać na tych głupich forach. Dotyczy to również mnie ... Mam kod do zakłopotania.
Dan Rosenstark,
2
Szczególnie zapomnij o „co za banda ...”, gdy wspomnianą osobą (osobami) jest szef, brat szefa, szef szefa lub bratanek szefa itd.!
DarenW,
2
Ach, brakujące „dlaczego”. Pamiętaj, aby umieścić je, gdy je rozgryziesz.
@DarenW - to kod spaghetti, a nie kod makaronu: D (Przepraszam, musiałem).
Jas
1
@Jas google dla kodu makaronu ... jest więcej rodzajów makaronów niż tylko spaghetti ;-)
Jürgen A. Erhard

Odpowiedzi:

6

Jedynym sposobem na rozstrzygnięcie tego pytania jest pozyskanie znacznie większej liczby programistów, którzy zajmą się tym samym problemem i zobaczą, czy mają się lepiej.

Jest to oczywiście rzadko praktyczne, zadanie spoczywa na twoim dobrym ja i pod warunkiem, że robisz co w jego mocy, badając, gdzie twoja wiedza zawodzi. Rozbijanie go na części, gdzie złożoność cię leczy, i informowanie o postępach każdego, kogo to obchodzi. Wtedy nie martwiłbym się i nie przestawał.

Orbling
źródło
16

Po pierwsze, nie spędzałbym zbyt wiele czasu obawiając się, że możesz być „sprytny lub nieumiejętny”. Niektóre projekty są trudne do zrozumienia, a duże projekty często wymagają trochę czasu, aby przyśpieszyć. Myślenie, że jesteś „głupi” lub nie sprostasz zadaniu, nie pomoże ci w żaden sposób.

Wygląda na to, że potrzebujesz pomocy z kodem, więc rozważ swoje zasoby. Czy masz dostęp do oryginalnych programistów? Jeśli są dostępne, mogą być dobrym źródłem informacji. Jaka dokumentacja jest dostępna? Jeśli brakuje dokumentacji, wyjmij notatnik i zacznij tworzyć własną dokumentację osobistą.

Wielki pomysł polega na tym, że powinieneś oczekiwać, że ten proces zajmie trochę czasu, a im mniej czasu poświęcisz sobie na psychiczne bicie siebie, tym więcej energii będziesz musiał przeanalizować kod i go rozgryźć. Powodzenia!

Zeke
źródło
5
+1 Może minąć nawet 6 miesięcy, zanim naprawdę poznasz niektóre złożone systemy na tyle, aby być w nich biegłym. Nawet jeśli podstawa kodu jest „dobra”, różni programiści i zespoły mają różne style, a wyprostowanie się czasami wymaga czasu.
Ryan Hayes,
3
@Ryan, a 6 miesięcy później sam stajesz się częścią problemu :)
Benjol,
@Benjol Tak, byłem tam.
Ryan Hayes,
FWIW, kiedy byłem na tej łodzi (kilka razy!), Uważam, że bardziej pomocne jest robienie częstych przerw niż po prostu siedzenie i męczenie się nad kodem. Kiedy robisz sobie przerwę, wstań i fizycznie odejdź od komputera. Rozciągnij się, wyjrzyj przez okno, pomyśl o tym, na co właśnie spojrzałeś, a następnie wróć i spójrz trochę więcej. YMMV, ale kiedy to zrobiłem, zrobiłem znacznie lepszy postęp. Powodzenia!
TMN,
+1 za tworzenie własnej dokumentacji osobistej. Kiedy wykonuję tę pracę, znajduję wiele notatek (w kodzie lub na papierze) i rysuję wiele diagramów (co zwykle oznacza dla mnie tylko coś w tym czasie). Dodatkowym plusem tego wszystkiego jest wzmocnienie koncepcji we własnym umyśle.
Andy Hunt
6

Widziałeś kiedyś krzywą uczenia się. Curce do nauki

Teoria mówi, że początkowo potrzeba czasu, aby się wzmocnić. Sztuczka polega na szybkim przejściu punktu przejścia. Jeśli regularnie utkniesz, poproś o pomoc swojego przełożonego lub przynajmniej informuj go o problemach, z którymi się spotkałeś. Dopóki nie masz problemów z harmonogramem, nie ma problemów.

Manoj R.
źródło
2

Przekrój go, po kawałku na raz

Twoja sytuacja jest bardzo powszechna, „opanowanie się” wymaga czasu, jak już wspomnieli inni.

Uważam, że jeśli poradzisz sobie z tym „pojedynczo” , bez względu na to, jak skomplikowany jest projekt, sam go rozwiążesz. Musisz być po prostu logiczny.

Na początek powiedz przycisk, przekop kod źródłowy , umieść punkty przerwania, zobacz, co się dzieje. Są dwie rzeczy, które musisz spełnić:

  • Ogólny przegląd.
  • Drobiazgowe szczegóły, które realizują powyższą pożądaną funkcjonalność.
  • kiedy zrozumiesz jego fragmenty, ponownie go uwzględnij.
Ciemna noc
źródło
„Jeden kawałek na raz” może działać w innych projektach, ale ma tak wiele klas wywodzących się z innych, klas przyjaciół, wskaźników do wewnętrznych wnętrz, jest kilka części, które można zrozumieć niezależnie.
DarenW,
Jestem pewien, że to złożony labirynt (coś, co „z czasem” urosło). Jeśli jednak zaczynasz od jednej funkcji, czy mówisz mi, że nie jesteś w stanie jej prześledzić od końca do końca?
Darknight,
Śledzenie przepływu danych lub sekwencji zdarzeń, gdy na przykład użytkownik kliknie przycisk, okazało się niemożliwe.
DarenW,
1

Co powiesz na inne spojrzenie: Co musisz wiedzieć o tym kodzie i czy potrafisz to zmierzyć? Na przykład, jeśli próbujesz naprawić błąd, który może wymagać innego rodzaju nurkowania niż podczas próby migracji kodu z jednego języka do drugiego, np. Przejście z VBScript na C #. Jeśli próbujesz usunąć wszystkie wymagania z obecnego kodu, może to chwilę potrwać, ale podejrzewam, że większość ludzi miałaby tego rodzaju problem.

JB King
źródło
Podoba mi się ten komentarz. Trzeba mieć konkretny cel i pracować, aby zrealizować ten (i tylko ten) cel. W przeciwnym razie zgubisz się w nim - bardzo podobnie do mapy.
NoChance,
1

Ucząc się czegoś nowego, wielu studentów myśli: „Cholera, to jest dla mnie trudne. Zastanawiam się, czy jestem głupia. ”
Zanim pójdziesz dalej, upewnij się, że nie jesteś głupi i że niektóre rzeczy są trudne. …

Pan Aaron Hillegass z inteligentnymi słowami.

Nie jesteś głupi, nie jesteś powolny i nie jesteś nieumiejętny. Jestem na tej samej łodzi, przyjąłem nową rolę, a istniejąca baza kodu jest niewiarygodnie duża i wykazuje oznaki wielokrotnego nadmiernego rozwijania, zajęło mi tygodnie, aby dojść do punktu, w którym czuję, że nawet dostaję blisko pełnej prędkości. Wyobraź sobie, że projekt jest jak nauka nowego języka, nie dzieje się to z dnia na dzień, ale wymaga cierpliwości.

Nicholas Smith
źródło