Quali sono gli ostacoli più comuni quando si tratta di programmare l'apprendimento, in ordine di difficoltà? [chiuso]

7

Mi sembra di ricordare che le liste concatenate, la ricorsione, i puntatori e la gestione della memoria sono tutti buoni esempi di ostacoli - luoghi in cui l'aspirante programmatore di solito finisce per perdere tempo a cercare di capire un concetto prima di andare avanti e migliorare, e molti finiscono per arrendersi e non migliorare.

Sto cercando un elenco completo / completo di questi tipi di ostacoli, in ordine approssimativo di difficoltà da apprendere, con l'obiettivo di fare in modo che un programma educativo per i programmatori sia strutturato per guidare correttamente gli studenti attraverso di loro

Questa informazione è disponibile da qualche parte? Idealmente, la difficoltà di apprendimento sarà misurata in una sorta di modalità obiettiva (cioè,% di studenti che non riescono coerentemente a imparare il concetto) Quali sono le fonti più appropriate per ottenere queste informazioni?

    
posta blueberryfields 01.02.2011 - 11:06
fonte

5 risposte

12

La mia lista sarebbe:

  1. Puntatori: il concetto di riferimento, essendo consapevoli di dove sono archiviati i dati e l'aritmetica su di essi all'inizio è piuttosto confusa.
  2. Liste collegate: nella mia esperienza questa è la prima struttura dati con alcune operazioni logiche diverse dagli array apprese da uno studente CS. Un'introduzione all'amministrazione e alla rappresentazione dei dati li rende un po 'complessi.
  3. Strutture ad albero e ricorsione: qui è dove la mia mente ha dovuto prendersi del tempo per riflettere sulle cose prima di iniziare a digitare. La ricorsione è un concetto potente che se usato in modo improprio porta a grossi problemi, e gli alberi sono le strutture migliori per imparare ad usarlo.
  4. Spostamenti di paradigma tali oggetti orientati agli oggetti, funzionali, distribuiti, logici, ecc. Qui è dove tutte le tue linee di codice, dove in un modo semplice e imperativo, si trasformano in un mix in cui molti concetti cambiano il modo hai bisogno di pensare alle tue soluzioni. Almeno nel mio caso, questi mi hanno fatto ripensare molto a quello che ho fatto e vedere che non era l'unico modo come pensavo.
  5. Concurrency and Parallelism: questo è ciò che ritengo l'argomento più complesso sulla programmazione al computer che ho affrontato. Cambia assolutamente tutto in un modo che il problema non è: "Perché diamine mi dà sempre la risposta sbagliata!" ma un'opzione più inquietante: "Perché diamine mi dà sempre un risultato diverso che non è quello che mi aspettavo!". La complessità di Concurrency è che ora la soluzione non è solo il risultato di un algoritmo ma anche il modo in cui questo algoritmo viene calcolato su un determinato hardware in una determinata situazione, quindi i possibili risultati aumentano e la capacità di determinare cosa sta accadendo in un un certo momento di esecuzione diminuisce.

Dovrei notare che Gestione dei dati è un argomento che non è necessariamente più facile o più difficile di quelli che ho menzionato, ma che va piuttosto in parallelo con essi. Per capirli è necessario prima sapere che cosa è un puntatore (quindi la chiave su un tavolo sembrerà naturale), capire che un database non è una scatola magica dove si eseguono query e si creano tabelle e quindi si ottengono risultati, ma piuttosto che lì è una struttura di dati (come le strutture di dati della famiglia Hash, B Trees) che utilizza l'indicizzazione e altre tecniche per essere in grado di recuperare le informazioni che potrebbero essere archiviate nella memoria o in un disco rigido, e può anche essere accessibile da più utenti a allo stesso tempo.

Finalmente ho pensato di aggiungere: Gestire i clienti che è un punto importante perché alla fine stai programmando qualcosa per qualcuno.  Nel mio caso la vedo come l'ultima barriera che un programmatore dovrebbe affrontare. Viene naturalmente ad alcuni o molto difficile agli altri, ma questo è un concetto che cambia sempre e che ti sorprenderà sempre. Essere in grado di capire e vedere in anticipo ciò di cui un cliente potrebbe aver bisogno è un enorme passo avanti per imparare a programmare, perché se puoi vedere questo, il tuo codice sarà in grado di adattarsi quando arriverà il momento. Non so se questo è il più duro ma almeno è il più variabile inciampo.

    
risposta data 01.02.2011 - 13:04
fonte
2

Avendo insegnato, insegnato e studiato l'insegnamento, i tre grandi sono:

  1. Puntatori.
  2. Passa per valore vs passa per riferimento.
  3. ricorsione.

Questi sono i 3 elementi che estirpano i 2/3 di CS senior.

    
risposta data 01.02.2011 - 13:01
fonte
2
  1. Paura di rompere il computer
  2. Essere spaventati che solo l'istruzione matematica di livello GCSE (o equivalente) ti ostacolerà
  3. Pensare che devi essere bravo come Jon Skeet per rendere utile l'apprendimento
  4. Non avendo gli strumenti giusti
  5. Non sapendo dove trovare le risposte alle tue domande
  6. Requisiti per la raccolta
  7. Progettare buone esperienze utente
risposta data 01.02.2011 - 14:51
fonte
2

Puntatori e gestione della memoria sono stati difficili per me durante i miei giorni di inizio.

    
risposta data 01.02.2011 - 19:01
fonte
1

Oltre alle risposte di guiman e el fuser:

  • Espressioni regolari. Alcune persone non le capiscono mai.
  • qualcosa di relativamente nuovo: SQL (dati relazionali) vs. NoSQL (chiave = > valore o altre strutture dati)
  • Schemi di programmazione (in entrambi i modi: andare astratto con un problema concreto per creare un pattern, o tradurre un pattern in una soluzione per un problema reale)

Ma non credo che otterrete una lista generale. Persone diverse avranno argomenti diversi con velocità diverse o, a volte, mai. Alcuni potrebbero rompersi quando si parla di puntatori, altri potrebbero rompersi quando si parla di OO rispetto a logica funzionale e logica.

    
risposta data 01.02.2011 - 13:17
fonte

Leggi altre domande sui tag