Dlaczego po napisaniu kodu „Czułbym się lepiej” po pewnym czasie? [Zamknięte]

12

Pracuję nad projektem hobby w C ++ od ponad 2 lat. Ilekroć piszę moduł / funkcję, koduję ją z dużym namysłem. Teraz zobacz problem,

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

Oto 'X'dowolny moduł (mały / duży / średni). Obserwuję to, niezależnie od tego, ile wysiłku wkładam w kodowanie. Więc głównie powstrzymuję się od zobaczenia działającego kodu. :)

Czy to powszechne uczucie dla wielu osób? Czy to zjawisko specyficzne dla języka? (Ponieważ w C ++ można napisać to samo na różne sposoby).

Co powinienem zrobić, jeśli otrzymam to uczucie ponownego faktoryzowania kodu produkcyjnego w świecie rzeczywistym, w którym zmiana działającego kodu nie przyniesie mi wielu pochwał, ale może wywołać problemy, jeśli się nie powiedzie.

iammilind
źródło
14
Byłbym bardziej zaniepokojony, gdyby nigdy nie znalazłem problemów ze starym kodem. To pokazuje, że Twoje umiejętności się rozwijają.
Darren Young,
1
Jeśli spojrzysz na swój stary kod i nie myślisz „do cholery, dlaczego nie zrobiłem tego w ten sposób ?!”, to nie nauczyłeś się wystarczająco odkąd go napisałeś.
sbi

Odpowiedzi:

17

Zjawisko to jest bardzo powszechne i nie jest specyficzne dla programistów. Za każdym razem, gdy wykonujesz zadanie intelektualne, zauważysz dziesiątki miejsc, w których mógłbyś się poprawić - po pewnym dystansie. Zadać mądry (wo-) Człowiek, który nigdy nie napisał pracy magisterskiej, a oni powiedzieć jedno: „Nie patrz na niego można będzie znaleźć błąd na pierwszy rzut oka.”

Zasadniczo istnieją dwie rzeczy, aby uniknąć pętli refaktoryzacji:

  1. Pisząc i projektując, staraj się uzyskać odległą perspektywę jak najwcześniej. Poproś kolegę o obejrzenie twojego projektu / kodu. Spójrz ponownie po weekendzie. Spójrz na to, gdy jesteś pijany lub naćpany (ale uważaj: nie zmieniaj niczego, dopóki nie będziesz trzeźwy).
  2. Żyj z niedoskonałością. Jeśli jest po prostu nie ładny, ale działa dobrze (czytaj: wykonuje dobrą robotę, spełniając wszystkie wymagania, w tym rozszerzalność i czytelność), pozwól mu stać i zadowalać się dobrą pracą, którą wykonałeś, nie dążąc do idealnej pracy.
Thiton
źródło
Przeczytaj to. en.wikipedia.org/wiki/Buyer's_remorse Bardzo pomocny.
S.Lott,
3

Ciągłe refaktoryzacja to droga. Zmiana działającego kodu nie spowodowałaby problemów i należy go zachęcać, jeśli zostanie wykonana poprawnie. Jeśli Twój kod jest w pełni przetestowany jednostkowo, możesz ponownie zredagować kod z pewnością.

Jedyną rzeczą, którą możesz przewidzieć w kodzie produkcyjnym w świecie rzeczywistym, jest zmiana. Nie próbuj zgadywać, jak to się zmieni, jakich nowych technik nauczysz się jutro. Krótko mówiąc, nie staraj się, aby Twój kod był „idealny”. Po prostu zrób to tak dobrze, jak potrafisz dzięki swojej obecnej wiedzy. Upewnij się także, że Twój kod jest dokładnie przetestowany i rozszerzalny.

Spędzam 20% -30% czasu na refaktoryzacji istniejącego kodu. Pracuję w firmie technologicznej, a „zarząd” nigdy nie narzekał na zmianę istniejącego kodu. Zdaję sobie jednak sprawę, że w niektórych firmach może to stanowić problem. Martin Fowler ma nawet sekcję na ten temat w swojej książce poświęconej refaktoryzacji .

Podsumowując, jest to powszechne odczucie w moim doświadczeniu, ale nie jest negatywne.

Żeton
źródło
2

