Nie mam dużego doświadczenia w pracy w branży oprogramowania, samouku i uczestnictwa w open source przed podjęciem decyzji o podjęciu pracy. Teraz, kiedy pracuję dla pieniędzy, muszę również poradzić sobie z nieprzyjemnymi rzeczami, co oczywiście jest normalne.
Ostatnio przydzielono mi dodawanie rejestrowania do dużego projektu SharePoint, który jest napisany przez programistę, który oczywiście uczył się kodować w zadaniu. Po 2 latach współpracy klient przeniósł się do naszej firmy, ale szkoda została wyrządzona, a teraz muszę jakoś zachować ten kod.
Nie żeby kod był zbyt trudny do odczytania. Pomimo problemów - każdy projekt ma jedną klasę z kilkoma skopiowanymi metodami, ogromne if
zagnieżdżenia, systemy węgierskie, niezakłócone połączenia - wciąż jest czytelny.
Jednak okazało się, że jestem absolutnie bezproduktywny, mimo że pracuję nad czymś tak prostym, jak dodawanie rejestrowania. Zasadniczo muszę tylko przejść krok po kroku i dodać kilka wywołań śledzenia. Jednak idiotyzm kodu jest tak denerwujący, że zmęczyłem się w ciągu 10 minut od uruchomienia . Na początku dodawałem using
konstrukcje, zmniejszałem zagnieżdżanie poprzez odwracanie if
, zmieniłem nazwy zmiennych na czytelne nazwy - ale projekt jest duży i ostatecznie się poddałem. Wiem, że nie jest to zadanie, które powinienem wykonywać, ale przynajmniej zmniejszenie bałaganu dało mi jakąś nagrodę psychologiczną, abym mógł kontynuować. Teraz sztuczka przestała działać i nadal mam 60% mojej pracy do wykonania.
Zacząłem odczuwać bóle głowy po pracy i nie odczuwałem już satysfakcji, którą zwykłem uzyskiwać - co zwykle pozwalało mi kodować przez 10 godzin bez przerwy i wciąż czułem się świeżo.
To nie jest tylko jeden wielki rant, bo naprawdę mam pytanie:
Czy istnieje sposób, aby utrzymać produktywność i nie walczyć z wiatrakami?
Czy istnieje jakaś sztuczka psychologiczna, która pozwala skupić się na zadaniu, zamiast myśleć „ jakie to głupie ?” Za każdym razem, gdy widzę kolejną sprytną sztuczkę poprzedniego programisty? Problem z dodawaniem rejestrowania polega na tym, że tak naprawdę muszę zrozumieć, co robi kod, a to rani mój mózg w nieprzyjemny sposób.
obj
jest zniechęcające, ponieważ jest w zasadzie nieczytelne.Odpowiedzi:
Przykro mi to mówić, ale nie wszystkie prace są pełne słońca i przepychu. Większość zadań programistycznych polega na takich pracach pogrzebowych. Smutne ale prawdziwe.
Wykonujesz ważną pracę, nawet jeśli jest nudna do tego stopnia, że patrzysz, jak farba wysycha. Jest to ważne z dwóch powodów: 1. Dodaje bardzo potrzebne logowanie do dużego systemu, aby gdy coś pójdzie nie tak, będziesz mieć narzędzie, które pomoże ci go znaleźć. i 2. Zapoznanie się z bazą kodu, dzięki czemu jeśli coś pójdzie nie tak, możesz wskoczyć i naprawić.
Zasadniczo tworzysz tutaj własną siatkę bezpieczeństwa. Glamory, nie, ale ważne tak!
Biorąc to pod uwagę, jak należy się motywować? Kiedy w pracy mam odrętwiające zadanie, wyznaczam sobie cele. Zakończ wykonywanie zadania x do końca tygodnia. Jeśli osiągnę swój cel, nagradzam się. Nowa restauracja, którą chcę wypróbować? Idź w piątek wieczorem, jeśli skończę. Właśnie wyszedł nowy film? Zobacz to w weekend, jeśli skończę.
Rozmawiam z moim przełożonym i powiadamiam go, gdzie jestem i jak robię postępy, dlatego jestem odpowiedzialny. Jeśli powiem im, że skończę do piątku, czuję się bardziej skłonny zrobić to do piątku b / c Powiedziałem im, że to zrobię.
Miej wiarę, że kiedy wykonasz to zadanie i wykonasz je dobrze, na czas i zgodnie z budżetem, który ludzie zauważą, a kiedy pojawi się ten gówniany nowy projekt, twoje imię może zostać zasugerowane jako ten, który je dostanie. :)
źródło
I didn't finish my under-estimated task by Friday - so I need to stay at home and feel bad.
Zachowaj plik fragmentów kodu kandydata do przesłania na thedailywtf.com. Nawet jeśli tak naprawdę nie zamierzasz ich przesyłać, daje to jasną stronę znalezienia kodu, który jest nawet gorszy niż średnia.
źródło
Byłem w podobnej sytuacji, której zadaniem było oczyszczenie dużej części źle napisanego, masowo skopiowanego i wklejonego kodu.
Aby utrzymać moją motywację i zdrowie psychiczne, napisałem skrypt o nazwie
current_score
LOC, który zliczał LOC w projekcie (który stale się zmniejszał, ponieważ eliminowałem powielanie i przestawiałem się na lepsze algorytmy) i porównywałem go z LOC, kiedy zaczynałem. Ilekroć byłem zniechęcony lub sfrustrowany górą kodu, z którą miałem do czynienia, bieganiecurrent_score
dawało mi poczucie namacalnego postępu i przypominało mi, jak wiele już osiągnąłem. Fajnie było zobaczyć, jak wysoki wynik mogłem znieść, radząc sobie ze szczególnie złym fragmentem kodu.Poszukałbym podobnych wskaźników, które można łatwo napisać, aby dać poczucie postępu i zmienić je w rodzaj gry. Linie kodu (po prostu uruchom
wc -l
), cykliczność złożoności (która powinna spaść, kiedy czyścisz te paskudne zagnieżdżone „ifs”), linie kodu, które zostały dotknięte przez ciebie zamiast twojego poprzednika (myślę, że FishEye może ci to powiedzieć 10 USD) itp. Możesz nawet napisać skrypt Perla bez większych problemów, aby policzyć liczbę bloków kodu, które nie mają jeszcze instrukcji rejestrowania.źródło
Widziałem tę książkę zalecaną: Efektywna praca ze starszym kodem , ale na szczęście nie musiałem go czytać.
Tak jak robisz, popraw to, czego potrzebujesz, aby zrozumieć kod i pamiętaj, że reanimujesz system, który się opłaci, gdy będziesz go utrzymywał.
Miejmy nadzieję, że powinno to pomóc Ci w drodze do domu.
źródło
Spróbuj podzielić projekt na części. Każdego dnia dowiedz się, jak działa określony fragment. Próbowanie zrozumienia wszystkiego naraz jest prawdopodobnie tym, co cię stresuje.
Szczycimy się ulepszaniem projektu. Czy możesz porozmawiać z innymi programistami? Pomaga stać przy chłodziarce i dyskutować / śmiać się z najnowszej logiki, którą znalazłeś. Staram się to robić, aby zachować radosną atmosferę w pracy.
źródło
Rób obszerne notatki, aby uporządkować pytania, przemyślenia i zrozumienie systemu. To zadziałało dla mnie cudownie, gdy mamy do czynienia z dużymi starszymi systemami. Pomaga krystalizować twoje zrozumienie, pomaga ułożyć otwarte pytania w słowa, a ponieważ twoje myśli są już zebrane, ułatwia spontaniczne komunikowanie się z innymi na temat problemów / pytań / pomysłów / itp.
Jako przykład, kiedy przeglądam fragment kodu, będę stale robić notatki dla siebie. To jest moja rozmowa ze sobą. Sam akt pisania pomaga wyjść z większej ilości myśli i pomaga mi lepiej zrozumieć sytuację. Po chwili mogę mieć Eurekę i muszę narysować mały schemat z „większym obrazem” na papierze, aby zilustrować to, co właśnie pomyślałem lub jakie elementy właśnie złożyłem. Zawsze robię to tylko na papierze, pozbywając się wszelkich zakłóceń komputera. To pozwala mi być bardziej metodycznym i przemyślanym na temat tego, co robię.
Jest to w zasadzie wygodny sposób na ciągłą rozmowę z ekspertem domeny :)
źródło
Wiem, że możesz czuć się bezproduktywny, ponieważ patrzysz na to z perspektywy „Dodam tylko rejestrowanie”, podczas gdy w rzeczywistości dodajesz rejestrowanie i robisz dużo refaktoryzacji. Twój przełożony prawdopodobnie zna sytuację z kodem. Każdy może teraz tego nie docenić, ale kiedy pojawi się prośba o dodanie naprawdę interesującej i wymagającej funkcji, z przyjemnością wyczyścisz kod.
źródło
W tych przypadkach zwykle przepisuję sekcję kodu. Aby jeden obszar ssał mniej, a następnie dodałem rejestrowanie gdzie indziej. Następnie posprzątaj trochę kodu. Zły kod jest zły tylko wtedy, gdy go tam zostawisz.
źródło
Gamifikuj swoją pracę. Na przykład, daj sobie 5 punktów za każdym razem, gdy zadajesz dobre pytanie na temat kodu, i 10 punktów za każdym razem, gdy na nie odpowiesz. Daj sobie odznakę za każdym razem, gdy zmienisz metodę lub dodasz nową funkcję. Gdy zdobędziesz wystarczającą liczbę punktów, otrzymasz przywileje, takie jak przerwy na kawę lub herbatniki. Po ukończeniu całego projektu masz przywilej, aby zafundować sobie coś, czego naprawdę chcesz.
źródło
Sztuczka polegająca na tym, aby nie nudzić się ani nie denerwować, aby zachować produktywność, polega na zaakceptowaniu tego, że kod jest źle zaprojektowany. Zaakceptowanie twojego stanowiska w kwestii zrozumienia i aktualizacji kodu pozwoli ci nie komentować „jakie to głupie”, zamiast tego spokojnie go zaakceptuj i przejdź dalej.
Kolejną sztuczką jest posiadanie dobrej rodziny, na którą można się spodziewać pod koniec dnia. Dziewczyny, przyjaciele, gry wszystko będzie działać, aby dać ci cel, aby przejść dzień i sprawić, że trudny, choć zły kod, będzie wart.
źródło
Pomocna może być „Efektywna praca ze starszym kodem” Michaela Feathersa.
Jeśli martwisz się zepsuciem rzeczy podczas ich zmiany, najpierw napisz kilka testów, upewnij się, że przejdą one przed i po wprowadzeniu zmian. Napisanie testu powinno pomóc ci podsumować i zrozumieć, co robi dany fragment kodu i pozwoli ci z pewnością edytować.
źródło