In che modo la programmazione è influenzata dall'attitudine spaziale? [chiuso]


19

sfondo

Più lavoro a lungo su un progetto, meno diventa chiaro. È come se non potessi più separare varie classi / oggetti nella mia testa. Tutto inizia a confondersi ed è estremamente difficile smontarlo di nuovo. Comincio a mettere le funzioni in classi alle quali non appartengono davvero, e commetto errori stupidi come scrivere codice che in seguito trovo obsoleto al 100%; le cose non sono più chiaramente mappabili nella mia testa. È solo quando faccio un passo indietro di diverse ore (o giorni a volte!) Che posso effettivamente vedere cosa sta succedendo di nuovo ed essere produttivo.

Di solito cerco di combatterlo, sono così appassionato di programmazione che non saprei per la mia vita cos'altro potrei fare. Questo è quando le cose possono diventare davvero strane, mi alzo così tanto nella testa che in qualche modo perdo il contatto con la realtà (in una certa misura) in quanto varie azioni, come versare un bicchiere d'acqua, non avvengono più a un livello cosciente. Succede sul pilota automatico, durante il quale praticamente tutta la mia concentrazione cosciente (è anche una cosa?) È dedicata alla risoluzione dei problemi inutile al limite (cercando di separare elementi di codice). Sembra una battaglia persa.

Quindi ho fatto un test di QI un po 'di tempo fa (Wechsler Adult Intelligence Scale credo che fosse) e ho scoperto che la mia attitudine spaziale era piuttosto bassa. Ho ancora ottenuto un punteggio totale decente , appena sopra la media, quindi non dovrò colpire le cose con un bastone per vivere, ma sono un po 'preoccupato che questo sia un tale handicap durante la scrittura / ingegneria di programmi per computer che ho vinto' non sarò mai in grado di farlo seriamente o professionalmente.

Domanda

Sono molto interessato a ciò che gli altri pensano di questo ...

Una attitudine spaziale bassa potrebbe essere la causa dei problemi sopra descritti?

In che modo la programmazione è influenzata dall'attitudine spaziale?

Forse dovrei guardare più lungo la linea dell'ADD o qualcosa di simile, perché mi è stata diagnosticata l'ADD all'età di 17 anni (5 anni fa), ma la medicina che ho ricevuto non mi ha influenzato molto, quindi non ho mai preso tutto così serio.

Per quanto ne so, le persone nascono con un'attitudine spaziale bassa / media / alta, quindi penso che sia interessante scoprire se i più fortunati sono programmatori migliori per nascita, giusto.


5
it turned out my Spatial Aptitude was quite low. I still got a decent score, just above average,Non sono uno psicologo, ma se leggo correttamente l'inglese e comprendo la definizione di media, non capisco come si traduca in quite low... Forse stai pensando troppo a questo ... :)
haylem

1
Ah, anche, i test del QI sono una schifezza, per riassumere senza mezzi termini le ricerche su di loro. Vivi negli Stati Uniti? (Sto solo chiedendo perché sembra esserci un uso maggiore dei test del QI - e una paura fortemente sovrastimata di ADD - negli Stati Uniti che in qualsiasi altro posto)
haylem

1
@psr: in realtà non sarei sorpreso. Potrebbe non sembrare che abbia molto a che fare con esso, ma le persone che hanno problemi con le rappresentazioni spaziali e la cinetosi cronica di solito hanno un po 'più tempo a che fare con un bel po' di cose. Non penso che sia un po 'differenziante (ma non sono uno psicologo o neurologo) e che le tue attuali capacità di programmazione e passione sono ciò che ti distinguerà dal resto del pacchetto.
Hayylem,

2
@haylem Non lo so in generale, ma la maggior parte dei test di QI online valuteranno lungo diversi assi. Attitudine spaziale, abilità logiche, ecc. Penso che ciò che Natli stia dicendo sia che la media di tutti era appena sopra la media, ma il punteggio di attitudine spaziale era piuttosto basso.
Izkata,

1
Ho nostalgia per un lavoro in cui ho ficcare le cose con un bastone.
Dan Ray,

Risposte:


27

