Come posso migliorare la mia capacità di problem solving?


50

Tutti dicono la stessa cosa: "un vero programmatore sa come gestire problemi reali". Ma dimenticano come hanno imparato questa capacità o dove: non viene insegnato nelle scuole.

Cosa posso fare per migliorare la mia capacità di affrontare problemi di programmazione complessi? Quali strategie hanno funzionato per te? Ci sono aree specifiche su cui dovrei concentrarmi, come algoritmi o schemi di progettazione?


3
Due libri utili citati in Code Complete sono: Conceptual Blockbusting di James Adams e Lateral Thinking di Edward De Bono.
McTlr

1
AH! Ho dimenticato di postare qui quando aveva solo poche risposte.
Mark C

Risposte:


25

Alcune tecniche che potrebbero funzionare o meno:

  • Guarda le soluzioni esistenti a problemi comuni, ad esempio i modelli di progettazione. Forse trovi qualcosa di simile che ricorda almeno in parte il tuo problema. Cercare in rete.
  • Agisci come se il problema fosse già stato risolto e traccia ciò che segue alla soluzione da realizzare. Ad esempio, invece di progettare l'API per una classe, basta scrivere il codice che utilizza la classe, con le chiamate di metodo come si desidera e quindi implementare tale API.
  • Fai qualcos'altro, ad esempio, naviga in rete o gioca a solitario, e aspetta che l'ispirazione accada.
  • Pensa alla persona che ti piace di più e fai finta di voler stupire con le tue capacità di problem solving. Quale sarebbe una soluzione estremamente impressionante?
  • Controllare il problema per contraddizioni intrinseche o requisiti contrastanti e dichiarare esattamente quali sono e quali compromessi potrebbero essere fatti. Spesso, quando esistono tali conflitti, ma non si è consapevoli, si tende a scartare una possibile soluzione dopo l'altra perché non è possibile soddisfare perfettamente tutti i requisiti.
  • Se hai già una possibile soluzione, ma ti sembra "sporco" (copia-incolla, variabili globali, codice spaghetti ecc.), Usalo comunque e miglioralo in seguito

L'ultimo punto è eccellente. A volte, la soluzione al problema consiste nel farlo funzionare nella maggior parte dei casi e quindi vedere dove deve essere migliorato.
JeffO

4
Tuttavia, tieni presente che il numero di "Risolverò più tardi" che si trasforma in "Ho risolto" è (almeno nella mia esperienza) frazionalmente piccolo.
Gareth,

3
Gareth: Vero, ma l'idea non è di migliorarla la settimana prossima, il mese prossimo o quando, ma immediatamente dopo averla messa in funzione. È inteso come metodo per rompere le noci.
user281377

3
Non navigo in rete per aspettare che l'ispirazione accada. Hai bisogno di cicli cerebrali inattivi per ottenere l'ispirazione, e navigare in rete è un modo per sprecare quei cicli cerebrali inattivi. Invece, fai shopping o fai una passeggiata o fai un giro in bicicletta, pulisci il tuo appartamento - fai qualcosa che non richiede molto potere cerebrale. L'ispirazione arriverà più rapidamente in quelle circostanze.
Ken Bloom,

1
Geek: So che # 4 suona un po 'paradossale, ma a volte funziona davvero per me; specialmente in situazioni in cui sembra possibile più di un approccio e il problema è la selezione di uno di questi approcci. # 6 significa non essere troppo limitato dalle solite cose da non fare della nostra professione. A volte abbiamo regole interne come "evitare le variabili globali" al punto da rifiutare inconsciamente ogni soluzione che utilizza tale tecnica deprecata.
user281377

20

Usa il modo R o il modo L come richiesto

La modalità R è l'approccio creativo e non verbale che comunemente associamo al subconcio. L-mode è l'approccio lineare, logico e verbale associato alla tua "voce interiore".

