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


22

Prima di tutto, questa non è la domanda generica "rendimi un programmatore migliore", anche se il risultato di porre questa domanda potrebbe sembrare simile ad essa. Su programmers.SE, ho letto e visto che vengono chiusi qui , qui , qui , qui e qui .

Sappiamo tutti che ci sono una moltitudine di suggerimenti generici per affinare le tue capacità 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 dando delle ottime risposte. Dalla lettura della corrispondenza qui, sembra che ci sia un vasto numero di persone esperte che lavorano o hanno lavorato in settori legati alla programmazione. E la maggior parte di voi può trasmettere pensieri in modo eloquente e conciso.

Di recente ho notato la distinzione tra qualcuno che è in grado di programmare e un programmatore che può davvero pensare . Mi rifiuto di credere che per diventare grandi programmatori, ci sottomettiamo semplicemente a una vita di comportamento simile a una spugna (cioè assorbiamo tutto ciò che riguarda il nostro campo leggendo, ascoltando, guardando, ecc.). Direi anche che semplicemente conoscendo ogni singolo concetto di programmazione che ti consente di risolvere il problema X più velocemente di chiunque ti circonda, se non riesci a pensare , ti stai enormemente limitando: sei solo un robot veloce.

Mi piace credere che ci sia un altro aspetto dell'essere un grande programmatore che non ha nulla a che vedere con la programmazione, ma è quanto bene puoi intrecciare nuovi concetti e applicarli alla tua professione di programmazione o hobby. Non ho visto nessuno approfondire o affrontare questo aspetto della mente umana e della programmazione. (Sì, è anche possibile che non abbia guardato abbastanza anche io - scusami se è così.)

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


Dovresti pensare come me perché sono grande.
ChaosPandion,

Fai delle droghe pesanti come ha fatto Steve Job.
Giobbe

La programmazione funzionale insegna a pensare. Tutto il resto insegna a programmare;)
Dario,

Risposte:


13

I miei suggerimenti su come imparare a pensare:

  • Impara nuove lingue . Linguaggi sia naturali che di programmazione. Avere sempre una nuova lingua da imparare a portata di mano. Pensare si fa di più, 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.

"Il linguaggio modella il modo in cui pensiamo e determina ciò a cui possiamo pensare." - Benjamin Lee Whorf

E, soprattutto, il linguaggio determina ciò a cui non possiamo pensare.

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

"Il caso favorisce la mente preparata." -- Louis Pasteur

  • Umiltà . Devi sapere molto, per capire quanto poco sai. L'umiltà aiuta a mantenere la mente aperta a nuovi modi di pensare.
  • Chiedi il 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".

Non ne sono così sicuro sui linguaggi naturali. Impararli ha valore, ma per pensare? In un contesto di programmazione? Il valore delle parole per pensare a volte è sopravvalutato: possiamo avere idee che non possiamo esprimere facilmente in parole, quindi non siamo totalmente dipendenti dalle parole per formare idee. Inoltre, il vocabolario più rilevante (gergo per la matematica e altri campi tecnici) è fortemente condiviso tra le lingue.
Steve314

6