In realtà ci sono alcuni dati di ricerca concreti su questo, per lo più raccolti negli ultimi 35 anni, e ho anche sperimentato alcuni fenomeni simili, anche se non su base regolare. Vedi sotto per di più.

Dati di ricerca

Sembra esserci una correlazione, ma minore, basata sulla ricerca condotta e sintetizzata nei seguenti lavori. Come spesso accade con la ricerca, tuttavia, i modelli di studio differiscono tra gli studi e dovrebbero essere attentamente rivisti per capire perché i risultati presentano differenze nelle conclusioni.

Prendilo con un pizzico di sale: alcuni sono relativamente datati, i test del QI potrebbero essere cambiati da allora. Non ho fatto una ricerca approfondita per trovare citazioni di ogni articolo per vedere se sono state confermate o sfatate in seguito.

Alcuni link (in particolare il tipo [PDF]) potrebbero non funzionare per te se non hai un'affiliazione a una biblioteca che ti dà accesso a questi contenuti online.


Opinione personale

Avvertimento e divulgazione: non sono MAI uno psicologo NOR un neurologo, ma ho studiato e insegnato programmazione sia ai bambini piccoli (a partire da 6 anni) sia agli studenti universitari (fino a 60!).

Avendo studiato con AND insegnando a me stesso come insegnante universitario, compresi alcuni studenti affetti da problemi spaziali (e altri con disabilità più forti), devo dire che mentre avrebbe potuto essere (non ho tenuto traccia dei miei studenti in base alle disabilità, ovviamente) che alcuni si sarebbero registrati in una parte inferiore della curva generale, ricordo ancora chiaramente un punteggio alto (e anche uno in particolare essendo il maggiore della classe per almeno 2 anni).

Il mio punto è, sebbene possa avere un effetto, e come mostrato da alcune delle ricerche di cui sopra, non rappresenta la maggior parte della tua capacità di imparare a programmare e pensare come un programmatore. È irrilevante, in quanto non ti impedirà di imparare se lo desideri davvero, e non ti impedirà di lavorare nel caso generale, anche se potrebbe (come potrebbe essere il tuo caso) renderlo leggermente più difficile per te.

Non c'è praticamente limite a cosa e quanto velocemente puoi imparare .

Dopotutto, a nessun programmatore non piace una bella sfida, giusto? (Ti sto guardando, RSI)


Esperienza personale (possibilmente non correlata)

Potrebbe essere che sei troppo appassionato. Quante ore lavori al giorno e alla settimana? Fai delle pause regolari?

Un caso simile?

In un periodo della mia vita, ho lavorato giorni di almeno 14 ore ogni giorno della settimana, tutto l'anno, al punto che è culminato nel registrare settimane di 120 ore di lavoro davanti allo schermo di un computer . Sì, sono rimaste solo 48 ore a settimana per mangiare, dormire, viaggiare da e verso il lavoro ( consiglio: evitare di guidare !! ), fare la doccia e altre funzioni vitali. A questo punto in particolare, potrei praticamente andare a dormire in un battito cardiaco (sebbene di solito abbia problemi di sonno), maContinuavo quasi sempre a sognare il codice, e improvvisamente mi rendevo conto anche sotto la doccia o anche quando camminavo o correvo o facevo compiti umili che la mia mente ci tornasse in auto-pilota, come hai detto tu stesso. Sfortunatamente, non risolverei magicamente i problemi nel sonno; sarebbe più vicino a ciò che sembri descrivere e sperimentare: un gigantesco vortice di pensieri confusi che mi girano nella testa, il che avrebbe (sembrerebbe) un senso su una scala più grande, ma non esprimerebbe chiaramente alcuna soluzione e senza molto successo nel prendere uno di questi pensieri per focalizzarsi su di esso, sezionarlo chiaramente e trasformarlo in qualcosa di utile. E questo di solito era piuttosto noioso e angosciante.

Il rilassamento potrebbe aiutare