Se un problema sembra intrattabile, probabilmente è perché stai tentando di risolverlo utilizzando la modalità di pensiero errata. Per i programmatori, la modalità di pensiero predefinita tende ad essere la modalità L, quindi potrebbe funzionare per spegnerla temporaneamente e accedere alla modalità R.

Come accedere al pensiero in R-mode

Ci sono molti modi, ma forse prova il metodo Poincare (dal nome del famoso matematico).

Scrivi tutto quello che sai sul problema. Risolvi immediatamente tutti gli aspetti semplici (se presenti). Scegli un singolo elemento dall'elenco "problemi difficili" e poi vai a fare una passeggiata dove non sarai disturbato o distratto.

Non cercare di analizzare il problema durante la passeggiata, lascia che la tua mente vaghi e osservi eventuali immagini o sensazioni interessanti che potrebbero essere correlate al problema. Lasciateli fondere. Se l'ispirazione colpisce immediatamente, fermati e torna a scrivere l'intuizione che hai acquisito.

Risciacqua e ripeti fino a quando tutti i problemi hanno approfondimenti. Quindi inizia a esplorare le intuizioni.

Raccomandazione del libro

Anche leggere Pragmatic Thinking and Learning può aiutarti a diventare un risolutore di problemi migliore. (Mi sembra di fare molto riferimento a questo libro di recente ...)


4
Il pensiero e l'apprendimento pragmatici erano eccellenti
Brad Cupit l'

Rif: drawright.com/theory.htm (cos'è R-mode e L-mode)
mctylr

17

Chiedi a qualcun altro...

No sul serio. La tua più grande risorsa può essere la persona seduta accanto a te. Non chiedere loro nemmeno la risposta al problema, chiedi loro di sedersi accanto a te e di farti spiegare il problema.

Spesso lo risolvi mentre lo verbalizzi.

A volte l'altra persona pone una domanda o indica un dettaglio che sbloccherà la porta mentale.

Alla fine imparerai a verbalizzare le cose nella tua testa senza l'uso di un burattino e a individuare più rapidamente i dettagli chiave nel problema.

E se tutto il resto fallisce, potrebbero essere in grado di mostrarti una tecnica che non avresti mai pensato di usare.


Chiedere ad altri o formare gruppi di studio è un modo eccellente per imparare.
Gary Rowe,

faccio lo stesso, solo per farmi un'idea e questo è uno dei modi migliori.
Viswa,

Questa tecnica è conosciuta con il nome di Rubber Ducking, un eccellente articolo in merito alla codifica horror codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html e wiki è utile anche en.wikipedia.org/wiki/Rubber_duck_debugging
spats

9

In realtà la mia risposta breve è "risolvere più problemi". Ma il punto è: concentrati davvero sui problemi e non mollare. Non chiedere aiuto su StackOverflow o altro. (Leggere StackOverflow è ovviamente ovvio!) Provaci finché non ottieni una soluzione quasi funzionante, quindi raggiungi quasi il tuo obiettivo. E continua fino a quando non avrai una soluzione soddisfacente.

Per me la risoluzione dei problemi è due cose:

  • strategia di problem solving
  • tolleranza di persistenza e frustrazione

Il punto 2 è davvero cruciale secondo me perché ti costringe a cambiare il tuo pensiero più a lungo rimani bloccato con un problema. Ti consente inoltre di dedicare più tempo alla risoluzione dei problemi, consentendoti di migliorare ancora di più le tue abilità. ;-)

A proposito, ti consiglio di leggere Edward de Bono. Sebbene abbia acquisito le mie capacità di problem solving principalmente studiando Fisica, la sua scrittura è davvero interessante.

