Radzenie sobie z frustracją, gdy rzeczy nie działają [zamknięte]

62

Zawsze próbujesz wdrożyć coś prostego, ale z jakiegoś dziwnego powodu to nie działa.

Więc wypróbujesz możliwe rozwiązanie, ale wtedy coś innego nie działa. Próbujesz różnych obejść, ale za każdym razem coś innego nie działa.

Za każdym razem, gdy zbliżysz się o jeden krok, dostaniesz także jeden (lub więcej) krok dalej od rozwiązania tego problemu, a teraz minęły 3 godziny, kiedy powinno to zająć ci 10 minut. I nadal nie jest rozwiązany.

W Twojej firmie nie ma nikogo, kto mógłby pomóc, a ty masz zamiar położyć pięść na ekranie.


W tym momencie jesteś tak sfrustrowany, że nie możesz już jasno myśleć o problemie. Co powinieneś zrobić w tym momencie? Lub co możesz zrobić, aby uniknąć osiągnięcia tego punktu?

JD Isaacks
źródło
3
Myślę, że ty i ja mieliśmy / mamy takie same doświadczenia.
AndrewKS
19
Połóż to na SO i zaoferuj nagrodę.
JeffO
4
Gdyby to było takie proste. Niektóre z tego rodzaju problemów należą do wielu martwych / nieodebranych / nieudanych odpowiedzi.
Aditya P
2
To pytanie wydaje się nie na temat, ponieważ należy ono do witryny workplace.stackexchange.com
Kilian Foth,
Ten sam problem i to samo pytanie.
Anwar

Odpowiedzi:

69

Chociaż jest to prawdziwy problem, nie jest specyficzny dla programowania. Jednak IMHO jest tak ważne, że zasługuje na miejsce na tym forum.

Moje sugestie: odpocznij . Idź na spacer, medytuj, śpij, wykonuj aktywność fizyczną * - zrób coś zupełnie innego, aby twój mózg mógł się zrelaksować i wydostać z mentalnej koleiny , jednocześnie pozwalając podświadomości spokojnie pracować nad problemem. Zwykle zapewnia zaskakująco szybkie wyniki - wystarczy o tym poinformować. Ale podczas gdy twój świadomy umysł desperacko powtarza te same cykle myśli w kółko, nie będzie w stanie słuchać niczego innego.

co możesz zrobić, aby uniknąć osiągnięcia tego punktu?

Techniki relaksacji i uważności są kluczem do przezwyciężenia reakcji na stres i pozwalają umysłowi wyraźnie się skoncentrować. A praktykowanie ich naprawdę się opłaca. Gdy ktoś ma w tym doświadczenie, może już zauważyć wzrost poziomu stresu, zanim frustracja może przejąć kontrolę . Następnie można przerwać cykl myśli, np. Biorąc kilka głębokich oddechów lub wykonując kilka minut ćwiczeń relaksacyjnych. To może być wszystko, co jest potrzebne w tym momencie.

* całuj partnera, pieszcz swojego zwierzaka - sugestie mojej żony :-)

Péter Török
źródło
12
+1, Nasz umysł ZAWSZE próbuje rozwiązać problemy, tylko dlatego, że nie próbujemy go rozwiązać świadomie, nasz umysł wciąż się odsuwa. Właśnie dlatego pozornie pamiętasz nieoczekiwane imię, godzinę po tym, jak nie potrafiłeś go sobie przypomnieć. I obudź się z problemem rozwiązanym w środku nocy. Świetna książka wyjaśniająca to: Pragmatyczne myślenie i uczenie się: Refaktoryzuj swoje wetware
CaffGeek
+1 Nie mogłem powiedzieć lepiej siebie. Wychodzę z kostki, wychodzę z biura i spaceruję po mieście, dzwonię do żony, a potem wracam do biura. Działa prawie w 100% przypadków.
Pan Ant
9
I nie pracuj więcej niż 8 godzin dziennie. Im bardziej jesteś zmęczony, tym łatwiej jesteś sfrustrowany.
HLGEM
3
Kiedy robię sobie przerwę na siusiu, często mam problem rozwiązany, kiedy wracam do biurka. To tak, jakby twoja podświadomość czeka, aż twoja świadomość się zamknie.
barrycarter
1
@ Junxiong, można korzystać z tych technik nawet pod presją czasu, ale wymaga to doświadczenia. Ktoś, kto np. Medytuje od lat, może opanować się i uspokoić w ciągu kilku minut, a nawet sekund. Ale próba nauczenia się czegoś nowego - a zwłaszcza uważności - pod presją czasu jest bardzo trudna. Jeśli wszystko inne zawiedzie, weź to jako ważną lekcję, a po upływie terminu zacznij przygotowywać się do następnego kryzysu , analizując swoje zachowanie i ćwicząc niektóre techniki wymienione tutaj lub w innych odpowiedziach.
Péter Török
35

