Perché viene insegnato CS a essere memorizzato? [chiuso]

23

Ho frequentato Advanced Placement Computer Science per l'anno scorso al liceo. Sembra che ci viene insegnato semplicemente a memorizzare codice e funzioni e non come essere intraprendenti ed efficienti nell'uso della documentazione e simili.

In pratica, immagino che molti (se non tutti) lavori di programmazione ti permetteranno di sfogliare la documentazione, rivedere il codice passato e il codice degli altri, facendo essenzialmente quello che il mio insegnante considererebbe "barare".

Anche se sono d'accordo sul fatto che i concetti chiave sono essenziali per memorizzare (in qualsiasi argomento), mi sembra superfluo e poco pratico dare un esame a penna per una classe CS, specialmente quando praticamente si avrebbe un compilatore, debugger, manuali di riferimento e intero internet a cui fare riferimento in qualsiasi situazione lavorativa reale.

Perché il CS insegna a concentrarsi sulla memorizzazione del codice e delle funzioni piuttosto che sull'insegnare abilità utili incluso come usare e interpretare la documentazione, il codice di esempio, il debugger e così?

    
posta esqew 08.02.2012 - 02:02
fonte

7 risposte

37

In una classe di scuola superiore, sei nel livello più elementare del tuo percorso verso la padronanza. Le cose che sono coperte nella tua classe sono il tipo di cose che ci si aspetta che un programmatore professionista conosca a freddo. In molti modi, questo è simile all'apprendimento dei "tavoli orari". Ovviamente sarai sempre in grado di prendere una calcolatrice in un'impostazione "reale", ma questa memorizzazione non solo aumenta la tua velocità in compiti più complessi, ma promuove anche una comprensione più approfondita dei principi di base.

Ad esempio, dovresti conoscere diversi algoritmi di ordinamento, come sono implementati, come funzionano, quando sono utilizzati al meglio e quando non li usi. Questo potrebbe sempre essere cercato, ma non dovrebbe essere necessario - più di quanto un matematico dovrebbe cercare 6 volte 8.

    
risposta data 08.02.2012 - 02:16
fonte
14

Spesso viene insegnato in questo modo perché gli insegnanti generalmente non conoscono nessun altro modo per testare la comprensione. I tuoi sentimenti sono completamente corretti in quanto è inutile essere insegnato in questo modo. Il modo in cui le persone sono educate in generale ha bisogno disperatamente di riforme!

La vita migliora ma, almeno a UIUC, ho scoperto che più alto è il livello delle tue lezioni CS, meno gli esami sono orientati come stai descrivendo e nella maggior parte dei miei corsi ci è stato concesso un tutta la schifezza che probabilmente ti ritroverai su google se fossi effettivamente seduto al computer.

Detto questo, più in alto sono andato nelle mie classi, meno in realtà ti insegnano le lingue o come implementare qualcosa. In effetti, ho avuto solo una lezione in cui ci hanno insegnato qualcosa sulla programmazione, sono stati per lo più concetti matematici astratti e ci aspettavamo di capire da soli la parte di programmazione (purché fossero sempre felici di aiutare, ma questo era mai qualcosa su un esame).

    
risposta data 08.02.2012 - 02:23
fonte
10

Non lasciare che la scuola interferisca con la tua educazione.

- Mark Twain

Sono un messicano e te lo dico perché in Messico non è esattamente un buon posto per l'istruzione (a qualsiasi livello), almeno nella pubblica istruzione.