Bene e il mio toolkit di risoluzione dei problemi è questo:

  • prova a caso qualcosa
  • leggere articoli / blog / post casuali sull'argomento di cui mi occupo (o un argomento strettamente connesso)
  • fare un bel disegno
  • dividere il problema in più ma più semplici problemi
  • Fai qualcos'altro
  • Google qualcosa che è in qualche modo correlato al problema
  • parlare con gli altri del problema
  • fare un elenco TODO
  • annota le cose che conosci sull'effetto del problema in modo da poter trovare più facilmente gli schemi

Si noti che la maggior parte di questi strumenti può essere applicata in modo ricorsivo.

E il mio algoritmo è questo:

  1. Quale strumento del mio toolkit di risoluzione dei problemi ha più senso al momento?
  2. Problema non risolto? Continua con 1. ;-)

Il passaggio 1. è una decisione difficile, ma prendi decisioni migliori più ti alleni.

Oh e quasi dimentico l'ingrediente più importante:

Pensa positivamente all'intero processo. Non pensare "Spero che XYZ risolva ora il problema". Piuttosto pensa: "Se XYZ non funziona, allora so che YZX non può essere la fonte del problema e controllerò se ZYX funziona". La risoluzione dei problemi può essere divertente a volte in particolare se il processo di ricerca di un problema finisce per essere elegante e informativo.


Ho cercato in questa pagina la parola "Fisica" per vedere se qualcuno ne aveva già scritto. La matematica è l'altra.
Segna C

Il valore dello studio della fisica in relazione alla tua capacità di problem solving è difficile da sopravvalutare, credo.
Mark C

+1 per pensare positivo. Se ti ritrovi ad allenarti, la tua capacità di risolvere i problemi è compromessa. Guarda il problema in quanto ti dà conoscenza.
Gary Rowe,

7

Inizia a lavorare anche sull'abilità di identificare i problemi. A volte devi riconoscere che c'è un problema prima di poterlo risolvere. A scuola richiedono troppe risposte e non abbastanza domande da parte degli studenti.

Trova persone intorno a te che risolvano i problemi e chiedi loro come vanno.

Preparati a sbagliare. Non migliorerai se li tieni tutti per te e non sarai di alcuna utilità.


+1 per "A scuola richiedono troppe risposte e non abbastanza domande da parte degli studenti." questo è così vero e prenditi del tempo per imparare a porre le domande giuste ... controlla ovunque ci siano così tanti esempi di cattive domande
Rémi

4

Il vantaggio principale di una formazione informatica per ingegneri del software è la capacità di creare e comprendere astrazioni. Le astrazioni vengono utilizzate per incapsulare funzionalità comuni, come i metodi della classe String, in pacchetti rigidi e riutilizzabili che ci consentono di concentrarci sul problema più grande.

Impara a riconoscere e creare astrazioni :

Ma soprattutto, le astrazioni ci insegnano come suddividere un problema in blocchi più piccoli e più gestibili . Se combinato con un background scientifico, la combinazione di tali abilità può creare un ingegnere in grado di tagliare il rumore e arrivare al nocciolo del problema.

Impara a risolvere i problemi usando il metodo scientifico :

Durante la risoluzione dei problemi di un'applicazione di produzione in cui esiste un problema difficile da trovare, a volte aiuta effettivamente a rompere ulteriormente l'applicazione (in un ambiente non di produzione) al fine di eliminare diverse variabili per isolarne ed eliminarne una.

In sintesi, il metodo scientifico, appreso dall'assunzione di tutti gli elettivi di Fisica e altri elettivi di scienza richiesti per una laurea in informatica, aiuta a risolvere questi problemi come se stessimo provando un placebo e un nuovo studio farmacologico su una serie di volontari. Come gli scienziati che a volte devono peggiorare qualcosa per renderlo migliore, a volte noi ingegneri dobbiamo fare lo stesso.

Pensare scientificamente in questo modo - in generale - può derivare solo dall'esperienza in un contesto scientifico. A volte risolvere un problema non può essere percepito come un percorso lineare da A a B.

