Cosa fai quando non riesci a capire una certa parte della programmazione? [chiuso]


11

Sto imparando nuove lingue mentre procedo, scrivo codice per programmi di base in più lingue e vado a lezione. Ho letto libri, articoli, lezioni, video, tu lo chiami, tuttavia non riesco a capire come stanno certe cose.

Ad esempio, non ho mai capito i puntatori: a cosa sono bravi. (NON PARTE DELLA DOMANDA - non è necessario ricodificare con "Puntatori" ...)


La mia domanda, tuttavia, non è cosa fanno i puntatori, ma come posso capire cose del genere? Se, dopo aver letto un libro o un articolo su una determinata parte della programmazione e non capisco, cosa devo fare? Scrivere codice in una certa caratteristica della programmazione sicuramente aiuta, tuttavia non aiuta a capire così tanto. La parte teorica è importante per la comprensione.


11
Vorrei poter capire perché le persone hanno così tanti problemi a capire i puntatori. Il nome fornisce tutti i chiarimenti di cui ho bisogno.
ChaosPandion,

1
Un Computer Architecture 101certo corso sarebbe di grande aiuto nella comprensione dei suggerimenti. ... e tutto il resto.
ZJR,

6
La domanda non riguarda esattamente i puntatori, è una domanda generale, ma grazie.
Bugster,

2
Non penso che ricordare al ragazzo del solo esempio con cui ha confessato di avere problemi lo aiuterà un po 'verso l'illuminazione ... Fatto abbastanza spesso, gli impedirà comunque di chiedere aiuto per paura di essere colpito, acquista un lunga serie di risposte avari e pedanti e commenti di declassamento.
Hayylem,

4
@FrustratedWithFormsDesigner: "Come imparo ad imparare", penso. Questa è una domanda valida e preziosa.
Hayylem,

Risposte:


22

Se hai problemi con la comprensione di un concetto astratto, scendi di un livello. Se non è possibile ottenere i puntatori in C, passare al livello dell'assieme. Hai ancora problemi? Ulteriori informazioni sull'hardware, fino alle porte logiche.


2
+1: ha funzionato per me. Ho avuto problemi con i puntatori in ALGOL fino a quando ho iniziato a scrivere il linguaggio assembly PDP-10.
Kevin Cline,

2
Idea interessante. Vorrei sottolineare che scrivere ed eseguire un programma in assembly sta andando troppo lontano. A mio avviso, andare oltre il punto di comprensione di base non è necessario a questo livello. Ma hey, se è quello che vuoi fare, più potere per te!
Bryan Field,

1
@George Bailey, sì, potrebbe essere un po 'esagerato per qualsiasi assemblaggio reale e hardware reale. Ecco perché ci sono MIXe altre architetture di giocattoli simili in giro. Per una parte hardware è la stessa cosa: ci sono molti semplici core di CPU giocattolo da studiare.
SK-logic,

+1: Idea interessante e sicuramente funzionante, ma (per riutilizzare il caso esemplificativo del PO) passare da C entry level a ASM entry level potrebbe essere una strada lunga, difficile e tortuosa per un principiante, che probabilmente prenderà più tempo di quanto previsto dal corso / progetto / altro. Potrebbe anche alienare le persone scarsamente motivate (che probabilmente non è il caso del PO, ma da una prospettiva di livello superiore, ciò bloccherebbe molti studenti che frequentano le lezioni di CS e hanno bisogno di capirlo, ma non gliene frega niente della CS stessa) . Ma sicuramente una buona idea a lungo termine.
Hayylem,

Bene, la mia laurea in CS ha coperto questo argomento in Computer Architecture. Abbiamo imparato a conoscere le porte logiche, combinandole in un simulatore logico per creare additivi, ALU e infine una CPU RISC molto semplice. Abbiamo anche scritto semplici programmi nell'assemblaggio MIPS. Tutto ciò era richiesto per una laurea in informatica, e non era in realtà considerato uno dei corsi "diserbo", quindi non penso che sia esagerato o che esca troppo.
Adam Jaskiewicz,

17

Ciclo di vita breve di apprendimento incrementale

  1. Provate e non riescono a capire il concetto.
  2. Prova a implementare qualcosa che illustri il concetto.
  3. Prova a disegnare il concetto sulla lavagna (se applicabile)
  4. Prova a parlarne con qualcuno che capisce il concetto.
  5. Prova a spiegare i pezzi che capisci a questa persona (aiuta a vedere la luce, a volte).
  6. Ricomincia da 1 fino a quando non puoi finalmente spiegarlo a qualcuno che si trova nello stato 1 e farglielo capire.