minęły 3 godziny, a powinno to zająć ci 10 minut.

Magiczne słowo powinno . Uderz to w swoje słownictwo.

Kto powiedział, że powinno to zająć 10 minut? Kto konkretnie Jaka była faktyczna podstawa ich roszczenia?

Jeśli zrobiłeś w 3 razy, i za każdym razem byłeś blisko 10 minut, masz racjonalną podstawę dla powinniśmy .

Jeśli nigdy wcześniej tego nie robiłeś, powiedzenie „ powinieneś” tylko przygotowywać się na porażkę. Powinieneś przestać używać powinien już dziś.

S.Lott
źródło
2
Oczywiście jest wiele rzeczy, które zrobiłeś milion razy, które pewnego dnia po prostu przestały działać. Uszkodzony plik w jakimś automatycznie generowanym kodzie może być naprawdę frustrujący i czasami jest bardzo trudny do debugowania. Myślę o czasach, w których przypadkowo nazwałem dwie rzeczy tą samą nazwą, a następnie użyłem narzędzia refaktoryzacji, aby zmienić wszystkie instancje, w których ta nazwa wystąpiła. Kilka razy wykonałem ten oszałamiający ruch za pomocą klas, które były w konflikcie z moimi klasami wygenerowanymi przez ORM. Zrób coś takiego, a lepiej mieć nadzieję, że dobrze sobie radzisz z zameldowaniami.
Morgan Herlocker,
1
@Prof Plum: „Kilka razy wykonałem ten kościsty ruch”. Doskonały punkt Oznacza to, że oczekiwanie musi obejmować czas na ten ruch z głową w kości. Ponownie, „powinien” powinien obejmować wszystkie fakty, a nie fakty „jeśli wszystko poszło dobrze”, z wyłączeniem faktów o „koścowym ruchu”.
S.Lott,
22

Znajdź kogoś, kogo użyjesz jako planszy

Nawet jeśli nikt nie ma specjalistycznej wiedzy na temat tego, nad czym pracujesz, dobrym pomysłem jest częste rozmawianie o tych sprawach. Już sam fakt użycia kogoś jako płyty rezonansowej może sprawić, że twój umysł zacznie się obracać. Przekonasz się, że myślisz o nowych rzeczach do wypróbowania. Łagodzi też trochę stres i potencjalnie zawiera nowego przyjaciela. Ogólnie jest to po prostu zdrowe, aby zespół czuł się swobodnie dzieląc się i rozmawiając ze sobą, aby stworzyć atmosferę zorientowaną na zespół do rozwiązywania tego rodzaju problemów.

Doug T.
źródło
7
Nawet jeśli dana osoba nie ma pojęcia o tym, co mu mówisz, sam fakt jej wypowiedzenia pomaga to wyjaśnić.
Michael Brown
2
@Mike, nawet jeśli ta „osoba” jest pluszowym misiem, nadal działa w zaskakująco dużym odsetku przypadków (jest o tym prawdziwa historia w Słowniku hakerów AFAIR)
Péter Török
3
@ Mike Brown - patrz „Debugowanie gumowej kaczki”
ocodo
1
Debugowanie gumowej kaczki? pfft. Trzymam Debugowanie Goomba na moim biurku właśnie z tego powodu, kaczki są lepsze dla zarządzania projektami.
glasnt
Tak, chciałem się odnieść do tego, że ... był zbyt leniwy, by podciągnąć link: P
Michael Brown
9