In breve, studia informatica, studia altri campi scientifici, impara la programmazione funzionale. Questi ti aiuteranno a pensare come uno scienziato e a pensare fuori dagli schemi.


Esattamente. Rompi i grandi problemi in piccoli problemi.
Bill Michell,

3

Dipende tutto dal tipo di problemi che stai cercando di risolvere, ma imparare a pensare logicamente se non lo fai già è una buona cosa.

Tutto sommato, e mi odierai per averlo detto, ma la pratica rende perfetti. Non sono stato tirato fuori dall'utero di mia madre sapendo come essere un buon risolutore di problemi e nessun altro l'ha fatto. Devi esercitarti e imparare a fare le cose da solo. Se sei ancora a scuola e non hai lezioni di programmazione / informatica, la matematica e la scienza sono anche abbastanza buone per favorire lo sviluppo di queste abilità.


3

Penso che quello che stai cercando sia l'euristica informatica.

Quando si tratta di ciò che il 99% di noi fa nelle trincee, non c'è davvero nulla di nuovo sotto il sole. Quindi potresti vedere un problema e riconoscerlo come un problema DP o un altro come un problema che potrebbe trarre vantaggio dalla memoizzazione, ecc ...

Come acquisisci questa conoscenza? Un buon livello CS è un buon punto di partenza ... Non ingegneria del software o sistemi di informazione, ma quella roba che la maggior parte degli studenti si lamenta di "non essere pratica".

Puoi farlo da solo, ma probabilmente sarà più difficile. Vorrei iniziare con questi due corsi:

Introduzione agli algoritmi

Grandi idee in CS teorico


2

Le mie risposte riguardano specificamente la codifica ma possono essere applicate a qualsiasi cosa.

  1. Allontanati dalla tastiera. Parla una passeggiata, corri, parla con un collega davanti a un caffè
  2. Diventa 10 anni più vecchio! La mia esperienza mi ha aiutato enormemente.
  3. Usa il taglio binario. Dividi il problema in due e restringilo: ripeti.
  4. Ricorda Sherlock Holmes: quando hai eliminato il possibile, qualsiasi cosa rimanga (non importa quanto strana) sia la risposta
  5. Controlla i tuoi dati di test. Ben oltre la metà dei miei problemi davvero difficili sono stati causati da dati errati e non da codici o algoritmi difettosi.

1

In termini di pratica, posso dirti cosa faccio. Sono più interessato alla matematica applicata, che alla programmazione, ma la matematica applicata applicata all'informatica è una sorta di programmazione. Vedo problemi e soluzioni in giro. Prima (o talvolta dopo, se dico che il mio lavoro richiede una soluzione tempestiva), collegandomi a una soluzione nota o a una libreria di codici esistente, mi chiedo: "Se questo fosse un problema vergine, non sarai in grado di trovare una soluzione in scatola, come procederesti? " Se la risposta è piuttosto semplice, considera la possibilità di scrivere una soluzione (analitica o un programma per computer per risolverlo). Ignora i casi finali complicati, sei interessato a esaltare approcci e algoritmi, non reinventare una libreria esistente. Se la soluzione richiederà troppi sforzi, non programmare la soluzione completa, ma almeno pensa al tipo di strutture e metodi di dati che vorresti usare. Pensa anche a metodi alternativi.


1

C'è una grande domanda SO su questo.

La mia risposta è stata:

Il modo migliore per migliorare è esercitarsi!

Iscriviti al feed RSS all'indirizzo: http://www.mensa.org.uk/puzzles/ e prenditi del tempo per completarli non appena vengono pubblicati.

Un calendario da tavolo puzzle-a-day (ad es. Http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) è una buona idea idea anche perché ti darà problemi regolari, di piccole dimensioni e vari da risolvere.

Mentre questi saranno inevitabilmente fuori tema rispetto ai problemi che ti troverai ad affrontare, la varietà è importante in quanto ti costringerà a pensare in modi che non hai mai fatto prima, il che è davvero ciò che riguarda la risoluzione dei problemi.

