Quali sono i tuoi suggerimenti su come imparare a pensare? [chiuso]

22

Prima di tutto, questa non è la domanda generica di "farmi un programmatore migliore", anche se il risultato di porre questa domanda potrebbe sembrare simile ad esso. Su programmers.SE, ho letto e visto questi si chiudono qui , qui , qui , qui e qui .

Sappiamo tutti che ci sono una moltitudine di suggerimenti generici per affinare le tue abilità di programmazione (ad esempio leggere SO, leggere libri consigliati, seguire blog, essere coinvolti in progetti open-source, ecc.). Questo è non quello che sto cercando.

Riconosco anche i lettori attivi su questo sito Web e spero che funzioni a mio favore, fornendo alcune grandi risposte. Dalla lettura della corrispondenza qui, sembra che ci sia un vasto numero di persone esperte che stanno lavorando, o hanno lavorato, campi legati alla programmazione. E molti di voi possono trasmettere pensieri in modo eloquente e conciso.

Di recente ho notato la distinzione tra qualcuno che è capace di programmare e un programmatore che può davvero pensare . Mi rifiuto di credere che per diventare grandi programmatori, semplicemente ci sottomettiamo a una vita di comportamento spugnoso (cioè, assorbiamo tutto ciò che è relativo al nostro campo leggendo, ascoltando, guardando, ecc.). Direi anche che semplicemente conoscendo ogni singolo concetto di programmazione che ti permette di risolvere il problema X più velocemente di tutti quelli che ti circondano, se non puoi pensare , stai enormemente limitando te stesso - sei solo un robot veloce.

Mi piace credere che ci sia un altro aspetto di essere un grande programmatore che non è correlato a quanto sai sulla programmazione, ma è quanto puoi intrecciare nuovi concetti e applicarli alla professione di programmazione o al tuo hobby. Non ho visto nessuno approfondire, o affrontare, questo aspetto della mente umana e della programmazione. (Sì, è anche possibile che non sia stato abbastanza duro anche io - scusa se è così.)

Quindi, per chiunque abbia passato del tempo a pensare a quello che ho menzionato sopra - o forse è tutto qui perché sono un po 'indietro nel mio sviluppo personale / professionale - quali sono i tuoi suggerimenti su come imparare pensa? A parte la solita lettura, cos'altro hai fatto per essere migliore delle altre persone nel tuo / nostro campo?

    
posta Jonathan Khoo 12.02.2011 - 01:46
fonte

13 risposte

13

I miei suggerimenti su come imparare a pensare:

  • Impara nuove lingue . Entrambi i linguaggi naturali e di programmazione. Avere sempre una nuova lingua da imparare sulla tua mano. Il pensiero è fatto di meno in una lingua. Ogni lingua ha una "visione" diversa sul pensiero. Più lingue conosci, più "strumenti mentali", concetti, punti di vista e astrazioni sono a tua disposizione.

"Language shapes the way we think, and determines what we can think about." -- Benjamin Lee Whorf

E, ancora più importante, il linguaggio determina a cosa possiamo non pensare.

  • Leggi voracemente . Leggi ampiamente. Non solo di programmazione, ma storia, sociologia, biologia, arte, ecc. Amplia le tue prospettive. Ottieni nuovi approfondimenti. Non sei solo ciò che mangi - sei anche ciò che leggi. Le nuove idee riguardano più la combinazione di due (apparentemente) idee diverse, che un divino lampo di creatività dal nulla.

"Chance favors the prepared mind." -- Louis Pasteur

  • Umiltà . Devi sapere molto, per capire quanto poco sai. L'umiltà aiuta a tenere la mente aperta a nuovi modi di pensare.
  • chiedi perché? non accontentarti di come.
  • Impara la matematica . Uno strumento davvero potente, una sorta di linguaggio, per lavorare con la logica e le astrazioni. Studiare la matematica rafforza il tuo cervello. Equivalente mentale di "andare in palestra".
risposta data 12.02.2011 - 10:35
fonte
6

Dalla mia esperienza si tratta di due cose:

  1. Passione, se sei interessato all'artigianato imparerai, adatterai e sarai più veloce a pensare fuori dagli schemi rispetto a molti programmatori che sono sul campo solo come lavoro. (Alcuni dei quali non hanno computer a casa.)
  2. Alcune persone sono appena nate con la capacità di risolvere problemi tecnici. Alcune persone hanno naturalmente la capacità di astrarre una soluzione flessibile.

Oltre a questo, ognuno è abbastanza diverso nel modo in cui pensa alla programmazione o apprende nuove abilità di programmazione. Ti suggerisco di continuare a provare cose nuove e di mantenere ciò che funziona bene per te.

    
risposta data 12.02.2011 - 01:58
fonte
5