Forse devi calmarti un po ', rilassarti e lavorare di meno. Prova a trovare qualcosa per distoglierti dalla mente. Allora, finivo spesso per rinunciare ad alcune preziose ore di sonno per fare invece qualcosa che avrebbe davvero fermato questo folle treno di pensieri. Sembra controproducente, ma in realtà ho preferito fare qualche cosa in cui mi rilassassi davvero piuttosto che dormire di più e non riposarmi. La distrazione per le batterie nervose e il sonno per le batterie fisiche, in un certo senso.

Trigger di identificazione

Se questo non è il tuo caso, forse c'è qualcos'altro coinvolto nell'innescare questo stato per te. Prova a isolare gli elementi presenti in queste situazioni e vedi se riesci a riprodurre questa condizione in altri ambienti, per vedere se trovi anche questi elementi. Succede di più al lavoro oa casa, ecc ...

Solitudine

Inoltre, potresti già aver sentito e provato questo, ma ho un amico con una disabilità spaziale minore, e di solito aiuta lui, se lavora al computer, a trovarsi in una stanza buia, per evitare di avere troppe viste e finestre complesse aperto (per evitare distrazioni) e in generale per mantenere le cose piuttosto minimaliste (sia in termini di design e colori, sia in termini di contenuto e rappresentazione).

Prova anche a fare pause regolari e a lasciar libero la mente per brevi periodi di tempo ogni 1 o 2 ore, in base a ciò che funziona meglio per te. Forse adotti la tecnica Pomodoro o qualcosa di simile (non ho ricerche su una correlazione con questo, ma potrebbe essere utile per costringerti a fare delle pause).


Una domanda molto interessante, una volta che inizi a scavare, e all'inizio non avevo ripensato alla mia esperienza. Spero che sia d'aiuto. Per ulteriori articoli di ricerca, una rapida ricerca su Google Scholar per "programmazione spaziale aptitute" produce molti più risultati. L'uso del loro strumento di citazione potrebbe aiutare a identificare le opere più citate.
Hayylem,

1
Grazie per aver dedicato così tanto impegno alla tua risposta, alcune informazioni davvero utili. Scrivo sicuramente codice circa 10 ore al giorno, a volte di più. Il rilassamento può essere la chiave qui, ma sarà difficile da realizzare. Come hai detto, probabilmente sono troppo appassionato dei miei progetti; Non voglio fare altro. Quindi, mentre potrei fisicamente fare qualcosa di diverso dalla programmazione, la mia mente ci proverà ancora ... Non penso che sia possibile impedire alla tua mente di fare come dannatamente bene.
Natli,

@natli: è un po 'lo stesso approccio di prendere l'abitudine di trattenere. Se vuoi smettere di fumare, devi sostituire qualcosa con la sigaretta. Qualche hobby particolare che ti piace davvero, oltre alla programmazione? Quindi usalo. Per alcune persone, attività intense potrebbero fare (prendere la zucca, per esempio ...), mentre per altre è l'opposto: hanno bisogno di qualcosa di estremamente passivo. Forse potresti provare la meditazione. Imparare a liberare la mente è un'abilità importante da imparare. Mi ha aiutato molto con i miei problemi di sonno, per esempio.
Hayylem,

@natli: non mi importava lo "sforzo". Ho trovato una domanda interessante e la maggior parte degli articoli erano buone letture. Questo tipo di ricerca a volte, come spesso quando si cerca di identificare i driver psicologici e neurologici, può essere un po 'vago in quanto è difficile specificare un buon modello di studio. È anche potenzialmente spaventoso quando la ricerca tende ad andare nella direzione di "chiudere le porte" alle persone. Ovviamente non è questo l'intento: non orientare la ricerca; ma potrebbe essere comunque il risultato. Sono stato comunque felice di scoprire che è un'area di ricerca attiva . Grazie per questo, e felice che abbia aiutato.
Hayylem,

+1 per la tecnica Pomodoro. L'ho usato per studiare per i miei esami quando ero ancora all'università. Deve aver funzionato, perché ho passato tutto <- l'intera frase si basa su una scienza malvagia, da non prendere sul serio.
Jamie Taylor,

4

Ech ... questo merita più di un commento.

"Di solito cerco di combattere attraverso questo"