Dalla mia esperienza si riduce a due cose:

  1. Passione, se sei interessato al mestiere imparerai, ti adatterai e sarai più veloce nel pensare fuori dagli schemi rispetto a molti programmatori che sono sul campo proprio come lavoro. (Alcuni dei quali non dispongono di 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 nuove cose e mantenere ciò che funziona bene per te.


Buoni punti, in particolare il secondo punto.
Orbling

5

Quali sono i tuoi suggerimenti su come imparare a pensare?

Pratica. Pratica. Pratica.

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

Quindi come faresti (efficacemente) a pensare?

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

Penso che identificheresti i problemi di pensiero che trovi difficili (ma non impossibili), e proveresti a risolverli (pensali bene) e più simili a loro.


Sostengo questo. Ogni volta che sto facendo qualcosa di ripetitivo che non richiede pensiero, sto pensando a qualcos'altro. Tendo anche a farlo quando faccio cose ripetitive a cui dovrei pensare, come guidare, ma in qualche modo mi sento di guidare meglio quando non ci sto pensando.
Earlz,

1
@Earlz - Non capisco il tuo punto. Se stai facendo qualcosa di ripetitivo, non devi pensarci. Sto parlando di praticare risolvendo problemi che richiedono pensiero.
Stephen C,

l'esperienza vince su tutto (tipo di affermazione generale, lo so) ma impari col tempo, intendo dire quanto spesso ti sei imbattuto in un problema che ti ha impiegato un'eternità a risolversi, solo per imbatterti di nuovo e occupartene in pochi minuti. È anche il modo in cui affronti un problema, non concentrarti sull'essere bloccato, concentrati sempre su ciò che non ho ancora provato, dal più semplice al più complesso
farinspace

Pratica deliberata . Devi imparare qualcosa da ogni iterazione.

4

Potresti essere interessato da queste due cose:

Il flusso

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

Il flusso è lo stato mentale dell'operazione in cui una persona in un'attività è completamente immersa in una sensazione di concentrazione energica, pieno coinvolgimento e successo nel processo dell'attività.

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

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

Consapevolezza

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

Ho appena iniziato l' addestramento al metodo Jon Kabat-Zinn , quindi è troppo presto per condividere con voi esperienze estese, ma dai pochi che ho imparato finora posso dirvi che probabilmente è qualcosa che vorrete fare.


+1 Anche se odio il fatto che esista un libro e un'intera "teoria" su ciò che equivale a un approccio di buon senso a un problema, GTD ha certamente delle gambe.
Orbling

1
@Orbling: oh sono totalmente d'accordo con te su questo. Ma come nella maggior parte dei libri c'è merda e valore. Ciò che è merda e valore dipende da chi sta leggendo il libro. Il problema con GTD è che è così potente che può schiacciarti se non ti prendi il tempo di ridurre i tuoi input invece di concentrarti sulla gestione indipendentemente dalle sue dimensioni. Quello è stato il mio errore;)

Il problema che ho nella mia vita è che ci sono così tanti input, e così tanto da fare, che non avrei il tempo di implementare una tale procedura. Anche se posso certamente vedere il valore in esso.
Orbling

1
@Orbling: penso che questa sia la chiave. Filtrare i tuoi input è la massima tecnica di produttività, oltre a Covey o GTD. Richiede di essere molto forte mentalmente.

Trovo che siano necessarie altre persone per eseguire le attività che filtrate, lol.
Orbling

2

Ho sempre creduto che i bravi ingegneri siano nati, non fatti.

È necessaria la mentalità impostata per essa, la mente logica, analitica, deduttiva, combinata con la tenacia e la curiosità richieste per ottenere una visione d'insieme e una visione strutturale di un problema in modo efficiente e camminare rapidamente da A a B, instradando la mente attraverso la soluzione.

Ci sono molte ricerche che suggeriscono che questa abilità è enormemente potenziata dalla buona esposizione precoce a tali cose, anche la musica aiuta. Dopo un certo momento, le tue mappe mentali sono piuttosto cablate. Non in termini di ciò che pensi, ma come pensi.

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

Questo non è affatto limitato alla nostra professione, molte competenze sono dominate da abilità innate, piuttosto che dalla risposta acquisita. Le persone potrebbero non desiderare che ciò sia vero, ma molto probabilmente lo è.


2

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

Imparerai a comunicare le tue idee e ad argomentarle. Dal momento che dovrai difendere le tue opinioni, dovrai supportarle 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 la programmazione.


Devo dire che è un modo per esercitarsi nel pensiero. Non è l'unico.
Domchi,

2

Una cosa a cui penso è che bisogna vedere le cose come sistemi e tutti i sistemi sono correlati. Ognuno 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, cicli: nascita, crescita, decadimento, morte, di insetti, persone, civiltà, catene montuose, sistemi stellari. La lotta senza fine per l'energia. Tutti i sistemi.

Questo è lo studio della vita e della natura nel grande senso dello studio. Vedi tutte le cose relative, vedi tutte le cose che interagiscono. Concentrati su questo quando guardi il tramonto e senti la profondità delle forze di gravità che ci ruotano attorno al Sole, ci trascinano verso la superficie del pianeta e la luce del sole riflesso che si arrossa prima di entrare nella tua retina a 300.000.000 di metri al secondo e creare immagini nel tuo cervello primato.

