Bardzo często utknąłem przy wyborze najlepszej decyzji projektowej. Nawet w przypadku drobnych szczegółów, takich jak definicje funkcji, przepływ sterowania i nazwy zmiennych, spędzam niezwykle długie okresy, analizując korzyści i kompromisy z moich wyborów.
Czuję, że tracę dużo wydajności, spędzając godziny na takich nieistotnych szczegółach. Mimo że w głębi duszy wiem, że mogę zmienić te rzeczy, jeśli mój obecny projekt się nie powiedzie, mam problem z podjęciem zdecydowanego wyboru.
Co powinienem zrobić, aby zwalczyć ten problem?
Odpowiedzi:
Dwie proste zasady:
Gdy zaczniesz robić każdą z tych rzeczy, zyskasz pewność, że możesz teraz podejmować proste decyzje bez uszczerbku dla twojej zdolności reagowania na zmiany później.
Pamiętaj, że korekta w przyszłości oznacza łatwość zmiany kodu, a nie próbowanie przewidywania wszystkich możliwych sposobów zmiany kodu.
źródło
Zwykle, gdy czuję się w ten sposób, oznacza to, że muszę spróbować:
Jeśli problem dotyczy składni i małych elementów, wówczas:
źródło
Bardzo łatwo jest myśleć o bezczynności. Nawet jeśli uda jakoś wymyślić najlepsze rozwiązanie w tej chwili , że może łatwo zmienić przed zakończeniem projektu, a co potem?
Lepiej wybrać przyzwoite rozwiązanie i biegać z nim, niż usiąść i zastanowić się, jakie byłoby najlepsze rozwiązanie. Najlepsze rozwiązanie jest nieuchwytne, a co gorsza - subiektywne. Jeśli wymagania zmienią się nawet nieznacznie, Twoje rozwiązanie może okazać się gorsze niż rozwiązanie, które odrzuciłeś, ponieważ nie było wtedy najlepsze.
źródło
Uczę się również unikać paraliżu analizy, więc cześć dla nas =) To często się zdarza, ponieważ chcemy zrobić „najlepszy projekt”. W rzeczywistości „najlepszy” jest w oku patrzącego . Moją formułą, aby uniknąć paraliżu analizy, jest zastosowanie wystarczająco dobrej zasady projektowania . Jak ja to robię? Wprowadzam zmienne takie jak ograniczenia czasowe, harmonogram i zadaję sobie pytanie, jaki jest najprostszy projekt, który może wykonać zadanie (nie oznacza to najłatwiejszego) bez pogorszenia jakości, ale jednocześnie upewniam się, że jest to testowalne i otwarta na przedłużeniu zamknięte modyfikacji (OCP)również projekt. Co mam na myśli przez testable i OCP? Cóż, zamiast szukać tego, co uważałem za najlepsze, zastanowiłem się nad projektem, który może mi powiedzieć, kiedy coś idzie nie tak, i spróbować zrobić tyle kodu, który pozwoli mi zreformować i poprawić później. Ponadto, staramy się oddzielić kod, który będzie się zmieniać wraz z kodem, który pozostaje taki sam. Refaktoryzacja staje się łatwiejsza, ponieważ kod, który nie powinien się zmieniać, jest bezpieczniejszy od twojej przyszłej ciebie lub kogoś innego.
źródło
Co powiesz na to, by pozwolić sobie na przeczucie wyboru jednej z opcji? Powinno to iść dość szybko i dobrze łączyć się z timeboxingiem , który również zaproponował ammoQ . Możesz spróbować limitu 1 minuty, jeśli opcje są już ustalone, lub 2 minut, jeśli musisz je najpierw zdefiniować. Lub cokolwiek wydaje się właściwe (zdefiniowane wcześniej). Kiedy nauczysz się słuchać instynktu jelitowego, intuicyjny wybór stanie się szybszy i lepszy z praktyką .
Jeśli martwią Cię możliwości wybrania nie idealnie, oto kilka pomysłów na rozwiązanie tego problemu:
Powodzenia! :)
źródło
Myślę, że to odchodzi z małym doświadczeniem. Większość mojego paraliżu dzieje się, ponieważ próbuję sobie wyobrazić, jak baza kodu będzie wyglądać znacznie dalej, niż jest to konieczne, więc aby ją przezwyciężyć, po prostu robię najprostszą możliwą rzecz, która zadziała, a następnie przejdę dalej. Gdy projekt ma określony kształt, powtarzające się jednostki kodu zaczynają się wyróżniać i łatwo jest wyodrębnić powtarzające się wzorce i uprościć kod.
źródło
Aby przezwyciężyć niechęć do decydowania, zastosuj timeboxing : ustaw budzik na kilka minut; dręczyć swój umysł do tego czasu, ale kiedy włączy się alarm, wybierz najlepszą z dotychczas dostępnych opcji.
źródło
Utwórz prototyp. Pamiętaj, że prototyp został wyrzucony, więc nie ma znaczenia, jakich funkcji, nazwy zmiennej, a nawet wielkiej architektury używasz. Po prostu budujesz go, aby udowodnić, że działa.
Gdy go utworzysz i wyrzucisz, chętnie się założę, że podejmowanie takich decyzji będzie łatwiejsze.
źródło
Też cierpię z tego powodu. Powiedziałbym, że nie masz wystarczającej motywacji do ukończenia.
Na przykład, kiedy pisałem kod renderujący, miałem dużą zachętę do ukończenia, ponieważ wiedziałem, że gdybym sobie z tym poradził, zobaczyłbym system w akcji i pomyślałbym, jak wspaniale było pisać tekst na quadzie, lub przekształcenie vert. Ale teraz, kiedy zmieniam faktoring (próba 4, jeśli chcesz wiedzieć), cierpię, ponieważ to dużo pracy, a nawet jeśli skończę, zobaczę ten sam stary quad. I naprawdę nie chcę ponownie refaktoryzować i mam dość ciągłego oglądania tego samego starego quada i nie jest to dla mnie żadna nagroda.
Musisz rozbić go na komponenty i nagrodzić się za ich ukończenie, nawet jeśli jest to tylko niektóre we / wy konsoli, które pokazują, że działa.
źródło
Czytałem twoje pytanie i zastanawiałem się nad innymi plakatami: nie nadajesz się do tej pracy; wyznaczyć sobie termin; zrób coś jeszcze przez chwilę. Po krótkiej refleksji nie jestem pewien, czy którakolwiek z odpowiedzi jest tak pomocna
Problem z takimi problemami psychicznymi polega na tym, że nie są one łatwe do rozwiązania, są częścią ciebie i oczywiście zależy ci (zbyt wiele) na swojej pracy, nie masz pewności, by się ze sobą zgodzić, są też zbyt Niedoświadczony, że przez cały czas miałeś rację, lub zbyt mocno stresujesz się nad tym, aby idealnie go wybrać. Dlaczego miałbyś się martwić takimi błahostkami ?!
Teraz mam podobne problemy, ale nie tyle z kodem ... zwykle jest to, co na obiad .. pizza lub curry .. hmm ... pizza, ale curry jest fajne, ale czy czuję się jak curry, pizza jest tańsza , ale wtedy dostajesz więcej curry, ale ... i tak dalej. :)
Pomyślałem więc - dlaczego nie mam podobnych problemów z kodowaniem i myślę, że po prostu dlatego, że mam zestaw wzorców, z których regularnie korzystam. Jeśli potrzebuję definicji funkcji, to jest łatwe ... będzie w tym samym stylu, co każda inna definicja funkcji, jaką kiedykolwiek kodowałem. Jeśli potrzebuję przepływu kontrolnego, najpierw decyduję, czy potrzebuję pętli for, czy chwilowej, a następnie tworzę ten sam stary kod, którego użyłem ostatnim razem, gdy potrzebowałem jednej z tych rzeczy. To samo dotyczy wszystkiego, czy chcę kolejkę? Jasne - chodźmy wyciąć i wkleić mój „standardowy” kod kolejki (pobrany z ostatniego projektu, nad którym pracowałem, lub dowolnego, który pamiętam, używając jednej z tych rzeczy). Efekt końcowy ... Martwię się tylko o nowe rzeczy i szczerze mówiąc, to przyjemność.
Tak więc, radzę zacząć budować bibliotekę fragmentów kodu - zwykłem przesyłać je e-mailem do siebie i umieszczać w folderze, ale wszystko, z czym pracujesz, jest najlepsze - a wtedy zaczniesz wiedzieć, co robić za każdym razem. Zawsze przejdziesz do starego kodu, który napisałeś, i usuniesz problem z pracy, gotowy na następny problem. Przekonasz się, że zostałeś znacznie szybszym programistą (poważnie, to jedyny sposób na zwiększenie produktywności programisty) i mam nadzieję, że znajdziesz czas na zabawne elementy, a nie na ponure codzienne rzeczy, które już rozwiązałeś wiele razy koniec.
Oczywiście ostatnia część wszystkiego jest również ważna - im więcej pracy masz, tym mniej luksusu musisz poświęcić na myślenie.
źródło
Oto strategia łącząca sugestie Reina Henrichsa ( rozpoczęcie proste, refaktoryzacja ) i amunicji ( timeboxing ):
x
, a następnie dopracowaćstring
, a potem,name
aż czas się skończy.userHandle
Możliwe korzyści z tego podejścia:
źródło
Kiedy przeprowadziłem badania i nie mam jednoznacznego najlepszego wyboru, daję sobie limit czasu (zwykle 5 minut) na wybranie jednego, a następnie po prostu idę naprzód. Nawet jeśli napotkasz przeszkody, w tym momencie nie ma gwarancji, że nie trafiłbyś na taką samą przeszkodę, podejmując inną decyzję. Nie mogę wymyślić momentu, w którym żałuję swojej decyzji.
źródło
Zwykle powodem, dla którego nie możesz podjąć decyzji, jest to, że różnica jest nieznaczna lub nie masz wystarczającej ilości informacji.
W przypadku, gdy: a) Ustaw termin na przedstawienie rozsądnych opcji do rozważenia. Nie decyduj jeszcze, który z nich. Na koniec wybierz jedną (losowo, jeśli nie ma wyraźnej preferencji) ze wskazanych opcji i inny limit czasu. Jeśli pod koniec czasu nie zostanie podjęta jasna decyzja, jest to już ta wybrana. Rozpocznij kodowanie i dokonaj refaktoryzacji, jeśli wyraźnie popełniłeś błąd. Jeśli szef zapyta dlaczego, powiedz „Rzuciłem monetą, masz lepszy sposób?”
W przypadku b) - potrzebujesz więcej informacji, a siedzenie na dużym tłuszczu A .... przez cały dzień ich nie dostarczy. Wyjdź z trybu projektowania i przejdź do trybu zbierania informacji. Prototypy, zadawaj pytania, czytaj czasopisma techniczne. Cokolwiek robisz, nie śpij zbyt długo.
źródło
Często najlepszym rozwiązaniem jest wyjaśnienie swojej decyzji koledze. Ponieważ jednak nie chcesz tego robić zbyt często, następną najlepszą rzeczą jest myślenie na papierze - albo za pomocą papieru / długopisu, albo pustego okna notatnika.
Zacznij od napisania absolutnie wszystkiego - tylko po to, aby wejść w rytm pisania. W oknie notatnika możesz po prostu wpisać „myślę na papierze”, a następnie kontynuować strumień świadomości. Po kilku sekundach będziesz w rytmie pisania, więc naciśnij kilka razy enter i zacznij wyjaśniać swój dylemat.
Określ problem, a następnie podaj możliwe rozwiązania, co jest dobre w każdym z nich itp.
Chociaż nie zawsze działa, proces wydobywania myśli z głowy (RAM) i na media zewnętrzne (dokument notatnika) daje większą swobodę nawiązywania nowych połączeń i patrzenia na decyzję z różnych perspektyw.
źródło
Cierpię na ten sam problem. W przypadku drobnych problemów próbuję sobie z tym poradzić, jeśli chodzi o pierwszy projekt, który według mnie nie jest głupi. Nie ma sensu szukać optymalnego projektu; trudno jest, jeśli nie niemożliwe, uzasadnić wszystkie niuanse każdego projektu, o którym możesz pomyśleć bez napisania tego. W miarę pisania kodu zauważysz, że możesz wprowadzić niewielkie ulepszenia. Zrobione dobrze, uważam, że dość łatwo jest w ten sposób uzyskać dość dobre rozwiązanie.
W przypadku większych problemów wydaje mi się, że warto najpierw przemyśleć opcje, ale z czasem to zrobić. Duże problemy mają duże przestrzenie rozwiązań, nie możesz ocenić każdej możliwości, nie powinieneś też próbować.
TLDR; Wybierz rozsądne rozwiązanie, ulepszaj je na bieżąco.
Dotyczy to również:
z http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html .
źródło
Nigdy tego nie zrozumiałem. Kiedy byłem instruktorem, powiedziałbym coś takiego:
Może nie jest to zbyt skomplikowane, a 95% ludzi napisało coś takiego:
Ale od czasu do czasu pojawiał się ktoś sparaliżowany w świetle reflektorów jak królik. Spytałbym współczująco, na czym polega problem, a oni powiedzieliby: „Nie wiem, jak to nazwać!”.
To są ludzie, którzy powinni szukać innej kariery. Jak może powinieneś.
źródło