Odejdź na chwilę i zrób coś innego. Prześpij się dobrze i wróć rano do problemu.

Nie bij się też. Twoje dziesięciominutowe oszacowanie jest oczywiście nieprawidłowe i dzieje się tak przez cały czas.

jprete
źródło
9

Kiedy dochodzę do tego punktu, mam kilka kroków. Zwykle mogę znaleźć rozwiązanie, jeśli poświęcę czas na wycofanie się i zastanowienie.

Krok 1: Odejdź od problemu i oczyść głowę. Wróć, gdy nie będziesz sfrustrowany i możesz spojrzeć na to ze świeżym umysłem.

Krok 2: Wróć do kodu i sprawdź, czy coś Ci umknęło. Niech ktoś przyjdzie i będzie drugim zestawem oczu, jeśli po prostu nie możesz zrobić z niego głów ani ogonów.

Krok 3: Usuń kod z równania. Jaki problem próbujesz rozwiązać? Napisz na kartce papieru lub tablicy. Porozmawiaj z kimś na temat problemu, aby uzyskać jego opinie na temat problemu i rozwiązania.

Krok 4: Skontaktuj się ze społecznością, aby sprawdzić, czy mają rozwiązanie lub czy ktokolwiek kiedykolwiek uderzył w tę samą ścianę.

Zasadniczo można je podsumować jako „Przestań hakować i odejdź od kodu”.

Tyanna
źródło
Cały czas używam tablicy. Bardzo przydatne do wizualizacji podczas debugowania.
Michael K
Krok 3 jest znany jako zmiana dziedziny problemu, aby sprawdzić, czy można ponownie wykorzystać sukces równoległy. Jest również określany jako metafora.
Kurucu
2

Chciałbym zadać pytanie tutaj i poprosić społeczność o pomoc w jego rozwiązaniu. Mniej stresujące w ten sposób.

Bernard
źródło
6
Czasami samo pisanie pytania prowadzi do rozwiązania
JoelFan
1

Mam inne rozwiązanie - ŚPIENIE !!

Kiedy jesteś sfrustrowany problemem, nie możesz z niego łatwo wyjść. Lepiej więc, jeśli zmęczysz się próbą rozwiązania problemu, a potem zaśniesz.

Kiedy się obudzisz, poczujesz świeże uczucie i znów będziesz mógł jasno myśleć o problemie. Czasami to robię.

ruben
źródło
Nie być głupkowatym, ale to „inne” rozwiązanie zostało wspomniane w co najmniej dwóch wcześniejszych odpowiedziach.
Péter Török
1
co miałem na myśli -> nie tylko odpocznij, chodź lub śpij, a raczej zmęczyć się próbując rozwiązać problem, a następnie spać. ponieważ kiedy masz w sobie problem, możesz z niego nie wyjść łatwo
ruben
1

Po osiągnięciu tego punktu staram się znaleźć coś, co pomoże odzyskać pewność siebie. Może to być rozwiązanie zagadki Sudoku lub Kenkena, wykonanie prostych, bezmyślnych zadań administracyjnych, takich jak wypełnienie mojego arkusza czasu lub wyjście na spacer. Kluczem tutaj jest, abym miał poczucie osiągnięcia w tym wszystkim, czym jest to małe rozproszenie z boku, aby pomóc mi pompować mnie na tyle, że mogę wrócić na konia i odjechać do dzikiego niebieskiego tamta, aby wymieszać tam kilka metafor.

Jeśli chodzi o unikanie tego złego, prawdopodobnie zasugerowałbym jakąś strategię boksu czasowego, aby jeśli wierzysz, że zajmie to 10 minut i nagle godzina później nie będzie dużego postępu, zatrzymałbym się mała przerwa zamiast starać się walić głową w ścianę.

