tło
Im dłużej pracuję nad projektem, tym mniej jasne staje się. To tak, że nie mogę już rozdzielić różnych klas / przedmiotów w mojej głowie. Wszystko zaczyna się mieszać i bardzo trudno jest to wszystko ponownie rozdzielić. Zaczynam umieszczać funkcje w klasach, do których tak naprawdę nie należą, i popełniam głupie błędy, takie jak pisanie kodu, który później okazuje się w 100% przestarzały; rzeczy nie są już wyraźnie możliwe do zmapowania w mojej głowie. Dopóki nie cofnę się o kilka godzin (a czasem dni!), Naprawdę mogę zobaczyć, co się dzieje, i być produktywnym.
Zazwyczaj próbuję przez to walczyć, jestem tak pasjonatem kodowania, że przez całe życie nie wiedziałbym, co jeszcze mogę zrobić. To wtedy rzeczy stają się naprawdę dziwne, podnoszę się tak wysoko, że tracę kontakt z rzeczywistością (do pewnego stopnia), że różne działania, takie jak nalewanie szklanki wody, nie mają już miejsca na poziomie świadomości. Dzieje się tak w przypadku auto-pilota, podczas którego prawie cała moja świadoma koncentracja (czy to w ogóle coś?) Poświęcona jest bezsensownemu rozwiązywaniu problemów (próba oddzielenia elementów kodu). To jest jak przegrana bitwa.
Więc wziąłem test IQ jakiś czas temu (Wechsler Adult Intelligence Scale, myślę, że tak było) i okazało się, że moja Spaces Aptitude była dość niska. Nadal mam przyzwoity wynik całkowity , nieco powyżej średniej, więc nie będę musiał zarabiać na życie kijem, ale trochę się martwię, że jest to tak uciążliwe, gdy piszę / inżynierię programów komputerowych, które wygrałem ” nigdy nie będę w stanie zrobić tego poważnie lub profesjonalnie.
Pytanie
Jestem bardzo zainteresowany tym, co myślą o tym inni ...
Czy niska zdolność przestrzenna może być przyczyną wyżej opisanych problemów?
Jak na programowanie wpływa zdolność przestrzenna?
Może powinienem bardziej patrzeć na ADD lub coś podobnego, ponieważ zdiagnozowano u mnie ADD w wieku 17 lat (5 lat temu), ale leki, które otrzymałem, nie wpłynęły na mnie tak bardzo, więc nigdy nie brałem to wszystko tak poważne.
O ile mi wiadomo, ludzie rodzą się z małymi / medycznymi / wysokimi zdolnościami przestrzennymi, więc myślę, że interesujące jest sprawdzenie, czy im więcej szczęścia, tym lepsi programiści z urodzenia.
źródło
it turned out my Spatial Aptitude was quite low. I still got a decent score, just above average,
Nie jestem psychologiem, ale jeśli poprawnie czytam angielski i rozumiem definicję średniej, tak naprawdę nie rozumiem, jak to się tłumaczyquite low
... Może przesadzasz z tym ... :)Odpowiedzi:
W rzeczywistości istnieją pewne twarde dane badawcze na ten temat, zebrane głównie w ciągu ostatnich 35 lat, a także doświadczyłem kilku podobnych zjawisk, choć nie regularnie. Więcej informacji poniżej.
Dane badawcze
Wydaje się, że niektóre , ale drobne korelacji na podstawie przeprowadzonych badań i podsumowane w następujących pracach. Jednak jak często w przypadku badań, modele badań różnią się między badaniami i należy je dokładnie przeanalizować, aby zrozumieć, dlaczego wyniki przedstawiają różnice we wnioskach.
Badanie psychologicznych predyktorów osiągnięć programistycznych [ PDF ] (Erdogan, Aydin, Kabaca, 2008)
Niestety ten jest niejasny w szczegółach. Wskazuje ogólnie na „duży wpływ” „umiejętności”, ale następnie wskazuje tylko inne badania bez podawania wyników dla każdego testu umiejętności, więc nie wiemy, jak radzi sobie zdolność zdolności przestrzennych. To w większości przegląd literatury bardziej niż faktyczne badania.
Umiejętność przestrzenna i nauka programowania [ PDF ] (Jones, 2008)
Predyktory sukcesu w pierwszym kursie programowania [ PDF ] (Simon, Fincher i in., 2006)
Kto może nabyć umiejętności programowania? (Shute, 1991)
Hemispheric Lateralization and Programming Ability , (Gasen, Morecroft, 1990)
Korelaty rozwiązywania problemów w programowaniu [ PDF ] (Choi-man, 1988)
Interesujący ... Ładny model badania i wyniki ilościowe z kilkoma grupami badań i uwzględniającymi wiarygodność czynników badania. Daje to, że:
Nauka, badania i graficzne przedstawienie programowania (Taylor, Cunniff, Uchiyama, 1986)
Wymagania poznawcze nauki programowania komputerowego w ustawieniach grupowych i indywidualnych (Webb, 1985)
Korelaty poznawcze zadań programistycznych u początkujących programistów (Irons, 1982)
Badanie zdolności do uczenia się: raport o postępach [ PDF ] (RE Snow, 1976)
Weź to ze szczyptą soli: niektóre są stosunkowo przestarzałe, testy IQ mogły się od tego czasu zmienić. Nie przeprowadziłem dogłębnego wyszukiwania, aby znaleźć cytaty każdego artykułu, aby sprawdzić, czy zostały one później potwierdzone czy obalone.
Niektóre linki (szczególnie [PDF]) mogą nie działać, jeśli nie masz powiązania z biblioteką, która zapewnia dostęp do tych treści online.
Osobista opinia
Ostrzeżenie i ujawnienie: NIGDY nie jestem psychologiem, ani neurologiem, ale studiowałem i uczę programowania zarówno małych dzieci (od 6 lat), jak i studentów (do 60 lat!).
Po studiach z AND uczyłem sam jako nauczyciel akademicki, w tym niektórzy studenci dotknięci problemami przestrzennymi (i inni z silniejszymi niepełnosprawnościami), muszę powiedzieć, że chociaż mogło tak być (nie śledziłem moich studentów na podstawie niepełnosprawności, oczywiście), że niektórzy zarejestrowaliby się w dolnej części krzywej ogólnej, wciąż pamiętam wyraźnie, że niektóre uzyskały wysoką punktację (a nawet jedna w szczególności była główną klasą przez co najmniej 2 lata).
Chodzi mi o to, że chociaż może to mieć efekt, i jak pokazują niektóre z powyższych badań, nie stanowi ono największej części twojej umiejętności uczenia się programowania i myślenia jak programista. Jest to nieistotne, ponieważ nie powstrzyma cię przed nauką, jeśli naprawdę chcesz, i nie uniemożliwi ci pracy w ogólnym przypadku, chociaż może (jak być może w twoim przypadku) nieco utrudnić ci pracę.
Praktycznie nie ma ograniczeń co do tego, jak szybko możesz się uczyć .
W końcu żaden programista nie lubi dobrego wyzwania, prawda? (Patrzę na ciebie, RSI)
Osobiste (prawdopodobnie niezwiązane) doświadczenie
Być może jesteś zbyt namiętny. Ile godzin pracujesz dziennie i tygodniowo? Czy robisz regularne przerwy?
Podobna sprawa?
Przez pewien okres w moim życiu pracowałem przez co najmniej 14 godzin każdego dnia tygodnia przez cały rok, aż do momentu, w którym osiągnąłem rekordowy tydzień 120 godzin pracy przed ekranem komputera . Tak, to tylko 48 godzin tygodniowo na jedzenie, spanie, podróż do iz pracy ( wskazówka: unikaj jazdy !! ), prysznic i inne ważne funkcje. W tym konkretnym momencie mogłem prawie zasnąć w biciu serca (choć zwykle mam problemy ze snem), alePrawie zawsze marzyłem o kodzie, a także nagle zdałem sobie sprawę z tego, że pod prysznicem, a nawet podczas chodzenia, biegania lub wykonywania czynności służebnych, wróciłem do niego w samokontroli, jak sam to powiedziałeś. Niestety nie magicznie rozwiązałbym problemów podczas snu; byłoby bliżej tego, co wydajesz się opisać i doświadczyć: gigantyczny wir zmieszanych myśli zawraca w mojej głowie, co miałoby (wydaje się) sens na większą skalę, ale nie wyrażałoby jasno żadnego rozwiązania i bez większego sukcesu chwytając jedną z tych myśli, aby się na niej skoncentrować, dokładnie ją przeanalizuj i zamień w coś pożytecznego. I to było zwykle dość męczące i niepokojące.
Relaks może pomóc
Może musisz trochę się uspokoić, zrelaksować i mniej pracować. Postaraj się znaleźć coś, co oderwie Twój umysł. Wówczas często rezygnowałem z cennych godzin snu, aby zamiast tego zrobić coś, co naprawdę powstrzymałoby ten szalony tok myślenia. Wydaje się, że przynosi efekt przeciwny do zamierzonego, ale tak naprawdę wolałem zrobić kilka rzeczy, w których naprawdę się zrelaksowałem, niż więcej spać i nie odpoczywać. W pewnym sensie rozproszenie nerwowych baterii i sen dla fizycznych baterii.
Identyfikacja wyzwalaczy
Jeśli to nie jest twoja sprawa, być może jest coś jeszcze zaangażowanego w wywołanie tego stanu dla ciebie. Spróbuj wyizolować elementy występujące w takich sytuacjach i sprawdź, czy możesz odtworzyć ten warunek w innych środowiskach, aby sprawdzić, czy te elementy również znajdziesz. Czy zdarza się to częściej w pracy czy w domu itp.
Izolacja
Być może już to słyszałeś i próbowałeś, ale mam przyjaciela z niewielką niepełnosprawnością przestrzenną i zwykle pomaga mu, jeśli pracuje na komputerach, być w ciemniejszym pokoju, aby uniknąć zbyt wielu skomplikowanych widoków i okien otwarte (aby uniknąć rozproszenia) i ogólnie rzecz biorąc, aby zachować raczej minimalistyczny charakter (zarówno pod względem projektu i kolorów, jak i treści i reprezentacji).
Staraj się także robić regularne przerwy i pozwól umysłowi na swobodne bieganie przez 1–2 godziny, w zależności od tego, co jest dla Ciebie najlepsze. Może zastosuj technikę Pomodoro lub coś podobnego (nie mam badań nad korelacją z tym, ale może to być pomocne w zmuszaniu cię do robienia przerw).
źródło
Ech ... to zasługuje na coś więcej niż komentarz.
Przestań walczyć. Zmieniasz wszystko i popełniasz błędy, prawda? Możesz mieć pewne unikalne problemy, ale sposób, w jaki buntuje się twój mózg, jest normalny dla każdego, kto spędził zbyt długo nadmiernie skoncentrowany na problemie. Kiedy byłem młodszy, zbyt wiele dnia spędziłem na myśleniu na tym bardzo świadomym poziomie i nie robiłem sobie żadnych przysług. Twój problem nie polega na tym, że nie starasz się wystarczająco mocno, ale na tym, że nie wiesz, kiedy rzucić palenie.
W końcu nauczyłem się doceniać wartość kładzenia rzeczy na tylnym palniku, kiedy doszedłem do wniosku, że jedynym sposobem na zasypianie w rozsądnej godzinie jest chęć samodzielnego myślenia o niczym, i zszokowało mnie odkrycie, że w ciągu 10 minut Zasypiałam, podczas gdy normalnie myślałam-myślałam-myślałam przez co najmniej kilka godzin przed wypadnięciem z wyczerpania psychicznego.
Stamtąd łatwiej mi było nauczyć się rozpoznawać, kiedy wkładałem zbyt wiele świadomych myśli w problem i po prostu pozwolić mu odejść na jakiś czas. Byłem zaskoczony, gdy dowiedziałem się, jak bardzo to pomaga w rozwiązaniu problemu.
Polecam następujące:
Kiedy coś się kręci w twojej głowie i nie masz luksusu, aby móc zrobić sobie przerwę i iść na spacer czy coś takiego, spróbuj zmienić bieg i skupić się na innym problemie przez jakiś czas.
Nigdy nie opuszczaj lunchu i zawsze wychodź z biura. Daj się, aż dojdziesz do drzwi, aby dojść do punktu zatrzymania lub po prostu upuść. Wszystko, co warto zachować w głowie, będzie tam, kiedy wrócisz do niego, a wszystkie rzeczy, których nie potrzebujesz, znikną. Im więcej to odkryjesz, tym łatwiej będzie.
Regularnie będziesz myśleć o niczym przez cały dzień. Nawet jeśli tylko na minutę dostaniesz szklankę wody.
Spróbuj wykorzystać OOP lub inne podejście architektoniczne zorientowane na problem, aby myśleć o mniej. Kim są aktorzy w twoim kodzie na najwyższym poziomie? Nie powinni mieć ze sobą złożonych relacji. Pozwala to skupić się bardziej na jednym problemie na raz.
Niektóre zasady kodowania, które mogą pomóc
DRY jest ogólną praktyką kodowania, ponieważ „Kradzież jest błędna” można zastosować do prawie całej etyki / moralności. Są bardzo rzadkie wyjątki. Trzymaj je bardzo rzadko.
Jeśli masz w zwyczaju nadmierne rozwiązywanie problemów, z którymi możesz się kiedyś spotkać w przyszłości, odrzuć to. Nic nie jest bardziej przyszłościowe ani „skalowalne” niż kod, który nie jest bardziej złożony, niż powinien. „Przedsiębiorstwo” to kłamstwa.
Złożone wzory często obiecują długie listy punktowane nagród. Są tylko 3 rzeczy, które powinny mieć znaczenie przez większość czasu. Jest łatwy do odczytania. Jest łatwy do ponownego użycia. Jest łatwy do modyfikacji. Pomyśl w kategoriach minimalnego użycia siły, jaką mógłby zastosować mistrz sztuk walki, i zastosuj tę zasadę do złożoności. Dokładnie wystarczy rozwiązać problem.
Najpierw napisz swój interfejs. I nie, nie chodzi mi o konstrukcje C # / Java, które powinny być używane tylko w razie potrzeby, mam na myśli interfejs API twoich obiektów. Co musi zrobić klasa / obiekt? Napisz te puste metody i nadaj im nazwy arg. Nie wypełniaj pustych pól, dopóki nie skończysz. Dopuszczalne jest wprowadzanie poprawek później, ale gdy już ustalisz, co należy zrobić, możesz skupić się na tym, jak każda rzecz musi być zrobiona pojedynczo. Powodem, dla którego próbujesz trzymać tyle w głowie, co często, może być fakt, że wdrażanie ma miejsce w przypadku problemów, które powinny zostać rozwiązane na długo przed przejściem do danego etapu procesu. Masz dużo jest i ma metody? O tym właśnie mówię.
Diagnoza?
Myślę, że problem świadomości przestrzennej został dobrze uwzględniony. Cokolwiek zdecydujesz na tym froncie, chciałbym ponownie dodać ADD, szczególnie jeśli byłeś niechętny po raz pierwszy. To zdecydowanie brzmi jak hiper-skupienie osiągnięte do skrajności. Ostatecznie, niech miłość do kodowania zachęci cię do znalezienia sposobów na złagodzenie tych problemów, i spodziewam się, że twoja kariera się dobrze.
źródło
Przez ile godzin pracujesz, zanim zaczniesz widzieć to rozmycie? Wielu przeciętnych lub dobrych programistów, których znam z pracy 4, może zająć 5 godzin przed wypiciem kawy, obiadu lub czegoś takiego. Najdłuższy z takich sprintów, o których czytałem, to kiedy Guy L Steele i Richard M. Stallman zrobili 10-godzinny sprint podczas pisania Emacsa. Steele mówi dalej, że nie będzie chciał wykonywać tak długiego sprintu.
Jeśli jesteś dość nowy (mniej niż, powiedzmy, 5000 godzin (liczba ta pochodzi ze stanowiska Petera Norviga na temat nauki programowania za dziesięć lat, o połowę 10000 godzin, które zalecił on zostać ekspertem programistycznym)), brzmi to bardzo normalne, z wyjątkiem tej części, w której mówisz, że potrzebujesz dni przerwy. Być może się wypalasz, aby zmusić cię do tak długiej przerwy?
źródło
Z tego, co opisujesz, twój problem może mieć różne przyczyny:
Brak doświadczenia
Utrata koncentracji / zmęczenia
Niskie zdolności przestrzenne
Brak doświadczenia można rozwiązać przez ... no cóż, w zasadzie zdobywając więcej doświadczenia. Jakkolwiek może się to wydawać oczywiste, ćwicząc więcej, częściej będziesz znajdować się w skomplikowanych sytuacjach programistycznych i stopniowo nauczysz się je obsługiwać. W tej chwili możesz nie mieć schematów myślowych i refleksów, aby nawiązać właściwe połączenia, wyciągnąć właściwe wnioski i odblokować te sytuacje, co może sprawić, że poczujesz się powolny i napiszesz „przestarzały kod”, ale te wzorce rozwiązywania problemów będą stopniowo mieć miejsce w twojej głowie, gdy zdobędziesz więcej doświadczenia (masz tylko 22 lata, jak rozumiem, co jest wciąż bardzo młode)
Istnieją różne techniki poprawiania koncentracji. Pomodoro i Getting Things Done to dwa przykłady. W dziedzinie programowania, Test Driven Development jest również czymś, co naprawdę polecam, ponieważ zmusza cię do skoncentrowania się na jednym małym, osiągalnym celu naraz (kroki dziecka). Dzięki podejściu TDD znacznie rzadziej „umieszczasz funkcje w klasach, do których tak naprawdę nie należą”, ponieważ jesteś zmuszony do jasnego zdefiniowania odpowiedzialności swojej klasy za pomocą testu, a następnie skupiasz się wyłącznie na implementacji podczas pisania kodu , w przeciwieństwie do przeskakiwania między kilkoma klasami i wypełniania ich losowo, stopniowo.
Zmęczenia i spadku uwagi można uniknąć, przyjmując zrównoważony rytm z częstymi przerwami. Być może zainteresuje Cię ta prezentacja Linda Rising o większej wydajności dzięki poszanowaniu naszego mózgu: Born to Cycle .
Jeśli chodzi o niskie zdolności przestrzenne, obawiam się, że niewiele można z tym zrobić. Jednak ciężka praca może go złagodzić i nie jest to jedyna umiejętność wymagana w programowaniu. Rzeczy takie jak kreatywność, pasja, entuzjazm, rygor, umiejętności analityczne, ostrość, dobre zrozumienie zagadnień biznesowych, umiejętności współpracy, mogą więcej niż zrekompensować słabszą niż przeciętną wizualizację bazy kodu.
Krótko mówiąc, potrzebujesz IMO:
Dyscyplina
Ćwiczyć
Zrównoważone tempo
źródło