Quando inizi a pensare a questo, a come tutto è collegato, a come il prezzo dell'oro e del lavoro degli schiavi e le tempeste attraverso il Pacifico e i complessi industriali in Giappone sono tutti correlati, e prenditi il ​​tempo, prenditi davvero il tempo per sederti e pensa a tutto questo, poi il tuo "muscolo" pensante si fletterà e crescerà davvero.

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

Mi viene in mente un'immagine in bianco e nero che mostra Albert Einstein sdraiato su una sedia a sdraio sulla spiaggia guardando 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 modo semplice. Questo ti darà qualcosa da fare fino a quando non sarai molto vecchio.


2

Un approccio è la pratica deliberata .

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

Un'illustrazione: un mio parente stretto compete nello sport del tiro con la pistola. Durante l'allenamento, molta concentrazione continua a rivedere ogni colpo, concentrandosi sui passi che vanno correttamente. Contrariamente intuitivamente, non c'è molta messa a fuoco in scatti scadenti, perché ripetere (provare) l'errore lo rinforza.

Semplicemente sparare 100 colpi lungo il raggio non ottiene nulla. La pratica deliberata di sparare 20 colpi rafforzerà le buone abitudini e porterà a prestazioni migliori.

Lo stesso vale per la programmazione: pensa a cosa fai. Non farlo mensilmente, settimanalmente o quotidianamente: fallo momento per momento, azione per azione.

  • Perché quel difetto si è verificato nel mio codice?
  • Come avrei potuto evitare di creare quel difetto?
  • Come avrei potuto trovare la soluzione più rapidamente?
  • Quale mia ipotesi era sbagliata?
  • Ho chiesto aiuto abbastanza velocemente? troppo veloce?
  • Ho fatto questo errore prima?
  • Questo difetto è isolato o fa parte di un modello?
  • C'è un difetto di progettazione sottostante?
  • In tal caso, posso farci qualcosa?

E così via ...


ottimo punto, ancora una volta tutto questo arriva con il tempo / esperienza
farinspace

1
@farinspace, solo se ti prendi il tempo per valutare e imparare dopo ogni iterazione.

1

Vai a dare un'occhiata a qualcosa che ami fino a quando non trovi un vantaggio.

Respiro profondo,

Scavalcare...

...

... Di 'agli altri quello che hai trovato.


1

Quindi vuoi pensare

Molti suggerimenti per lo più grandi di altri poster su come pensare o come imparare a pensare: il flusso, la consapevolezza, la matematica, la passione, la pratica ... quindi non ci andrò, coperta.

Ma nessuno del perché. Qual è lo scopo?

Personalmente ho capito che prima di poter pensare devi sapere perché.
L'unica cosa migliore da fare è ascoltare e guardare. (Prendo entrambi come unità, non puoi separarli)

L'unico modo per migliorare la programmazione, che si tratti di raccogliere requisiti, trasformare tali requisiti in specifiche di sistema dettagliate, abbinarli a documenti di progettazione, implementare il codice, eseguire il debug per la tua vita, sia che tu salti una o tutte quelle fasi, che tu abbia cinque minuti per trovare una soluzione o 20 anni, devi ascoltare e guardare.

Ascolta ciò che l'utente desidera, ascolta ciò che l'utente ti dice che è successo, ascolta la persona di supporto che ti ha visto. Ascolta. Ascolta anche se non ha senso. Ascolta anche se sei convinto che abbiano torto. Ascolta e non giudicare.

Cerca indizi, non cercando ma aprendo gli occhi. Guarda la realtà. Non puoi iniziare a cercare risposte prima di guardare la scena del crimine. Non è possibile trovare una soluzione fino a quando non si è dimostrato il difetto.