Smettere di combattere. Stai distorcendo le cose e commetti errori, giusto? Potresti avere alcuni problemi unici, ma il modo in cui il tuo cervello si ribella è normale per chiunque abbia trascorso troppo tempo iper-focalizzato su un problema. Quando ero più giovane, passavo troppo della mia giornata a pensare a quel livello altamente consapevole e non mi stavo facendo alcun favore. Il tuo problema non è che non stai provando abbastanza è che non sai quando smettere.

Alla fine ho imparato ad apprezzare il valore di mettere le cose sul bruciatore posteriore quando ho capito che l'unico modo per addormentarmi in un'ora ragionevole era quello di voler me stesso pensare assolutamente a nulla e sono rimasto scioccato di scoprire che in circa 10 minuti circa Mi addormenterei mentre normalmente penserei-pensavo-pensavo per almeno un paio d'ore prima di schiantarmi dall'esaurimento mentale.

Da lì ho trovato più facile imparare a riconoscere quando stavo mettendo troppo il pensiero cosciente in un problema e lasciarlo andare per un po '. Sono stato sorpreso di scoprire quanto questo effettivamente contribuisce ad aiutarti a risolvere un problema.

Raccomando quanto segue:

  • Quando qualcosa viene distorto nella tua testa e non hai il lusso di essere in grado di fare una pausa e fare una passeggiata o qualcosa del genere, prova a cambiare marcia e concentrati su un pezzo molto diverso del problema per un po '.

  • Non saltare mai il pranzo e lasciare sempre l'ufficio. Concediti fino ad arrivare alla porta per arrivare a un punto di arresto o semplicemente lasciarlo cadere. Tutto ciò che vale la pena tenere nella tua testa sarà lì quando torni ad esso e tutte le cose di cui non hai bisogno saranno sparite. Più lo scopri, più diventa facile.

  • Regolarmente farai a te stesso di non pensare a nulla durante il giorno. Anche se è solo per un minuto mentre ti procuri quel bicchiere d'acqua.

  • Prova a sfruttare OOP o qualsiasi altro approccio architettonico incentrato sul dominio del problema per pensare a meno. Chi sono gli attori nel tuo codice al massimo livello? Non dovrebbero avere relazioni complesse tra loro. Ciò ti consente di concentrarti maggiormente su una parte del problema alla volta.

Alcuni principi di codifica che potrebbero aiutare

  • DRY è una pratica di codifica generale poiché "rubare è sbagliato" può essere applicato a quasi tutta l'etica / moralità. Ci sono eccezioni molto rare. Tienili molto rari.

  • Se hai l'abitudine di risolvere eccessivamente i problemi che potresti dover affrontare in futuro, smettila. Niente è più a prova di futuro o "scalabile" del codice che non è più complesso di quanto debba essere. "Enterprise" è bugie.

  • Modelli complessi spesso promettono lunghi elenchi puntati di ricompense. Ci sono solo 3 cose che dovrebbero avere importanza per la maggior parte del tempo. È facile da leggere È facile da riutilizzare. È facile da modificare. Pensa in termini di uso minimo della forza che un artista marziale potrebbe e applica questo principio alla complessità. Esattamente abbastanza per risolvere il problema è l'ideale.

  • Scrivi prima la tua interfaccia. E no, non intendo i costrutti C # / Java che dovrebbero essere usati solo quando necessario, intendo l'API dei tuoi oggetti. Cosa deve fare la classe / oggetto? Scrivi quei metodi vuoti e dai loro nomi arg. Non riempire gli spazi vuoti fino a quando non hai finito. Va bene apportare modifiche in seguito, ma una volta stabilito ciò che deve essere in grado di fare, puoi concentrarti su come ogni cosa, una alla volta, deve essere fatta. Il motivo per cui potresti trovarti a provare a tenere tanto in testa quanto spesso fai è perché hai l'implementazione in corso per problemi che avrebbero dovuto essere risolti molto prima di arrivare a una determinata fase di un processo. Hai un sacco di è e ha metodi? Ecco di cosa sto parlando.

Diagnosi?

Penso che la preoccupazione per la consapevolezza spaziale sia stata ben coperta. Qualunque cosa tu decida su quel fronte, darei una rivisitazione alla cosa ADD, specialmente se eri riluttante a farlo per la prima volta. Questo suona decisamente come l'hyper-focus andato all'estremo. In definitiva, lascia che l'amore per il codice ti spinga a trovare modi per mitigare questi problemi e mi aspetto che la tua carriera finisca bene.


