Come iniziare a imparare meglio la programmazione - con lingue imperative o dichiarative? [chiuso]

5

Qualcuno è interessato a imparare a programmare. Quale paradigma linguistico dovrei raccomandarlo: imperativo o dichiarativo? E quale linguaggio di programmazione dovrebbe iniziare?

Penso che sia dichiarativo perché è più vicino alla matematica. E direi che Prolog potrebbe essere l'inizio migliore perché è basato sulla logica e i programmi sono brevi. D'altra parte a scuola abbiamo iniziato ad imparare dalle lingue imperative e non sono sicuro se ci sia un vantaggio per iniziare con loro invece di quelli dichiarativi.

Grazie. :)

    
posta user712092 03.08.2011 - 19:38
fonte

7 risposte

9

Insegnavo a Prolog come prima lingua alle matricole (seguita da Scheme e Java nei prossimi semestri). È stato fantastico per alcuni di loro e apparentemente completamente impenetrabile per molti altri. La programmazione logica può essere molto vicina alla logica matematica, ma molte persone non sono, di fatto, molto brave in logica formale - è molto diversa dal tipo di ragionamento (in gran parte informale o addirittura inconscio) che le persone usano quotidianamente.

D'altra parte, ho anche insegnato Java prima, con lo stesso rapporto di successo! In questi giorni credo che dipenda molto dal singolo studente per fare un suggerimento generale. Continuo a pensare che iniziare con linguaggi di livello quasi macchina (per capire cosa sia effettivamente che sta accadendo nel computer) e poi progredire verso linguaggi più astratti è stato per me il modo giusto, ma l'esperienza mi ha convinto che questo non è il tipo di raccomandazione che può essere generalizzato.

    
risposta data 03.08.2011 - 22:10
fonte
6

Mi piace la tua idea di insegnare il Prolog come prima lingua, ma i giovani programmatori ambiziosi vogliono fare qualcosa. Ho insegnato programmazione ai bambini molti anni fa e abbiamo fatto un sacco di VB6 - prima che tutti si vergognassero, il VB6 era molto facile da ottenere, e i programmi su cui lavoravamo erano solitamente giochi o qualcosa di grafico, che era anche molto facile da configurare e iniziare in VB6. Gli studenti hanno avuto l'opportunità di vedere risultati immediati cambiando il loro codice, si sono divertiti moltissimo e spesso si sono spostati su alcuni dei corsi più avanzati in C ++ e Java, con pochissimi problemi di transizione.

Suppongo che dipenda dal programmatore che lavora per la prima volta, ma mi limiterei all'imperativo semplicemente perché ci sono molti più strumenti e librerie disponibili per "creare cose interessanti" - a meno che tu non conosca qualcosa di interessante per Prolog, in tal caso mi piacerebbe saperlo.

    
risposta data 03.08.2011 - 19:54
fonte
6

Non iniziarei con un linguaggio come PROLOG. Quando sei un programmatore principiante, vuoi davvero essere esplicito. PROLOG non è particolarmente esplicito con nulla. Insegnerei una lingua con un'esecuzione semplice e ovvia.

    
risposta data 03.08.2011 - 20:54
fonte
5

Penso che un linguaggio multi-paradigma, come Python o Scala, sarebbe il migliore. Questi non ti costringono a un singolo paradigma, ma ti permettono di insegnare linguaggi procedurali, funzionali e orientati agli oggetti senza la barriera di imparare una nuova sintassi. Questi sono anche i principali paradigmi usati nel "mondo reale" dello sviluppo del software, almeno per ora.

Seguendo il punto che FrustratedWithFormsDesigner ha reso , questi linguaggi soddisfano anche la voglia di costruire qualcosa - è abbastanza facile sviluppare applicazioni che coinvolgono input e output (e anche interfacce grafiche utente) rapidamente, in modo da poter vedere e utilizzare attivamente cosa stai costruendo.

    
risposta data 03.08.2011 - 20:04
fonte
5

Il dichiarativo può essere più simile alla matematica, ma nella vita reale molto più spesso usiamo dichiarazioni imperative per trasmettere istruzioni. Ad esempio, il modo imperativo:

Go potty, then wash your hands, brush your teeth, and go to bed.

rispetto al modo dichiarativo.