Modifica: controlla anche: http://www.mindtools.com/pages/main/newMN_TMC.htm per buoni suggerimenti per la risoluzione dei problemi.


1

Giocare a scacchi

Giocare a scacchi è un ottimo allenatore per risolvere problemi di programmazione. Gli strati di problemi e gli alberi logici si relazionano molto bene. Ti aiuta anche a pensare in anticipo e pianificare prima di percorrere un percorso non ottimale e perdere tempo.

Gli scacchi richiedono anche un equilibrio tra le "modalità di pensiero" di destra e di sinistra. Se diventi troppo analitico, puoi impantanarti nel tentativo di calcolare tutto, il che è impossibile. Tuttavia, ogni ispirazione creativa deve essere verificata con un calcolo per assicurarsi che si adatti alla realtà concreta della situazione. I problemi difficili sono proprio così.

Gli scacchi dimostrano come lo studio e la pratica portano a un solido miglioramento in modo molto lineare. Questo vale anche per la risoluzione dei problemi del programma.

Giocare a scacchi può anche aiutarti a capire bene quanto c'è da imparare. Anche se hai programmato (o giocato a scacchi) per 10 anni, non sei ancora un grande maestro.


Ho trovato la mia mente acuta giocando regolarmente a scacchi.
Paul Nathan,

1

Recentemente ho risolto i problemi al Progetto Euler . I problemi sono di varia difficoltà. Le soluzioni di solito non richiedono grandi quantità di codice, ma devi considerare molti fattori come il tempo di esecuzione del tuo algoritmo. Puoi usare la lingua che preferisci, semplicemente inserendo una risposta. C'è un buon resoconto di una soluzione ottimale per molti problemi e molte discussioni su ogni problema. Cerca di risolvere un problema ogni giorno e rimarrai stupito di quanto migliorino la risoluzione e l'analisi dei problemi. Per ulteriore credito, prova a risolvere lo stesso problema in molte lingue, come un linguaggio procedurale (forse C ++), un linguaggio di scripting (come Python) e un linguaggio funzionale (come F #).


1

Vengo da un background scientifico, quindi quando guardo un problema, tendo ad usare le tattiche del metodo scientifico . In particolare mi piace impostare "esperimenti" basati su ipotesi e usare "controlli", quindi costruirò qualcosa e poi cambierò / aggiungerò solo 1 cosa su di esso e vedrò quale sarà il risultato di quel cambiamento / aggiunta e se io ' Non sto ottenendo il risultato di cui ho bisogno, lo cambio indietro e cambio qualcos'altro. Funziona bene per la risoluzione dei problemi / debugging del codice. A volte ottieni la risposta che cerchi, ma impari sempre qualcosa di nuovo facendolo anche quando fallisci. Mi piace anche imparare attraverso il riduzionismo- prendere qualcosa che esiste già (sempre buono per iniziare con qualcosa che potresti non capire, ma sai che funziona) e che mi sembra complesso e vedere se riesco a scomporlo nelle sue parti componenti e imparare come funzionano prima. A volte è più facile per il mio cervello gestire l'apprendimento in questo modo invece di affrontare un problema in modo olistico e posso usare quella conoscenza per costruire altre cose complesse simili da solo. Consiglio anche di leggere libri sulla logica e sul ragionamento scegliendo opere di pensatori sia classici che moderni (inizia con Aristotele e sali su). Possono darti alcune delle basi della logica di base che puoi usare per aiutare nella risoluzione dei problemi nei computer. E, naturalmente, se non riesci a risolvere un problema e ci hai lavorato per un po ', fai una pausa al cervello. Rimuginare su un aspetto particolare di un problema è talvolta dannoso. Tutti hanno bisogno di pause :)


0

La parte più difficile della risoluzione dei problemi è "Restringimento percettivo".