3

Per quante ore lavori prima di iniziare a vedere questa sfocatura? Molti programmatori medio-buoni che conosco di lavoro 4, potrebbero essere 5 ore prima di prendere un caffè o un pranzo o qualcosa del genere. Il più lungo di questi sprint di cui ho letto è quando Guy L Steele e Richard M Stallman hanno fatto uno sprint di circa 10 ore durante la scrittura di Emacs. Steele continua dicendo che non vorrebbe fare di nuovo uno sprint così lungo.

Se sei abbastanza nuovo (meno di, diciamo, 5000 ore (quel numero è arrivato dal post di Peter Norvig sull'apprendimento della programmazione in dieci anni, dimezzando le 10000 ore che raccomanda di diventare un programmatore esperto)), sembra molto normale tranne per la parte in cui dici che hai bisogno di giorni di pausa. Forse ti stai esaurendo per farti avere bisogno di una pausa così lunga?


Non credo di avere più di 2000 ore di esperienza, anche se non è proprio il caso che abbia tenuto traccia. Inoltre, aver bisogno di un paio (leggi; due) giorni di recupero è abbastanza raro. I primi due giorni ho solo bisogno di dormire bene la notte per affrontare i problemi il giorno successivo, ma probabilmente lavoro troppo a lungo, cercando di combattere la confusione. Se continuerò così a lungo, finirò sicuramente per prendermi qualche giorno libero dal codice per poter guardare il mio codice con occhi nuovi e vedere immediatamente gli stupidi errori che stavo facendo. Le cose che hanno richiesto ore, letteralmente impiegano solo 15 minuti dopo la pausa.
Natli,

1

Da quello che descrivi, il tuo problema può avere varie cause:

  • Inesperienza

  • Perdita di concentrazione / affaticamento

  • Abilità spaziali basse

L'inesperienza può essere risolta da ... beh, acquisendo più esperienza, in pratica. Per quanto ovvio possa sembrare, esercitandoti di più ti troverai spesso in situazioni di programmazione complesse e imparerai progressivamente a gestirle. In questo momento potresti non avere gli schemi mentali e i riflessi per fare le giuste connessioni, trarre le giuste conclusioni e sbloccare queste situazioni, che possono farti sentire lento e scrivere "codice obsoleto", ma questi schemi di risoluzione dei problemi progressivamente si svolgono nella tua testa man mano che diventi più esperto (hai solo 22 anni a quanto ho capito, che è ancora molto giovane).

Esistono varie tecniche per migliorare la concentrazione. Pomodoro e Getting Things Done sono due esempi. Nel campo della programmazione, Test Driven Development è anche qualcosa che consiglio vivamente poiché ti costringe a concentrarti su un obiettivo piccolo e raggiungibile alla volta (piccoli passi). Con un approccio TDD è molto meno probabile che "inserisca le funzioni nelle classi in cui non appartengono realmente" poiché sei costretto a definire chiaramente una responsabilità della tua classe con un test e quindi concentrarti esclusivamente sull'implementazione quando scrivi il codice , invece di saltare tra diverse classi e riempirle a caso a poco a poco.

La fatica e le gocce di attenzione possono essere evitate adottando un ritmo sostenibile con pause frequenti. Potresti trovare interesse per quella presentazione di Linda Rising sull'essere più produttivo rispettando il nostro cervello: Born to Cycle .

Per quanto riguarda le basse abilità spaziali, temo che non ci sia molto da fare al riguardo. Tuttavia, il duro lavoro può attenuarlo ed è tutt'altro che l'unica abilità richiesta nella programmazione. Cose come creatività, passione, entusiasmo, rigore, capacità analitiche, nitidezza, buona conoscenza delle problematiche aziendali, capacità di collaborazione, possono più che compensare una visualizzazione mentale più debole della media della base di codice.

In breve, ciò di cui hai bisogno IMO è:

  • Disciplina

  • Pratica

  • Un ritmo sostenibile

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.