Każdy moduł / funkcja rodzi się i ewoluuje w świecie priorytetów. Kiedy wystarczy, aby służyć celom światów zewnętrznych, często pozostaje w stagnacji. Wszystko to ostatecznie rusztowania służy w wyższym celu. Tak, musimy mieć obsesję na punkcie kodu i tak, może to również spowodować zastój. Być może dobrym posunięciem byłoby odsunięcie nieco uwagi od samego kodu i zastanowienie się nad procesami, które zachodzą w tobie, producentem kodu.

znak
źródło
2

Czy to powszechne uczucie dla wielu osób? Czy to zjawisko specyficzne dla języka?

Oznacza to, że poszerzasz swoją wiedzę i poglądy.

Jeśli nie masz zadań o wyższym priorytecie, zawsze powinieneś wrócić i poprawić swój kod.

BЈовић
źródło
„... wróć i popraw swój kod”. - kto ci za to zapłaci? Gdy kod zadziała, przejdź dalej. Gdy uczysz się i rozwijasz jako programista, ZAWSZE znajdziesz lepsze sposoby robienia rzeczy i czujesz, że twoje wcześniejsze wysiłki można poprawić. Oprzyj się pokusie zrobienia czegokolwiek - cofanie się i poprawianie starego kodu to przede wszystkim wielka strata czasu.
Dawood ibn Kareem
1
@David Wallace - Gdyby nikt nigdy nie musiał wracać do starego kodu, nie robilibyśmy takiego zamieszania.
JeffO
1
„Gdy twój kod zadziała, przejdź dalej” - nie uwierzysz, jakie błędy widziałem w kodzie produkcyjnym, ponieważ kod działał;)
22овић
@Jeff O - to bardzo prawda. Jeśli zamierzam zachować stary kod, rozważę jego naprawienie, niezależnie od tego, czy jest to mój kod, czy kod innego użytkownika. Ale jeśli nie ma projektu z kilkoma dolarami, który wymaga utrzymania tego kodu, nie ma sposobu, aby uzasadnić czas poświęcony na jego uporządkowanie. Oczywiście, chyba że jest wadliwy.
Dawood ibn Kareem
@VJovic - jeśli były błędy w produkcji, to dlatego, że kod NIE działał. Myślę, że OP mówił o kodzie, który działa poprawnie, ale jest brzydki.
Dawood ibn Kareem
2

Zawsze uważałem, że osoba bierze udział w zajęciach z matematyki, aby wzmocnić swoje umiejętności w poprzedniej klasie. Algebra wydawała się trudna, dopóki nie zabrałeś Algebry II; Wtedy umiejętności nabyte w Algebrze stały się przydatne. To samo dotyczy programowania, pisania, obróbki drewna lub czegokolwiek innego.

Podczas kursu programowania nauczyłeś się o If-then-else, który robił wiele rzeczy, dopóki nie nauczyłeś się o przełącznikach. Kiedy uczysz się czegoś nowego, przechodzisz przez ten postęp, wszyscy to robią.

mhoran_psprep
źródło
2

Czuję to samo, gdy czytam większość kodu napisanego przeze mnie w przeszłości. To dobra rzecz, oznacza to, że twoja wiedza i styl kodowania poprawiły się na przestrzeni lat.

Jeśli chodzi o zmianę działającego kodu produkcyjnego, jest to duże nie, chyba że zauważysz oczywiste błędy. Nie tylko dlatego, że może to być strata czasu, ale co ważniejsze, ponieważ ogromna większość stworzonych błędów oprogramowania jest tego rodzaju, które są wprowadzane, gdy wprowadzane są zmiany w wydanych programach. Statystycznie prawdopodobne jest, że wprowadzisz nieprzewidziane błędy. Jeśli nie jest zepsuty, nie naprawiaj go.


źródło
1

Opracowanie aplikacji oznacza ulepszenie i ulepszenie; jest to proces ciągły, więc podczas programowania zdobywasz więcej doświadczenia i wiedzy. Oznacza to również, że się rozwijasz, więc kiedy spojrzysz wstecz na swój stary kod, możesz odkryć, że można go ulepszyć.

Jeśli nie masz tego uczucia, oznacza to jedną z dwóch rzeczy:

  1. Nadal masz ten sam poziom umiejętności.
  2. Twój kod jest już idealny (mało prawdopodobne).
CVist
źródło