JB King
źródło
1

Mam specjalną nazwę dla tego rodzaju sytuacji: epicka bitwa programistyczna .

Jeśli nie miałem przynajmniej jednej epickiej bitwy programistycznej z określonym językiem programowania lub narzędziem i nie rozwiązałem problemu, nie mogę powiedzieć sobie, że mogę używać takiego języka programowania lub narzędzia.

Oto moje rozwiązanie: mentalizuj je jak walkę i próbę odwagi i wytrwałości . Jeśli nie mogę rozwiązać problemu, „ żyję, by walczyć innego dnia ”.

Może to zabrzmieć odrobinę niedorzecznie, ale będzie zabawniej i przyjemniej pomyśleć o tym w tych kategoriach (jakby to była jakaś gra, którą musisz wygrać) zamiast cierpieć przez całą drogę, ponieważ musisz zmierzyć się z faktem , że nie wiem wszystkiego .

dukeofgaming
źródło
0

Cóż ... Myślę, że potrzebujesz nowej kariery lub zupełnie nowych oczekiwań. Chociaż na pewno nie jest to częste, poświęcenie 3, 4, 8, 10 lub 40 godzin na zrobienie tego, co pierwotnie uważałeś za 10 minut pracy, z pewnością nie jest rzadkie w branży oprogramowania. Jestem pewien, że większość programistów, którzy pracują na czymkolwiek nawet o umiarkowanym stopniu złożoności, mieli zadania 2-dniowe, które zamieniły się w zadania 1-miesięczne, gdy zrozumieli problem.

Częścią dobrego bycia deweloperem jest cierpliwość, w przeciwnym razie komputer wygra, a w końcu zastosujesz jakiś szybki hack naprawczy, który ledwo wydaje się działać, ale nieuchronnie zepsuje coś, o czym nie pomyślałeś. Jeśli drobne opóźnienia powodują tyle stresu, prawdopodobnie nie powinieneś być w tej pracy.

Maczać
źródło
0

Dwie sugestie:

  1. Najmądrzejsza osoba, jaką znam, która ma dwa doktoraty i ma tytuł „Research Fellow” w małej prywatnej firmie, mówi:

    Jeśli zastanawiasz się nad tym przez 15 minut i nie znasz odpowiedzi, robisz to źle.

    Przestań o tym myśleć.

    Zdrzemnąć się. (idź na spacer czy coś)

    Odpowiedź będzie dostępna po przebudzeniu.

  2. Pobierz książkę Davida J Agana „Debugowanie” . Prawdopodobnie nauczy Cię więcej o debugowaniu, więc gdy coś nie działa, możesz szybko debugować.

Tim Williscroft
źródło
0

Kiedykolwiek mam do czynienia z czymś, co nie działa, zawsze pamiętam ten cytat:

Kiedy jesteś w piekle, idź dalej, ponieważ jest to najlepsza rzecz, jaką można zrobić w tym momencie.

Zrób sobie przerwę, spróbuj odświeżyć się i skoncentruj na problemie z nowym poziomem energii.

Rachel
źródło
0

odpowiadając na rekomendacje innych:

  • ta sytuacja jest prawie zawsze czymś trywialnym, czego po prostu nie widzisz ; Zrób sobie przerwę
  • kolejna para oczu lub nawet wyjaśnienie problemu twojemu kotowi może pomóc

i dodając:

  • ponownie przeanalizuj swoje założenia, zwłaszcza te niepotwierdzone; są szanse, że szczekasz na niewłaściwe drzewo
  • odwróć sytuację: załóż, że bieżące zachowanie jest pożądanym rezultatem, więc co musisz zrobić z kodem, aby tak się stało?
  • napisz kod testowy (potwierdzenia lub rejestrowanie lub warunkowe punkty przerwania - uprość), aby zweryfikować swoje założenia wzdłuż ścieżki wykonania
Steven A. Lowe
źródło
0