Scegli qualcosa che sembra essere il problema e lo segui ostinatamente fino a quando non sei esausto e non fai progressi.

Il modo per farlo è essere sicuri - assolutamente sicuri - di capire davvero il problema. "Risolvere il problema giusto" è la parte più importante della risoluzione dei problemi.

A volte lo chiamano "pensare fuori dagli schemi". "La scatola" è un punto di vista ristretto che potrebbe non includere il vero problema fondamentale. Pensare fuori dagli schemi è cercare il giusto problema da risolvere.

Esistono numerosi libri sulle strategie per evitare il restringimento che si concentra prematuramente sul problema sbagliato.

Principalmente il trucco è identificare quale dovrebbe essere il vero risultato. Quindi capire cosa blocca quel risultato desiderabile.


0

Sinceramente penso che ognuno sia diverso, quindi la roadmap di ognuno per diventare un risolutore di problemi migliore è diversa. Puoi imparare dall'esperienza di altre persone, ma alla fine devi forgiare il tuo percorso. Questo sta essenzialmente imparando qualcosa nel "modo difficile", ma è efficace in questo caso.

Ecco come ho iniziato a migliorare il mio problem solving, anche se non sono ancora un grande risolutore di problemi, solo uno migliore di quello dell'anno scorso. Mi è stato dato un nuovo progetto sul lavoro che ha comportato l'estensione di un software di tracciamento del tempo open source, aggiungendo tre nuovi report per la gestione. Questo software è stato scritto in una lingua che non avevo mai usato ed era scarsamente documentato e altamente offuscato. Ho scavato e fatto un sacco di ricerche e poi ho appena lavorato sui report in piccoli passi, una volta che ho avuto le funzionalità di base ho migliorato su di loro e poi ho aggiunto più funzionalità.

Quindi, in altre parole, ti consiglio di trovare una sorta di progetto per affondare o nuotare nel mondo reale su cui lavorare. Se sei attualmente impiegato come programmatore, trova un progetto o chiedi al tuo capo per uno. Se questo scenario non è possibile trovarne uno al di fuori del lavoro, magari un contratto / lavoro freelance o qualcosa del genere. Risolvo i problemi molto bene e molto rapidamente quando devo e mantengo quella conoscenza a causa dell'intensità del progetto. Se questo non funziona per te, fai semplicemente quello che tutti gli altri su questo thread suggeriscono :).


0