What are your suggestions on learning how to think?

Practice. Pratica. Pratica.

Seriamente, l'attività mentale (cioè il pensiero) è come l'attività fisica. Più lo fai, meglio riesci a farlo. (Infatti, l'attività fisica comporta anche una sorta di attività mentale. I migliori sportivi non solo hanno i muscoli nel posto giusto ...)

Quindi, come faresti a pensare (in modo efficace) a pensare?

(Qui sto generalizzando da qualcos'altro ...)

Penso che dovresti identificare problemi di pensiero che trovi difficili (ma non impossibili), e cercare di risolverli (pensarli attraverso) e più simili a loro.

    
risposta data 12.02.2011 - 03:26
fonte
4

Potresti essere interessato a queste due cose:

Il flusso

Mihály Csíkszentmihályi , un professore di psicologia ungherese, ha introdotto il concetto di il flusso .

Flow is the mental state of operation in which a person in an activity is fully immersed in a feeling of energized focus, full involvement, and success in the process of the activity.

Sono abbastanza fortunato da poter entrare nel flusso ogni giorno usando una vecchia tecnica che imparo dalla mia applicazione di GTD che è la prossima azione .

Posso dirti che fa davvero la differenza. Quando sono nel flusso, produco una qualità superiore e più veloce di quando non sono in quello stato. Sono totalmente concentrato su ciò che faccio e quindi penso in modo più efficace.

Mindfulness

Ho fatto una domanda sulla meditazione qualche tempo fa perché ero preoccupato dal fatto che la meditazione potesse diminuire le mie capacità di programmazione (e creatività).

Ho appena iniziato il training sui metodi di Jon Kabat-Zinn , quindi è troppo presto per condividere con te esperienze, ma dai pochi che ho imparato finora posso dirvi che probabilmente è qualcosa che vorrete fare.

    
risposta data 12.02.2011 - 02:04
fonte
2

Ho sempre creduto che gli ingegneri buoni siano nati, non creati.

Hai bisogno della mente impostata per esso, la mente logica, analitica, deduttiva, combinata con la tenacia e la curiosità necessarie per ottenere una visione d'insieme e una visione strutturale di un problema in modo efficiente e camminare rapidamente da A a B, routing la tua mente attraverso la soluzione.

C'è molta ricerca che suggerisce che questa abilità sia enormemente potenziata da una buona esposizione precoce a queste cose, anche la musica aiuta. Dopo un certo periodo di tempo, le tue mappe mentali sono piuttosto cablate. Non in termini di cosa pensi, ma come pensi.

Puoi imparare a pensare da adulto? Beh, puoi certamente imparare le tecniche per risolvere i problemi, ma poi hai degli algoritmi da seguire, puoi diventare un "robot veloce" come eloquentemente messo. La comprensione intuitiva è probabilmente innata.

Questo non è affatto limitato alla nostra professione, molte abilità sono dominate da abilità innate piuttosto che risposte acquisite. Le persone potrebbero non volere che sia vero, ma molto probabilmente lo è.

    
risposta data 12.02.2011 - 02:12
fonte
2

Trova un forum online su qualcosa che ti appassiona. Qualcosa che ha una sorta di comunità. Preferibilmente non di programmazione: i forum di programmazione sono in genere più orientati alla soluzione che alla discussione. Prendere una posizione. Difendilo Usa argomenti. Puoi anche blog, ma avere un avversario è meglio. Il punto è avere una comunicazione significativa e scritta su qualcosa con qualcuno. Dove scambia parti di testo un po 'più grandi.

Imparerai a comunicare le tue idee e le tue argomentazioni. Dal momento che dovrai difendere le tue opinioni, dovrai sostenerle con i fatti. Dovrai pensare a qualcosa, articolare la tua posizione e supportarla; forse anche cambiarlo.

Successivamente, prendi quella capacità di analizzare il problema e sintetizzare l'opinione e applicarla a qualsiasi cosa. Anche programmazione.

    
risposta data 12.02.2011 - 02:27
fonte
2

Una cosa che penso è che è necessario vedere le cose come sistemi e tutti i sistemi sono correlati. Ogni singolo nell'universo. L'umanità, i pianeti, la galassia, le piante, la luce solare, la fotosintesi, gli insetti, le rocce, gli oceani, tutti i sistemi interagenti. Allo stesso modo, nel tempo, i cicli: nascita, crescita, decadimento, morte, bug, persone, civiltà, catene montuose, sistemi stellari. L'infinita lotta per l'energia. Tutti i sistemi.

Questo è lo studio della vita e della natura nel senso grandioso dello studio. Vedi tutte le cose relative, vedi tutte le cose che interagiscono. Concentrati su questo quando osservi il tramonto e percepisci la profondità delle forze di gravità che ci fanno girare intorno al Sole, ci trascinano verso la superficie del pianeta e la luce del sole che si abbassa prima di entrare nella retina a 300.000.000 di metri al secondo e creare immagini nel tuo cervello dei primati.

Quando inizi a pensare a quello, a come tutto è collegato, di come il prezzo dell'oro e della schiavitù e le tempeste nel Pacifico e i complessi industriali in Giappone sono tutti collegati, e prendi il tempo, prendi davvero il tempo per sedersi e pensare a tutto questo, allora il tuo "muscolo" pensante si piegherà davvero e crescerà.

Ora, molto di questo sarà al di sotto della soglia di espressività, ma non lasciare che ti fermi. Il tuo cervello è più potente del computer più potente. Spingilo. Non penso sia possibile overclockarlo.

Mi viene in mente una foto in bianco e nero che mostrava albert Einstein sdraiato su una sedia a sdraio sulla spiaggia a guardare l'oceano. La didascalia diceva: "Qui siede Albert Einstein, con il suo cervello".

La prossima sfida è riuscire a comunicare la complessità e l'interdipendenza di tutte le cose in un modo semplice. Questo ti darà qualcosa da fare finché non sarai molto vecchio.

    
risposta data 12.02.2011 - 02:44
fonte
2

Un approccio è Practica deliberata .

La semplice ripetizione non porta ad alcuna acquisizione di abilità: devi essere introspettivo, valutare le tue prestazioni, identificare i modi per fare le cose meglio.

Un'illustrazione: un parente stretto di mia compete nello sport della sparatoria. Durante l'allenamento, molta concentrazione continua a rivedere ogni scatto, concentrandosi sui passaggi che vanno correttamente. Contrastare intuitivamente, non molta attenzione va ai cattivi colpi, perché rigiocare (provare) l'errore lo rafforza.

Semplicemente sparare 100 colpi lungo la scala non porta a nulla. Pratica deliberata di sparare 20 colpi rafforzerà le buone abitudini e porterà a prestazioni migliori.

Lo stesso vale per la programmazione - pensa su ciò che fai. Non farlo mensilmente, settimanalmente o giornalmente - fallo momento per momento, azione per azione.

  • Perché questo difetto si è verificato nel mio codice?
  • Come avrei potuto evitare di creare quel difetto?
  • In che modo ho trovato la soluzione più rapidamente?
  • Quale mia ipotesi era sbagliata?
  • Ho chiesto aiuto abbastanza velocemente? troppo veloce?
  • Ho già fatto questo errore?
  • Questo difetto è isolato o parte di un motivo?
  • Esiste un difetto di progettazione sottostante?
  • In tal caso, posso fare qualcosa al riguardo?

E così via ...

    
risposta data 12.02.2011 - 04:26
fonte
1

Fai attenzione a qualcosa che ami finché non trovi un vantaggio.

Respiro profondo,

Passa oltre ...

...

... racconta agli altri quello che hai trovato.

    
risposta data 12.02.2011 - 15:11
fonte
1

Quindi vuoi pensare

Ci sono un sacco di suggerimenti per lo più di altri poster su come pensare o come imparare a pensare: il flusso, la consapevolezza, la matematica, la passione, la pratica ... quindi non andrò lì, coperto.

Ma nessuno sul perché. Qual è lo scopo?

Personalmente sono arrivato a capirlo prima che tu possa pensare di aver bisogno di sapere perché.
La sola cosa migliore da fare è ascoltare e guardare. (Prendo entrambi come unità, non puoi separarli)

L'unico modo per migliorare la programmazione, sia che si tratti di raccogliere i requisiti, trasformare questi requisiti in specifiche di sistema dettagliate, abbinarli a documenti di progettazione, implementare il codice, eseguire il debug per la tua vita cara, che tu salti uno o tutti quelle fasi, se avete cinque minuti per trovare una soluzione o 20 anni, è necessario ascoltare e guardare.

Ascolta ciò che l'utente desidera, ascolta ciò che l'utente ti dice che è successo, ascolta la persona dell'assistenza che ti dice di aver visto. Ascolta. Ascolta anche se non ha senso. Ascolta anche se sei convinto di essere così sbagliato. Ascolta e non giudicare.

Cerca gli indizi, non cercando ma aprendo gli occhi. Guarda la realtà. Non puoi iniziare a cercare le risposte prima di guardare la scena del crimine. Non riesci a trovare una soluzione finché non hai dimostrato il difetto.

Un solo esempio della mia esperienza (sulla risoluzione dei bug, ma potrebbe essere adattato a qualsiasi cosa realmente). Per ovvi motivi (legali e non) manterrò fuori dettagli succulenti. Su un sistema critico di sicurezza un operatore ha segnalato un grave difetto. Alcuni dispositivi di localizzazione geografica hanno perso il tracciamento quando "non dovrebbe" avere, con un potenziale impatto sulle vite (questo "dovrebbe" è stato il vero errore e ha bloccato le nostre indagini troppo a lungo). Fortunatamente, anche se questo fu trovato settimane dopo quasi per caso, poiché c'era un altro sistema in funzione in un luogo remoto per il quale un altro operatore venne a provare che il tracciamento non era stato perso su quel sistema. Questo ci ha fatto pensare di nuovo. Il nostro principale fornitore di software non ci ha creduto un solo secondo, quindi abbiamo dovuto uscire e provare la questione. L'unico modo era attraverso l'innesto: costruire una simulazione per replicare l'esatta situazione operativa. Dovevamo effettivamente mostrare la prova del fatto che il fornitore ci credesse. Alla fine la simulazione ha fornito informazioni al di là delle nostre speranze e ci ha portato a capire l'intero problema. Dopo non ci è voluto molto tempo.

L'unico modo in cui siamo arrivati fino alla fine era collegando logicamente un sistema remoto con un altro facendo un lavoro simile ma non esattamente lo stesso lavoro. Questa è la ricerca di indizi (guarda). Questo è stato possibile solo affidandosi alla relazione unica e non respingendolo come un errore casuale nel sistema (Ascolta), e quindi ascoltando di nuovo il secondo rapporto che contraddiceva il primo (Ascolta).

Quindi, quando hai gli indizi giusti (avendo ascoltato e guardato), definito l'area del problema, capito la causa o i principi chiave, allora puoi pensare prima a soluzioni per ulteriori comprensione (prove ed errori, simulazioni, dimostrazioni, prove di concept, mock-up, alpha, versioni beta) e alla fine offrono una soluzione solida (che a volte può essere ulteriormente migliorata dopo alcune operazioni reali).

Essere in grado di fare questo ascolto e guardare richiede una mente aperta, fiducia e dedizione assoluta ai tuoi obiettivi. Questo è il carburante che devi pensare, o più al punto che il tuo pensiero si concentri sull'obiettivo giusto (spesso il problema non è l'incapacità di pensare, ma la mancanza di un obiettivo ben definito per esercitare la tua mente).

    
risposta data 12.02.2011 - 03:15
fonte
1

Penso che sia necessario fare la distinzione tra diversi tipi di pensiero.

Pensiero creativo: come trovare nuove idee, soluzioni innovative e risultati inaspettati. C'è tutta una scienza dietro a questo, cercare Edward de Bono, le tecniche di creatività ecc. Non molti programmatori guardano in quest'area.

Pensiero analitico - con questo intendo processo scientifico. Guarda input, output, misura ciò che è importante, giungi a conclusioni logiche. La maggior parte degli sviluppatori ha familiarità con la tecnica scientifica, ma in realtà non la usa mai veramente. Fallo!

Pensiero critico: penso che questa sia più filosofia. Stai indietro e guarda l'immagine più grande, ripassa le tue ipotesi, fai davvero quello che dici che sono i tuoi valori? Studia la filosofia, ci sono un sacco di grandi autori e idee là fuori.

    
risposta data 11.05.2011 - 21:18
fonte
0

La matematica insegna a uno come pensare. L'applicazione richiede creatività ed esperienza.

I refuse to believe that in order to become great at programmer, we simply submit ourselves to a lifetime of sponge-like behaviour

Buona visione. Approssimativamente, i requisiti per "grandezza" dipendono dalla tua personale definizione di "grandezza" ... e sono cambiati nel tempo. Oggi, il successo del progetto consiste nel riuscire a mettere insieme i concetti rapidamente e senza approfondire tutti i dettagli nitidi. Il successo personale potrebbe essere definito come la padronanza di C # come Jon Skeet.

Leggi coder al lavoro . Programmatori molto più esperti di quanto discuto in dettaglio.

    
risposta data 12.02.2011 - 02:29
fonte
0

Lavora sull'applicazione di idee e concetti da aree apparentemente non correlate. Per me, la brillantezza dell'iPod non è stata l'ingegneria dietro a creare un ottimo lettore MP3, ma a risolvere un enorme problema dell'industria dell'intrattenimento musicale stava avendo con la musica pirata e il modello CD / album di vendita di musica. Jobs probabilmente ha applicato più di quello che ha imparato alla Pixar nel trattare con l'industria cinematografica. Sapeva quale fosse il vero problema.

    
risposta data 11.05.2011 - 21:47
fonte

Leggi altre domande sui tag