Un solo esempio dalla mia esperienza(sulla risoluzione dei bug, ma potrebbe essere adattato a qualsiasi cosa davvero). Per ovvie ragioni (legali e non) terrò fuori dettagli succosi. Su un sistema critico per la sicurezza, un operatore ha segnalato un grave difetto. Alcuni dispositivi di localizzazione geografica hanno effettivamente perso il tracciamento quando "non dovrebbero" non avere, con un potenziale impatto sulla vita (questo "dovrebbe" era il vero errore e ha bloccato le nostre indagini per troppo tempo). Fortunatamente, anche se questo è stato trovato alcune settimane dopo quasi per caso, poiché in un luogo remoto era in funzione un altro sistema per il quale un altro operatore ha dimostrato 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 nemmeno un secondo, quindi abbiamo dovuto uscire e dimostrare la questione. L'unico modo era attraverso l'innesto: costruire una simulazione per replicare l'esatta situazione operativa. Abbiamo dovuto effettivamente videoare la prova affinché il fornitore ci credesse. Alla fine la simulazione ha prodotto informazioni al di là delle nostre speranze e ci ha portato a comprendere l'intero problema. Non ci è voluto molto tempo per risolvere il problema.

L'unico modo in cui siamo arrivati ​​alla fine è stato collegando logicamente un sistema remoto con un altro facendo un lavoro simile ma non esattamente lo stesso lavoro. Questo è l'indizio alla ricerca (guarda). Ciò è stato possibile solo fidandosi del rapporto una volta e non scartandolo come un errore casuale nel sistema (Ascolta), e poi ascoltando di nuovo il secondo rapporto che contraddiceva il primo (Ascolta).

Quindi, quando hai gli indizi giusti (dopo aver ascoltato e guardato), definito l'area problematica, compreso la causa principale o i principi chiave, allora puoi pensare prima a soluzioni per un'ulteriore comprensione (prove ed errori, simulazioni, dimostrazioni, prove concettuali, mock-up, versioni alpha, beta) e infine offrono una soluzione solida (che a volte può essere ulteriormente migliorata dopo alcune operazioni nella vita reale).

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


+1 per la tua risposta, studiare il tuo dominio problematico e ascoltare gli utenti è essenziale. Sebbene -1 per il commento "sì giusto", quindi nessun cambiamento.
Orbling

@Orbling: Ok, hai ragione, era un po 'esagerato. Commento rimosso. Non penso che il talento innato sia giusto, ma non c'è bisogno di menzionarlo.
asoundmove,

Bene, se tu avessi invece -1 la mia risposta, avrei segnato la tua comunque, ma l'ho impedito in questo, risolto ora. Va bene menzionarlo come sbagliato se non sei d'accordo con quello che ho detto.
Orbling

@Orbling, nah non ho voglia di votare -1 per nessuno, preferirei solo andare avanti ... Solo scenari estremi giustificano -1, solo in disaccordo no.
asoundmove,

Sono d'accordo con te sugli altri siti, in quanto sono giusti / sbagliati in generale. Programmers.SE è diverso dal resto in quanto soggettivo, quindi il voto è sostanzialmente un accordo, un disaccordo. Se pensi che sia utile o inutile. Voto negativo solo se non sono fortemente d' accordo con qualcuno. Al momento in cui scrivo, il 2,6% dei miei voti sono voti negativi. Dopo tutto, le opinioni dovrebbero essere messe in discussione.
Orbling

1

Penso che tu debba fare la distinzione tra diversi tipi di pensiero.

Pensiero creativo: come trovare nuove idee, soluzioni innovative e risultati inaspettati. C'è un'intera scienza dietro questo, cercare Edward de Bono, 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, arriva a conclusioni logiche. La maggior parte degli sviluppatori ha familiarità con la tecnica scientifica ma non la usa mai. Fare così!

Pensiero critico - Penso che questa sia più filosofia. Stai indietro e guarda il quadro generale, rivedi i tuoi presupposti, fai davvero quello che dici che i tuoi valori sono? Studia filosofia ci sono un sacco di grandi autori e idee là fuori.


0

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

Mi rifiuto di credere che per diventare grandi programmatori, ci sottomettiamo semplicemente a una vita di comportamento simile a una spugna

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

Leggi programmatore al lavoro . Programmatori molto più esperti di quanto ne discuterò in dettaglio.


0

Lavora sull'applicazione di idee e concetti da aree apparentemente non correlate. Per me, la genialità dell'iPod non era l'ingegneria alla base della creazione di un ottimo lettore MP3, ma aiutava a risolvere un enorme problema che l'industria dell'intrattenimento musicale stava avendo con la musica pirata e il modello di vendita di CD / album. Jobs probabilmente ha applicato più di quanto appreso alla Pixar nel trattare con l'industria cinematografica. Sapeva qual era il vero problema.

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.