Czasami najlepiej nie próbować po prostu rozwiązać problemu. Poświęć trochę czasu i napisz pseudo kodem, co musisz zrobić. Wiem, że istnieje presja, aby robić rzeczy tak szybko, jak to możliwe, ale z tego, co widziałem, ten styl kodowania prowadzi do opisanej przez ciebie sytuacji. Jeśli ktoś napisze kod, który będzie działał tylko w przypadku niewielkiego zestawu warunków i zestawu zmian, kod złamie się lub zrobi nieoczekiwane rzeczy.

Poza tym (nie cierpię przyznać, że moi profesorowie mieli rację ...), dokumentacja i testy jednostkowe pomagają. Ułatwiłoby to ustalenie, jaką sekcję kodu wyda dany zestaw danych wejściowych. Wtedy łatwiej byłoby zobaczyć, jaki efekt spowoduje zmiana danych wejściowych sekcji.

Jan
źródło
0

Zmęczenie lub brak snu nigdy nie stanowią dla mnie problemu. Jestem bardziej sfrustrowany brakiem organizacji w całej branży i ogólnie niskimi standardami, które sami sobie wyznaczyliśmy. Oto pięć rzeczy, które mnie frustrują:

  1. Interfejsy API, które są skomplikowane w projektowaniu. To jest jak nauka zupełnie nowego języka programowania. W rzeczywistości niektóre interfejsy API są znacznie trudniejsze do nauczenia niż nauka nowych języków programowania. Podziwiam twoją inteligencję, ale mogłeś zaoszczędzić mi czasu, zamieszczając dokumentację, że potrzebowałem doktoratu z inżynierii oprogramowania lub informatyki, aby ją zrozumieć.

  2. Brak dobrej dokumentacji. Nigdy nie mogę przeoczyć faktu, że tak wielu projektantów API spędza dużo czasu na tworzeniu API tylko po to, aby go wydać przy minimalnej dokumentacji. Dzięki, ale jak mam to wykorzystać? Co robić w tej sytuacji? itp.

  3. Autorskie implementacje. Niektóre własnościowe implementacje są w porządku, ale jeśli istnieją standardy, dla dobra ludzkości prosimy o przestrzeganie tych standardów. Nic bardziej frustrującego niż spędzanie czasu na zastanawianiu się, dlaczego coś nie działa tylko po to, aby odkryć, że implementacja nie spełnia normalnych standardów.

  4. Środowiska / ograniczenia w piaskownicy. Ok, może to pomaga powstrzymać złych ludzi, ale moim zdaniem ograniczenia w tym, co może zrobić programista, ograniczają tylko kreatywność i postęp technologiczny. Wiele świetnych pomysłów, które zostały mi wyrzucone z równowagi po odkryciu, że nie wolno mi nic robić. Branża programistyczna jest stworzona do tworzenia codziennych aplikacji, a nie innowacyjnych przełomowych programów. Więc jeśli zdecydujesz się zostać programistą, tak naprawdę wybierasz się na współczesnego chuligana, chyba że chcesz zostać samotnym akademikiem.

  5. Nowoczesne dyskusje. Ludzie dzisiaj nadal debatują na temat brzydoty nawiasów Lisp, zalet czystości Pythona lub tego, jak wymierają niektóre języki, takie jak Cobol czy Fortran itp. Naprawdę ludzie? O tym debatujemy? Porozmawiajmy o równoległości lub lepszych sposobach projektowania bezpieczniejszych systemów lub o tym, jak programowanie logiki może poprawić nasze życie. Przestańmy myśleć jak programistów i zacznijmy myśleć jak projektanci jutrzejszego świata.

Więc osobiście nie programuję już tyle z powodu tych frustracji. Dopóki branża nie zdecyduje, że chce zrobić coś więcej niż tylko utworzyć następnego Facebooka lub wymyślić edytor tekstu, jestem gotowy. Zostawię to wam. Szczerze mówiąc, żadne przestępstwo nie oznaczało, że to dobre pieniądze.

irytująca kałamarnica
źródło