La risposta è essa stessa nella domanda uscendo con soluzioni diverse. Esistono sempre più soluzioni (ad es. L'ordinamento può essere fatto in diversi modi, vale a dire. Bubble sort, ordinamento selezioni ecc.) Devi solo scegliere un modo per farlo (ordinamento) in modo efficiente. Prova con la prossima volta e così via ..... E libri per la risoluzione dei problemi ..... Nessuno Non puoi imparare le abilità di risoluzione dei problemi dai libri, più codice eseguirai più conoscenze che otterrai. In bocca al lupo


0

È facile per un programmatore attaccare mentalmente un problema visualizzando come risolverlo con il suo linguaggio di programmazione preferito. Proprio come il classico falegname che vede tutti i problemi come chiodi quando il suo strumento preferito è il martello.

Penso che i migliori esercizi di risoluzione dei problemi vengano quando si supera il livello pratico e penso solo in termini di "questo è ciò di cui avrei bisogno per risolverlo in modo ottimale". In alcuni casi potresti dover imparare (molte) nuove cose per applicare la soluzione, ma il punto chiave è che la tua capacità di elaborare una soluzione non dovrebbe essere limitata alle tue tecniche storiche ed esistenti.

Un vecchio esempio pratico per me è che ho imparato a implementare un efficiente multitasking cooperativo quando ho capito che il mio problema in realtà non aveva bisogno di thread preventivi, anche se di solito sarei andato avanti nella mia zona di comfort sbattendo tutti quei mutex (che alla fine sembra sempre smettere di sentirsi a proprio agio ad un certo punto ..).


0

Nello sviluppo di applicazioni, molti dei problemi che affrontiamo sono o la nostra stessa invenzione o l'invenzione dell'idiota da cui abbiamo ereditato quella base di codice sbagliata. Risolvere un problema il più delle volte si riduce a trovare la fonte . Spesso, una volta scoperto dove sta accadendo, la semplice competenza è ciò che è necessario per risolverlo .

A quello scopo:

  1. Scopri la tua piattaforma.
  2. Impara i tuoi strumenti.
  3. Scopri quali strumenti sono disponibili per la tua piattaforma che non hai ancora incontrato.

Tutto l'allenamento del cervello nel mondo è inutile senza informazioni che il cervello può usare. Per risolvere un problema, devi sapere quali sono le possibilità prima! Anche allora, è molto più veloce lavorare con buone informazioni piuttosto che solo una descrizione del problema.

Potrei speculare fino a quando le mucche tornano a casa sul perché qualcosa impiega troppo tempo per essere eseguita. Ma se dico "cerchiamo di ottenere prima alcuni dati", potrei vedere che vengono lanciate molte eccezioni e mi rendo conto che potrei invece cambiarlo in un'istruzione if. Senza sapere come raccogliere le informazioni, sapendo che sulla mia piattaforma le eccezioni richiedono un po 'di sovraccarico e che c'è un modo per verificare prima di provare che è più veloce, non risolverei mai il problema.


0

Ci sono due parti per la tua risposta:

a) Tecnica per l'effettiva risoluzione dei problemi

b) Rendere il cervello intrinsecamente "migliore" nel pensiero e nella risoluzione dei problemi

Ci sono sempre state delle ottime risposte sulla tecnica (supponiamo che tu conosca il problema, ecc.), Quindi non mi occuperò di questo. Per quanto riguarda l'allenamento del tuo cervello, ci sono un paio di cose che puoi fare per attraversare quelle sinapsi e costruire più interconnessioni

1) Impara una nuova lingua, una vera lingua (come il francese o il cinese potrebbe essere una buona scommessa in questi giorni)

2) Impara a suonare un nuovo strumento

3) Fai qualcosa di artistico come dipingere, disegnare o scolpire

4) Gioca a scarabeo o fai parole crociate

5) Balla come vuoi dire. No, non sto scherzando. La danza ha dimostrato di avere un impatto sul cervello e sul pensiero

6) Amplia le tue esperienze, soluzioni innovative sono venute dall'applicazione di una teoria in un campo in un altro, quindi studia diversi campi e aree che ritieni interessanti

7) Esercizio fisico, l'esercizio fisico è di fondamentale importanza per migliorare il processo di pensiero

Infine, offrirò il mio miglior consiglio per risolvere problemi difficili: fare una lunga passeggiata. Ho scoperto che funziona miracoli per schiarirti la testa e lasciare che uno contempli i problemi



0

Il mio consiglio sarebbe di buttare via il libro!

Non letteralmente ovviamente. Quello che voglio dire è entrare in un'area tematica in cui hai poca esperienza e risolvere lì problemi difficili, senza conoscere le soluzioni esistenti. Non fare affidamento su nient'altro che sulla creatività e sul pensiero critico e forse su un manuale di riferimento.

È possibile progettare un formato immagine. O un server web. O uno schema di compressione. File system. Kernel. Intelligenza artificiale. Linguaggio di programmazione. Sistema di visione artificiale.

Qualcosa che trovi interessante, che è ragionevolmente complesso e di cui non hai mai imparato. Non leggetelo: saltate subito dentro. Esperimento. Fare errori. Reinventare la ruota.

Non chiedere aiuto. Stai lontano dai tutorial. Stai lontano dalla teoria. Non estrarre una soluzione dallo scaffale.