Beh, a metà della mia carriera (CS) mi sento esattamente nello stesso modo in cui ti senti, quindi comincio a imparare da solo e passo un anno ad imparare algoritmi, linux, scripting, come funziona il mio computer, a bit di database relazionali, html, css, ecc (un po 'di tutto). E naturalmente, ho dovuto saltare le lezioni *, lasciare i miei voti in calo * e laurearmi un anno dopo *, tutto per imparare.

Dopo quell'anno, torno alla mia "normale" routine, tornando a lezioni regolari, compiti a casa, esami e progetti. Le lezioni erano ancora noiose, niente di nuovo da imparare, tutto era uguale. Così ho deciso di entrare nei siti di contest di programmazione come giudice UVA online , code chef e project euler , poi ho guardato alcune lezioni al MIT Open Course Ware e io ero ancora imparando dal proprio, ma in un modo diverso.

La lezione: Non lasciare che le cose accadano, fai che le cose accadano. Se non sei soddisfatto del modo in cui stai imparando, cambialo!

* Non le decisioni più saggi che ho preso.

    
risposta data 08.02.2012 - 07:24
fonte
3

Dipende da ciò che stai cercando di memorizzare ...

Per studiare matematica, ad esempio, devi avere familiarità con l'algebra e spesso devi essere piuttosto creativo nel modo di eseguire le manipolazioni algebriche per semplificare le equazioni. Ma devi aver memorizzato alcuni elementi costitutivi per poterti concentrare su quei bit interessanti. Devi, ad esempio, conoscere a memoria le tue tabelle di moltiplicazione e devi conoscere alcune identità in modo che tu possa riconoscere come manipolare le equazioni per usare quelle identità.

Allo scopo di studiare l'informatica, è necessario avere familiarità con le strutture e gli algoritmi di base dei blocchi predefiniti perché è necessario applicarli a problemi di livello superiore. È altamente improbabile che tu possa, per esempio, scrivere la tua implementazione di liste collegate nel mondo reale, devi semplicemente usare quella fornita dalla tua libreria. Ma sapendo come viene implementato un elenco collegato e come implementare il proprio, è possibile ragionare su dove e se utilizzare un elenco collegato quando si inizia a lavorare su problemi di livello superiore. Allo stesso modo, non si scriverà mai la propria funzione di ricerca binaria, ma è importante capire come funziona in modo da poter ragionare su cose come quando un database potrebbe usare un indice e dove non potrebbe.

Una volta memorizzati alcuni blocchi elementari di base, è molto più semplice fare cose come interpretare la documentazione. La documentazione potrebbe indicare che un elenco viene utilizzato e presupporre che il programmatore sappia implicitamente che ciò significa che gli inserimenti sono O (1) e le ricerche sono O (n). Gli elementi costitutivi sono anche molto più stabili nel tempo - è molto probabile che utilizzi nuovi debugger ogni pochi anni, è probabile che tu usi la stessa ricerca binaria per tutta la tua carriera.

    
risposta data 08.02.2012 - 02:17
fonte
3

"Perché il CS insegna a concentrarsi sulla memorizzazione ... al contrario di insegnare abilità utili" - Penso che stai tralasciando la memorizzazione un po 'troppo. Proprio come dovresti esercitarti a scrivere codice, interpretare la documentazione, usando il debugger, dovresti anche praticare la memorizzazione.

Potresti essere sorpreso di quanto tu possa diventare più efficiente se non devi andare al riferimento API più spesso o cercare tutti i comandi del debugger.

Una delle cose migliori che ho imparato al liceo è stata osservando un amico che non ha mai preso appunti in classe. La sua argomentazione era che potesse ricordare ciò che è importante. Ho iniziato a fare la stessa cosa e penso che abbia migliorato le mie capacità di memorizzazione che trovo molto utile su base giornaliera anche con tutti quei riferimenti API facilmente disponibili.

    
risposta data 08.02.2012 - 02:42
fonte
2

Gli esami di penna e carta hanno effettivamente senso se l'obiettivo è quello di testare una comprensione completa del soggetto a portata di mano. Ho fatto l'esame di Computer Science AB quasi un decennio fa e sono d'accordo con il metodo penna e carta.

Dovresti conoscere abbastanza algoritmi che impari nei livelli inferiori di Informatica per essere in grado di ragionare su come scrivere il codice di implementazione nella lingua di destinazione. Gli studenti dovrebbero anche essere in grado di scrivere codice a mano con sintassi per lo più corretta. A volte ci manca un punto e virgola o una parentesi :). Inoltre, le capacità di debug e di progettazione possono essere testate senza deduzione da un IDE utile.

Se uno studente non può farlo, allora non possiede la padronanza di quell'argomento, solo forse una familiarità passeggera.

    
risposta data 08.02.2012 - 02:36
fonte
-2

Nella mia esperienza, la memorizzazione avviene con una semplice pratica e non c'è assolutamente bisogno di insegnarla affatto. Ancora più importante, questo approccio significa solo memorizzare ciò che effettivamente hai bisogno di ricordare in qualunque cosa tu stia facendo, non un mucchio di spazzatura casuale che il tuo insegnante spera che tu possa aver bisogno e invariabilmente non lo farai. Il tempo dedicato a memorizzare l'implementazione di alcuni algoritmi potrebbe essere molto meglio dedicato ad altre cause.

Dopo tutto, perché avresti mai avuto bisogno di esercitarti a scrivere un algoritmo? Una volta che lo scrivi una volta, puoi riutilizzarlo per tutto il tempo, anche sulla remota possibilità che qualcun altro non abbia già scritto un'implementazione liberamente disponibile per la lingua di tua scelta e che la tua l'ambiente non fornisce già un tale algoritmo per il tuo uso, il che non è banalmente vero per la stragrande maggioranza dei semplici algoritmi come l'ordinamento e così via. Praticare qualcosa in cui è altamente improbabile che tu abbia mai dovuto farlo in primo luogo e anche se lo fai, dovrai farlo solo una volta sola? Non è un prezioso uso del tempo.

La cosa importante da sapere su Heapsort non è come implementarla affatto. È la complessità operativa nei casi migliori e peggiori, e cose simili. Ma, sorpresa, c'è un comodo tavolo da dandy su Wikipedia che ti darà istantaneamente queste informazioni. Quindi ancora, non c'è valore nell'avere questa conoscenza. È immediatamente disponibile per te ogni volta che lo desideri da ora fino alla fine dei tempi a costo zero. Allora, perché vorresti memorizzarlo? È inutile.

Nella mia esperienza, non c'è assolutamente alcun motivo per richiedere a uno studente di memorizzare qualcosa. Se stai facendo una domanda a cui è possibile rispondere da una fonte di riferimento, stai facendo una domanda in cui la possibilità di rispondere non ha valore.

    
risposta data 08.02.2012 - 13:21
fonte

Leggi altre domande sui tag