Passaggi aggiuntivi

Usare con cautela.

  • Cerca materiale di lettura e studio aggiuntivo :
    • online (i motori di ricerca popolari e Wikipedia sono grandi amici),
    • in biblioteca (non sottovalutare i libri e le persone che vanno lì per leggerli),
    • sul sistema (documentazione in bundle e doc strumenti sono spesso alienante in un primo momento, ma il vostro migliore goto-buddy dopo un po ':. imparano a trovare quello che stai cercando in loro esempio man -k, apropos, ecc ...)
  • Prova a leggere un po 'di codice usando il concetto ...
  • ... e scorrere il codice con un debugger.

Questi sono più subdoli in quanto è necessario rivalutarsi per assicurarsi di averlo fatto bene. Il tutoraggio diretto da parte di una persona esperta di solito è meglio, seguito ovviamente dalla propria convalida delle conoscenze acquisite reimplementando ciò che hai appena appreso (e quindi cercando di spingerlo oltre e apprendere un concetto di livello superiore costruito sulla parte superiore di quello, ad esempio elenchi collegati per i puntatori).

Crediti: Nupul (per diagrammi)


2
+1! Posso aggiungere - prima di parlare, provare la lavagna per "disegnarla" (o semplicemente tenere la lavagna a portata di mano quando si parla con qualcuno :)
Dottorato di ricerca

1
+1 per "scorrere il codice con un debugger". Ho imparato molti concetti con semplici strumenti di debug ...
funkymushroom,

@Nupul: buon suggerimento, aggiunto.
haylem,

@funkymushroom: In effetti, anche se direi che di solito non impari il concetto in questo modo. Tuttavia, aiuta a "sollevare la nebbia" quando è proprio di fronte a te e non riesci proprio a vedere i pezzi che si uniscono, perché sei troppo concentrato su qualcosa o la tua mente è fritta. Trovo più utile comprendere i problemi di algoritmo generale che per concetti generali.
haylem,

Parlare con la lavagna l'ha fatto per me.
Peter,

5

Nella mia esperienza, si tratta di input e feedback. Desideri ricevere input in tutte le forme che puoi e feedback sui tuoi errori il più rapidamente possibile.

Nella mia esperienza, la mia laurea in CS è stata molto secca, molto formale e assolutamente inutile nell'insegnare qualsiasi programmazione. Ho frequentato due o tre lezioni a settimana e se non lo fai, allora è praticamente tutto - il docente ha un'altra lezione da insegnare e non può restare in giro per aiutarti. E, probabilmente, quel ragazzo lo capisce in un certo modo, e lo insegnerà in un certo modo e basta, quindi se non pensi come lui, non lo capirai mai. Quel che è peggio è che, poiché probabilmente capisce un miliardo di altri concetti correlati, probabilmente lo inquadrerà in termini di quegli altri concetti, che potrebbero benissimo essere sopra la tua testa o semplicemente nemmeno nel materiale del corso.

Sono andato su Stack Overflow e ho chiesto nel canale di chat C ++ e ho ottenuto cinque diverse spiegazioni in cinque minuti. Erano tutti fatti su misura per me e sull'esatto problema che avevo, quindi non sorprende che uno di loro mi abbia colpito a casa e l'ho capito. La velocità con cui puoi imparare ottenendo feedback in tempo reale da più esperti è notevolmente superiore a quella che puoi ottenere da una fonte di carta essiccata.

Quindi, idealmente, prenditi una pausa, e poi troverai un gruppo di persone di dimensioni medio-piccole che non hanno niente di meglio da fare e chattare con loro dal vivo. A proposito, Stack Overflow è un posto eccellente per ottenere questo tipo di feedback personale ad alta velocità di alta qualità.


3

In nessun ordine, libri, amici e leggere codici ben documentati sono buone fonti. La pratica è l'unico modo per imparare: prova a scrivere test di piccole unità. Ad esempio, per i puntatori scrivere codice che si occupa di stringhe: invertire una stringa, invertire ogni parola in una stringa, testare palindromo, sostituire una lettera con un numero ...

Poni domande su stackexchange ...;>


2

La pratica rende perfetti! (bene meglio comunque). Continua a provare e prova a utilizzare quante più fonti e sensi puoi:

Fonti: Libri, Internet, Gruppi utenti, amici, Apprendimento video, utilizzando siti che ti consentono di testare un po 'di codice come jsfiddle (principalmente html),
Rubular (espressioni Ruby),
SQlzoo per provare sql,
jslint per javascript,
code pad per molte lingue.

Per ricordare le cose astratte si consideri la mneomica: i medici le usano!

Considerati uno studente per tutta la vita e rimani umile e puoi andare lontano.


1
+1 per "pratica". Ma mnemonici, ugh. Sono una stampella molto insufficiente che non può mai sostituire e non dovrebbe mai soppiantare la comprensione. In effetti, segnano l'assenza di comprensione. I "dottori li usano" perché sono costretti a imparare troppi fatti disconnessi in un tempo troppo breve. Stiamo lentamente arrivando al fatto che la nostra educazione per i medici fa schifo, e gli Stati Uniti per esempio sono sulla buona strada per rimodellare completamente l'educazione. Gli mnemonici non sono una soluzione, fanno parte del problema. Se ti ritrovi a usarli, non hai capito.
Konrad Rudolph,

1

Devi cambiare la tua attenzione per un po ', non per 5 minuti. o 5 ore ... intendo qualcosa come 1 giorno senza guardare quel codice .... rilassati ... vai a leggere qualcosa di diverso ...

Se si dispone di capirlo adesso ... chiedere aiuto ad amici o qui =)