Perché?

  • Impariamo meglio dagli errori.
  • Ti dà l'opportunità di esercitarti a trovare soluzioni in modo creativo, piuttosto che rigurgitare e adattare le vecchie soluzioni.
  • Sei costretto a valutare le tue idee. Non puoi valutarli senza sviluppare una buona comprensione dei tuoi strumenti, del problema che stai risolvendo e dell'idea che desideri valutare. Ciò porta a una comprensione più profonda dell'argomento rispetto a quella che altrimenti svilupperesti. (Sentiti libero di leggere sugli strumenti che stai utilizzando, semplicemente non leggere sul problema che stai cercando di risolvere.)

Fai alcuni tentativi e, una volta che sei soddisfatto di ciò che hai realizzato, lascialo per qualche mese. Quindi torna indietro e vedi se riesci a trovare una nuova prospettiva. Successivamente, è tempo di iniziare a leggere il problema e come gli altri hanno risolto (o parlando con le persone). A questo punto, invece di dirti "sì, ha senso" mentre leggi, dirai "sì, esattamente ", o "bene, in una certa misura", o "wow, che è intelligente".

In altre parole, penserai molto più criticamente a ciò che leggi e troverai molto più facile da capire e ricordare perché hai già un ampio "quadro mentale" a cui collegarlo. Ti sentirai bene con quelle cose che hai scoperto in modo indipendente e andrai via con un mucchio di nuove conoscenze.

Non cercare di rendere perfetta la tua soluzione. Dimostra a te stesso che puoi risolvere il problema. Adotta un atteggiamento "da fare" e, se ti senti scoraggiato dal problema, ricorda che la persona che per prima lo ha risolto probabilmente ne sapeva quanto tu (in realtà, non sapevano che avesse una soluzione!).


0

La risoluzione dei problemi non è qualcosa che può essere insegnato o addirittura imparato leggendo. L'unico modo per migliorare la risoluzione dei problemi è risolvere i problemi.

Esistono diverse tecniche e metodologie per la risoluzione dei problemi che puoi leggere e puoi leggere su strumenti e tecnologie che puoi utilizzare per risolvere i problemi in un determinato dominio. A meno che non pensiate continuamente ai problemi, provate a trovare soluzioni (inventate soluzioni multiple per ogni problema e valutatele una contro l'altra), quindi valutate le vostre soluzioni rispetto alle soluzioni sviluppate da altri, non migliorerete nel problema solving.

Consiglio di prendere una copia del pensiero e dell'apprendimento pragmatico: refactor Your Wetware di Andy Hunt . È un libro sulla comprensione di come pensi, reagisci e impari. Porta in teorie rilevanti dalla teoria comportamentale e da altre scienze cognitive. È specificamente orientato verso gli sviluppatori di software, ma applicabile a qualsiasi knowledge worker.


0

Per i neofiti della programmazione come me consiglio il libro "Think Like a Programmer". Nel primo capitolo vengono trattate tecniche di problem solving come il ripristino e la divisione del problema, a partire da ciò che sai, riducendo, analogie e sperimentazioni.

Esistono poi tecniche più avanzate con esempi in C ++: risoluzione di problemi con array, puntatori e memoria dinamica, classi, ricorsione, riutilizzo del codice. Non posso commentare questa parte perché è troppo difficile per me ancora.


-1

Risolvo il maggior numero possibile di problemi. Mi piacciono anche alcuni libri di puzzle come questo . Armeggio anche con giochi di problem solving, come giochi di matematica che coinvolgono numeri primi o qualcosa del genere, sudoku, la Torre di Hanoi, ecc. Basta trovare cose da risolvere. Inoltre, codificalo quando possibile.


-1

Ciao risolvendo MOLTI problemi!

si inizia con problemi facili e si passa a problemi più difficili una volta che quelli facili diventano una routine anziché problemi.


-4

Non tenerti alla teoria, fai più pratica. Con la pratica arriva l'esperienza.

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.