Bed time is at 8 o'clock. Going potty is always done before bed. Washing your hands is always done after going potty. Brushing your teeth is always done before bed. The current time is 8 o'clock.

Quindi, naturalmente, tuo figlio prova a lavarsi le mani dopo andando a letto, o fa qualcosa di grossolano come lavarsi i denti contemporaneamente mentre usa il bagno, e devi fare ancora più dichiarazioni per coprire queste condizioni. (E ogni genitore sa che i bambini sono straordinariamente abili nel trovare quelle scappatoie.)

Fondamentalmente, a meno che tu non stia insegnando a un gruppo di persone la cui applicazione primaria immediata per i computer sta per descrivere le relazioni tra cose, come matematici, scienziati o statistici, è meglio iniziare con lingue imperative.

    
risposta data 03.08.2011 - 23:58
fonte
2

Mi sono insegnato Commodore Structured Bsic, poi ho imparato Waterloo Structured Basic e Fortran al liceo, e l'ho trovato così facile. Poi ho insegnato a me stesso il Prolog e, mentre odiavo la curva di debugging e apprendimento (dopo aver insegnato metodi puramente imperativi), alla fine l'ho imparato e fino ad oggi, rimane la mia lingua preferita. Non che io abbia poche probabilità di usarlo, ma ti insegna a davvero a pensare all'applicazione in questione, e ad abbattere il lavoro, invece di immergerti a fatica e mordicchiare il compito proceduralmente .

Oggigiorno uso varie lingue imperative e mi manca l'eleganza di Prolog, ma le lezioni che ho imparato non sono mai andate perse. Chiunque può imparare le lingue imperative, ma impararle prima rende più difficile l'apprendimento successivo delle lingue dichiarative. Imparare le lingue dichiarative prima insegna buoni concetti per la vita e salva il dolore cercando di capirlo dopo aver imparato le lingue imperative.

Se scriverete solo script o app semplici con routine altamente deliberate che potete facilmente capire, allora potreste anche saltare le lingue dichiarative, ma se poteste mai affrontare qualcosa di troppo grande per ogni singolo cervello umano, voi benedirà i giorni in cui hai appreso le tecniche per attaccare un progetto usando un linguaggio dichiarativo. E perché limitarti dal primo al semplice codice che un giorno sarà sicuramente fatto da un'app o offshorato per una frazione del tuo prezzo? Dico che vale veramente la pena del "dolore".

Quindi voto per imparare una lingua dichiarativa a scuola, quindi un linguaggio imperativo più popolare, che è il modo migliore per instillare un buon comportamento di pianificazione riducendo al minimo la curva di apprendimento.

    
risposta data 10.09.2012 - 00:22
fonte
1

Non posso sottolineare abbastanza che dipende dalla persona.

Supponendo che vogliono imparare in primo luogo, un dato studente può fare molto bene con un linguaggio dichiarativo, o può aver bisogno di un linguaggio imperativo per ottenere un punto d'appoggio concettuale. Potrebbero saltare felicemente a fare confusione con concetti astratti e pura matematica, oppure potrebbero perdere completamente senza feedback amichevoli e visivi. Possono dare il via alla creazione di loop eleganti e funzioni ricorsive, oppure possono perdere interesse se non riescono a manipolare direttamente le cose sullo schermo. Possono connettersi con il flusso di un linguaggio funzionale, oppure possono apprezzare la rappresentazione concreta di uno orientato agli oggetti.

La mia introduzione al mondo della programmazione è stata un po 'di TI-83 BASIC durante la geometria, una classe Java del liceo, un corso "intro to computing" del college che utilizzava VB.NET e un'estate che faceva un'applicazione Access in VBA per uno stage. E questa estate, ho fatto un progetto usando il framework Spring.

Essendo il punto, ho raccolto cose dappertutto, e nessuna di quelle (eccetto Spring) avrebbe potuto essere la mia introduzione primaria alla programmazione. Ma per qualcun altro, potrebbero essere meglio con Haskell o Prolog o C o addirittura con JavaScript. E per molte persone, non importa se cosa tu lanci contro di loro - lo impareranno comunque. Quindi si tratta della tua capacità di capire cosa, se mai, bisogno di essere in grado di apprendere in modo efficace e scegliere i tuoi strumenti in modo appropriato.

    
risposta data 04.08.2011 - 00:07
fonte