1

Cosa fanno tutti gli altri nell'IT.

Uso un motore di ricerca per cercare i concetti correlati che non capisco fino a quando non riesco a rivisitare l'argomento che inizialmente volevo capire.

È probabile che tu non capisca completamente lo stack, l'heap, le variabili automatiche, il processo di compilazione C ++, l'assemblaggio, la memoria gestita rispetto alla memoria non gestita.

Una maggiore chiarezza su questi e altri concetti relativi al puntatore probabilmente chiarirebbe tutto.


1

Non esiste un modo rapido e sicuro per comprendere un argomento. Il tuo successo dipende da quanto contesto porti con te nei tuoi studi. Sarai molto fortunato a trovare qualcuno che spiegherà le cose pensando al tuo punto di vista. Come le macchine di Turing, chiunque può imparare ciò che gli altri sanno ed è solo una questione di persistenza e accettazione che la frustrazione sia naturale.

Ricordo l'immensa difficoltà che ho avuto con i puntatori. Fu solo quando un tipo molto paziente me lo spiegò come se fossi un completo idiota che lo capissi. A volte è quello che serve.


1

Questo è un problema comune nell'apprendimento e nell'insegnamento. E come altri hanno già detto, non esiste un modo sicuro per aggirare questo problema. È una verità fondamentale che impariamo tutti diversamente poiché i nostri cervelli sono collegati in modo diverso in modi sottili ma cruciali.

L'apprendimento genera nuove connessioni neuronali. Senza andare troppo nelle neuroscienze (di cui non so quasi nulla), generare nuove connessioni richiede diversi tipi di esposizione a un concetto per persone diverse. Prova molte angolazioni diverse, leggi / ascolta / guarda spiegazioni diverse. Pratica!

Se ciò non funziona, metti da parte il problema: potresti semplicemente perdere un'altra parte del puzzle che, una volta acquisito, rende evidente il problema originale.

Conosci questi aha! momenti? Questo è quando il tuo cervello ha appena stabilito una nuova connessione. Ecco come avviene l'apprendimento.

Per inciso, qualsiasi buon insegnante lo sa. Le linee guida per la scrittura tecnica spesso affermano che ogni concetto dovrebbe essere spiegato almeno due volte, usando parole diverse (e forse con del testo tra loro). Se presti attenzione, sarai in grado di individuare che tutti i bravi scrittori di scienze seguono questa regola.

Purtroppo, troppi insegnanti lo ignorano e spiegano le cose solo una volta. E anche se riescono a trovare una spiegazione elegante con una grande metafora, questo semplicemente non è abbastanza.


0
  1. Leggi tutta la documentazione pertinente e Google i tuoi dubbi.

  2. Prova a scrivere esempi di codice, guarda cosa fanno.

  3. Prova a eseguire il codice nel debug e guardalo passo dopo passo.

  4. Se ancora non capisci un determinato comportamento, chiedi a qualcuno, di persona o in un sito Web come questo. Se hai provato tutto quanto sopra, dovresti avere tutti gli elementi per comporre una buona domanda. Non essere timido :)

Penso che sia praticamente quello che fanno tutti gli altri.


0

Continua la ricerca e l'apprendimento. Ho avuto lo stesso problema con vari altri aspetti della programmazione. Ma parlare con gli altri e leggere articoli alla fine porta a un momento "AHA". In genere, è un altro post sul blog o una risposta SO che presenta le informazioni che sono in grado di seguire.

Fondamentalmente, continua a cercare ed essere paziente per la comprensione a venire.

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.