Jak na programowanie wpływa zdolność przestrzenna? [Zamknięte]

19

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.

natli
źródło
5
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łumaczy quite low... Może przesadzasz z tym ... :)
szaleństwo
1
Ach, również testy IQ są bzdurne, bez ogródek podsumowując badania na ich temat. Czy mieszkasz w USA? (Tylko pytam, bo wydaje się, że częściej stosuje się testy IQ - i rażąco przeceniłem strach przed ADD - w USA niż gdziekolwiek indziej)
szaleństwo
1
@psr: Właściwie nie byłbym zaskoczony. Może się nie wydawać, że ma z tym wiele wspólnego, ale ludzie mający problemy z reprezentacją przestrzenną i przewlekłą chorobą lokomocyjną zwykle mają nieco trudniejszy czas na radzenie sobie z całkiem sporą ilością rzeczy. Nie sądziłbym jednak, że to trochę wyróżnia (ale nie jestem psychologiem ani neurologiem), a twoje umiejętności programowania i pasja są tym, co wyróżnia cię spośród reszty stada.
haylem
2
@Haylem, o którym ogólnie nie wiem, ale większość internetowych testów IQ ocenia się na kilku osiach. Umiejętności przestrzenne, umiejętności logiczne itp. Myślę, że to, co mówi natli, to, że średnia z nich była nieco powyżej średniej, ale ocena umiejętności przestrzennych była dość niska.
Izkata
1
I tęsknić pracy gdzie grzebać rzeczy kijem.
Dan Ray

Odpowiedzi:

27

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.

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).

Haylem
źródło
Bardzo interesujące pytanie, kiedy zaczniesz się w to zagłębiać i na początku nie pomyślałem o własnych doświadczeniach. Mam nadzieję, że to pomoże. Aby uzyskać więcej artykułów naukowych, szybkie wyszukiwanie w Google Scholar hasła „programowanie przestrzenne” daje o wiele więcej wyników. Korzystanie z narzędzia cytowania może pomóc w identyfikacji najczęściej cytowanych prac.
haylem
1
Dzięki, że włożyłeś tyle wysiłku w twoją odpowiedź, kilka naprawdę dobrych informacji. Zdecydowanie piszę kod około 10 godzin dziennie, czasem więcej. Relaksacja może być tutaj kluczowa, ale będzie to trudne do zrealizowania. Jak powiedziałeś, prawdopodobnie jestem zbyt pasjonatem własnych projektów; Nie chcę robić czegoś innego. Więc chociaż fizycznie robię coś innego niż programowanie, mój umysł nadal będzie się tym zajmował ... Nie sądzę, że można powstrzymać twój umysł od robienia tego, co cholernie się podoba.
natli
@natli: to trochę takie samo podejście, jak wyrzucenie nawyku trzymania się. Jeśli chcesz rzucić palenie, musisz zastąpić coś papierosem. Jakieś hobby, które naprawdę lubisz, oprócz programowania? Następnie użyj tego. Dla niektórych osób intensywne czynności mogą być przydatne (na przykład squash, na przykład ...), podczas gdy dla innych jest odwrotnie: potrzebują czegoś wyjątkowo pasywnego. Może mógłbyś spróbować medytacji. Nauka oczyszczenia umysłu jest ważną umiejętnością do nauczenia się. Na przykład bardzo mi pomogło z problemami ze snem.
haylem
@natli: Nie przeszkadzało mi to „wysiłek”. Uznałem to za interesujące pytanie i większość artykułów była dobrze czytana. Tego rodzaju badania mogą czasami, równie często przy próbie zidentyfikowania czynników psychologicznych i neurologicznych, być nieco niejasne, ponieważ trudno jest określić dobry model badania. Jest to również potencjalnie przerażające, gdy badania zmierzają w kierunku „zamykania drzwi” ludziom. Oczywiście nie o to chodzi: nie orientujesz się w badaniach; ale i tak może być wynikiem. Mimo to cieszyłem się, że jest to aktywny obszar badań . Dzięki za to i cieszę się, że pomogło.
haylem
+1 za technikę Pomodoro. Użyłem tego do nauki do egzaminów, kiedy jeszcze byłem na uniwersytecie. To musiało zadziałać, ponieważ zdałem wszystko <całe zdanie opiera się na podejrzanej nauce, nie należy tego traktować poważnie.
Jamie Taylor,
4

Ech ... to zasługuje na coś więcej niż komentarz.

„Zwykle próbuję przez to walczyć”

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.

Erik Reppen
źródło
3

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?

vpit3833
źródło
Nie sądzę, żebym miał ponad 2000 godzin doświadczenia, chociaż nie za bardzo to śledziłem. Również potrzeba kilku (przeczytanych; dwóch) dni rekonwalescencji jest dość rzadka. Przez pierwsze kilka dni potrzebuję tylko dobrego snu, aby poradzić sobie z problemami następnego dnia, ale prawdopodobnie pracuję zbyt długo, starając się przezwyciężyć zamieszanie. Jeśli będę to utrzymywał wystarczająco długo, na pewno będę musiał poświęcić kilka dni wolnego na kodowanie, aby móc spojrzeć na mój kod świeżymi oczami i natychmiast zobaczyć głupie błędy, które popełniłem. Rzeczy, które wymagały godzin, dosłownie zajmuje to tylko 15 minut po wspomnianej przerwie.
natli
1

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

guillaume31
źródło