Proposta didattica
Oggi stavo pensando agli esami di informatica all'università. Il loro scopo è spesso insegnare a programmare e per farlo usano un particolare linguaggio seppur spesso gli stessi professori dichiarino di non essere interessati ad insegnarlo. Inoltre come si evince dalla loro dispense il loro corsi sono pieni di improprietà e a volte addirittura errori relativi al linguaggio usato. In alcuni casi questi sono basati a vecchie versioni del linguaggio (che evidentemente non usano) o del compilatore (o anche a specifiche estensione del linguaggio su una piattaforma specifica).
Il motivo di questo fatto è che il professore spesso non è un esperto di programmazione quanto più di informatica o argomenti correlati.
Insegnare a programmare senza insegnare anche un linguaggio è come insegnare a scrivere un romanzo senza preoccuparsi della lingua. Su questa frase ho pensato: "E se l'esame di informatica fosse trattato come un esame di lingua". Io a scienze politiche ho dato un esame di linguistica inglese e per dare l'esame dovevo passarne uno di lingua. La lingua non veniva insegnata nel corso ma da un gruppo che si occupava solo di quello.
Quello che intendo dire è che all'inizio del primo anno si faccia un esame sulle tue conoscenze informatiche di un particolare linguaggio e se lo passi puoi dare l'esame di informatica (anzi seguire). Se non lo passi vieni messo in delle classi (volendo di livelli diversi) in cui imparare a "programmare" in un particolare linguaggio. Il corso di informatica, volendo senza fare riferimento ad un linguaggio specifico (basta che tu ne sappia uno), invece insegnerebbe a programmare e la teoria che ci sta dietro. Parte della teoria l'avrai certo fatta imparando il linguaggio ma qui la amplii e la vedi con maggiore approfondimento. Volendo può anche essere un corso di algoritmi e strutture dati serio. Inoltre questo sistema potrebbe insegnarti più linguaggi di programmazione come puoi fare un corso di lingue in università. I corsi di programmazione sarebbero fatti da persone che sanno programmare e quelli che non sanno niente hanno tempo di imparare e chi sa abbastanza non si annoia a morte.
Che ne pensate?
P.S.: La mia è una proposta volutamente trasgressiva per ispirare commenti pro e contro e certo nulla di quello detto qui avrà influssi sull'insegnamento dell'informatica.
Il motivo di questo fatto è che il professore spesso non è un esperto di programmazione quanto più di informatica o argomenti correlati.
Insegnare a programmare senza insegnare anche un linguaggio è come insegnare a scrivere un romanzo senza preoccuparsi della lingua. Su questa frase ho pensato: "E se l'esame di informatica fosse trattato come un esame di lingua". Io a scienze politiche ho dato un esame di linguistica inglese e per dare l'esame dovevo passarne uno di lingua. La lingua non veniva insegnata nel corso ma da un gruppo che si occupava solo di quello.
Quello che intendo dire è che all'inizio del primo anno si faccia un esame sulle tue conoscenze informatiche di un particolare linguaggio e se lo passi puoi dare l'esame di informatica (anzi seguire). Se non lo passi vieni messo in delle classi (volendo di livelli diversi) in cui imparare a "programmare" in un particolare linguaggio. Il corso di informatica, volendo senza fare riferimento ad un linguaggio specifico (basta che tu ne sappia uno), invece insegnerebbe a programmare e la teoria che ci sta dietro. Parte della teoria l'avrai certo fatta imparando il linguaggio ma qui la amplii e la vedi con maggiore approfondimento. Volendo può anche essere un corso di algoritmi e strutture dati serio. Inoltre questo sistema potrebbe insegnarti più linguaggi di programmazione come puoi fare un corso di lingue in università. I corsi di programmazione sarebbero fatti da persone che sanno programmare e quelli che non sanno niente hanno tempo di imparare e chi sa abbastanza non si annoia a morte.
Che ne pensate?
P.S.: La mia è una proposta volutamente trasgressiva per ispirare commenti pro e contro e certo nulla di quello detto qui avrà influssi sull'insegnamento dell'informatica.
Risposte
Domanda: a che Corsi di Studio di riferisci nel tuo discorso?
L'informatica utilizzata a Matematica è piuttosto diversa, da quella che può utilizzare un Filosofo...
L'informatica utilizzata a Matematica è piuttosto diversa, da quella che può utilizzare un Filosofo...
"ham_burst":
Domanda: a che Corsi di Studio di riferisci nel tuo discorso?
L'informatica utilizzata a Matematica è piuttosto diversa, da quella che può utilizzare un Filosofo...
Alle materie scientifiche ovviamente

Ad Informatica - e credo anche a Matematica, qualcuno mi confermi o smentisca se sbaglio - il problema non si pone.
Infatti, credo tu ti riferisca agli esami dei corsi di ingegneria (non IngInf) o altri, dove in genere c'è un esame che io ho recentemente ribattezzato "minestrone". Ma secondo me, sarebbe bene proprio l'opposto (e credo il tuo paragone con la lingua sia incongruo), cioé fare un corso dove si fa una base di programmazione/algoritmi/strutture senza un linguaggio "vero", e poi fare un bel corso tipo laboratorio, parallelamente oppure (meglio) dopo, dove fare un po' di architetture ed usare il C, o Java, o Matlab o altro a seconda dei casi e delle simpatie. Della serie, passiamo dalla teoria all'applicazione e non viceversa.
Infatti, credo tu ti riferisca agli esami dei corsi di ingegneria (non IngInf) o altri, dove in genere c'è un esame che io ho recentemente ribattezzato "minestrone". Ma secondo me, sarebbe bene proprio l'opposto (e credo il tuo paragone con la lingua sia incongruo), cioé fare un corso dove si fa una base di programmazione/algoritmi/strutture senza un linguaggio "vero", e poi fare un bel corso tipo laboratorio, parallelamente oppure (meglio) dopo, dove fare un po' di architetture ed usare il C, o Java, o Matlab o altro a seconda dei casi e delle simpatie. Della serie, passiamo dalla teoria all'applicazione e non viceversa.
"Rggb":
Ad Informatica - e credo anche a Matematica, qualcuno mi confermi o smentisca se sbaglio - il problema non si pone.
Infatti, credo tu ti riferisca agli esami dei corsi di ingegneria (non IngInf) o altri, dove in genere c'è un esame che io ho recentemente ribattezzato "minestrone". Ma secondo me, sarebbe bene proprio l'opposto (e credo il tuo paragone con la lingua sia incongruo), cioé fare un corso dove si fa una base di programmazione/algoritmi/strutture senza un linguaggio "vero", e poi fare un bel corso tipo laboratorio, parallelamente oppure (meglio) dopo, dove fare un po' di architetture ed usare il C, o Java, o Matlab o altro a seconda dei casi e delle simpatie. Della serie, passiamo dalla teoria all'applicazione e non viceversa.
No, no... io intendevo anche a matematica (e penso informatica). Io che sapevo già programmare l'ho trovato noiosissimo (e talvolta non corretto). Il problema era che doveva insegnare il c++ (che poi era più un C con "classi" e stringhe ma senza oggetti) a chi sapeva a mala pena cos'era un blocco di testo ed insegnare delle altre cose sulla programmazione. Solo che le altre cose erano veramente banali per chi sapeva già programmare. Poi ovviamente ad ingegneria si raggiunge l'apoteosi... ma lì il problema è un altro nel senso che si fa troppo e male. Anche levando il linguaggio di programmazione quello che rimane è un minestrone mal assortito.
Comunque non è che diciamo cose proprio diverse: io volevo levare l'insegnamento del linguaggio dal corso e tu pure solo che io ritengo che senza un linguaggio di programmazione il corso sia inutile e tu che sia inutile programmare senza sapere le cose prima

Capiamoci il corso si può fare con un pseudolinguaggio ma poi non si può compilare e vedere il risultato quindi la vedo dura. Inoltre non penso che i linguaggi di programmazione vengano insegnati bene all'università...
Il problema non è l'insegnamento di un linguaggio durante il corso, il problema è la scelta del linguaggio che è sbagliata: insegnare il C (o peggio il C++) come primo linguaggio è a mio parere controproducente: la maggior parte degli studenti non imparano a programmare, tanto meno il C che non è un linguaggio difficile, semplicemente non è fatto per imparare a programmare.
Da una ventina d'anni abbiamo il linguaggio *perfetto* per insegnare a programmare che è Python: permette di concentrarsi sulla teoria della programmazione senza necessità di soffermarsi sulla sintassi, bellissima tra l'altro, del linguaggio finché non si avranno gli strumenti per farlo. Inoltre permette di arrivare a scrivere dei programmi funzionanti e funzionali abbastanza complessi in breve tempo, un fattore che secondo me invoglia anche gli studenti ad applicarsi.
Il C si può recuperare in un secondo tempo e farlo in maniera decente, ovvero studiando sul K&R che è il miglior manuale sulla programmazione che abbia mai letto, altro che le dispensine piene di errori dei prof.
Da una ventina d'anni abbiamo il linguaggio *perfetto* per insegnare a programmare che è Python: permette di concentrarsi sulla teoria della programmazione senza necessità di soffermarsi sulla sintassi, bellissima tra l'altro, del linguaggio finché non si avranno gli strumenti per farlo. Inoltre permette di arrivare a scrivere dei programmi funzionanti e funzionali abbastanza complessi in breve tempo, un fattore che secondo me invoglia anche gli studenti ad applicarsi.
Il C si può recuperare in un secondo tempo e farlo in maniera decente, ovvero studiando sul K&R che è il miglior manuale sulla programmazione che abbia mai letto, altro che le dispensine piene di errori dei prof.
"vict85":
No, no... io intendevo anche a matematica (e penso informatica).
Ribadisco, a informatica (ed ingegneria informatica, se fatta a modino) il problema non si pone. Evidentemente a matematica c'è qualcosa di diverso - e deduco tu non faccia informatica.

"Deckard":
Il problema non è l'insegnamento di un linguaggio durante il corso, il problema è la scelta del linguaggio che è sbagliata...
Io invece penso sia proprio l'approccio che è sbagliato; il linguaggio, reale o fittizio, non c'entra quasi per niente. Programmare è una attività che - in essenza - deve trasporre problemi reali in algoritmi, se manco hai capito cosa sia un algoritmo non c'è Pyton che tenga.
Certo, se imposti un corso decente in cui - parallelamente alla teoria - usi Pyton per la pratica, siamo già messi meglio rispetto ai minestroni sopradetti, e magari riesci a fare un corso di programmazione basilare con qualche risultato utile.
"Deckard":
... altro che le dispensine piene di errori dei prof.
Abbi pazienza... insegnano all'università: pochissimi sono validi programmatori.

Io non credo che sia possibile insegnare la programmazione senza insegnare un qualche linguaggio. Lo penso per parecchie ragioni:
- Lavorando con un linguaggio reale è possibile verificare le proprie conoscenze. È possibile cioè verificare sperimentalmente il funzionamento dell'algoritmo e comprenderlo meglio (si può per esempio eseguire il codice un'istruzione per volta con un debugger o stampare a video gli stati intermedi). Limitandosi a scrivere i propri programmi con diagrammi o in pseudo-codice questa fase di verifica manca completamente. Si può certamente eseguire il programma "manualmente" su un foglio di carta, ma è difficile capire se si è davvero capito tutto.
- Quando si crea qualcosa di funzionante ci si sente gratificati per il proprio lavoro e si è spinti a proseguire. Io credo che la maggior parte degli studenti si aspettino di imparare a realizzare dei programmi entro la fine del corso. Alcuni ne sono molto probabilmente già in grado. Un corso troppo teorico e astratto rischia di non attirare molto l'attenzione degli studenti, studenti che non sono ancora in grado di apprezzare quello che gli viene insegnato. Facendo uso del giusto linguaggio e dei giusti esercizi è invece possibile attirare la loro attenzione e portarli a comprendere perché un algoritmo è meglio di un altro o perché è importante studiare gli algoritmi.
- Lo sviluppo di un software non si limita alla sua progettazione. L'implementazione del codice è un'altra fase importante dell'attività di un programmatore. Un programmatore che non è in grado di trasformare le proprie idee in codice è più inutile di uno che ha poche idee ma che sa trasformarle in qualcosa di funzionante. Credo che un buon corso di programmazione dovrebbe soffermarsi su tutte le fasi di sviluppo di un software, dedicando quindi tempo alla progettazione dell'architettura del codice, alla scelta degli algoritmi e delle strutture dati da usare, all'implementazione del codice e alla verifica e correzione degli errori.
Un buon primo corso di programmazione deve secondo me seguire i seguenti punti:
1. Essere “sperimentale”. Deve cioè richiedere agli studenti di progettare, implementare e verificare funzionalmente diversi progetti di difficoltà crescente. Per costringere gli studenti a seguire queste fasi, tutte necessarie, si può richiedere la consegna di relazioni. Per favorire poi la sperimentazione e la creatività personale è poi possibile premiare lo sviluppo di funzionalità aggiuntive (non necessariamente utili, anche estetiche o simpatiche*). È importante che lo studente non venga comunque lasciato solo e che venga aiutato a trovare da solo le soluzioni ai propri problemi. I progetti devono inoltre essere preparati in modo che siano uno stimolo per gli studenti e che contemporaneamente portino gli studenti a desiderare la teoria che successivamente verrà insegnata (dandogli contemporaneamente la possibilità di scoprirla da soli in precedenza). È importante osservare che non c'è alcuna ragione al mondo per cui gli studenti dovrebbero partire a sviluppare tutti i progetti dal nulla. Il professore potrebbe fornire delle funzioni che facilitino alcune operazioni o fornire funzionalità, ad esempio grafiche, che richiederebbero parecchio lavoro.
2. Fornire tutti gli strumenti necessari per analizzare un algoritmo o una struttura dati e realizzarne di proprie. Questo punto credo si commenti da solo.
Per quanto riguarda il linguaggio da usare, credo che sia sufficiente essere ben conosciuto e usato dal professore. In mancanza di un linguaggio che rispetti tale condizione...
direi che sarebbe meglio cambiare il professore o almeno usare un libro invece che le sue dispense. Ogni linguaggio che faciliti i punti precedenti è poi ovviamente preferibile. Python è un buon esempio, ma credo che anche C# lo sia.
Credo che sarebbe utile aprire questo corso anche a studenti di materie non necessariamente affini all'informatica. Infatti, anche in settori quali la medicina o le scienze sociali o la psicologia o la linguistica si sta facendo un uso sempre maggiore di software per le proprie ricerche. Anche se i software più complessi verranno sempre realizzati da programmatori esperti, credo che un minimo di familiarità nella programmazione possa essere utile in tutti i settori.
EDIT: Dei corsi simili a quello da me descritto, anche se con obiettivi un po' diversi, più pratici e un po' meno teorici, sono stati attivati (sono in realtà abbastanza rari, tipo 3 in 5 anni, perché richiedono un certo impegno e dedizione da parte degli utenti più esperti) con grande successo su un forum americano che frequento per sviluppatori di videogiochi. Per esempio questo era quello di C#. Immagino che ci siano iniziative simili anche su altri forum/comunità online.
* Tipo easter eggs.. a patto ovviamente di non essere volgari o inappropriati.
- Lavorando con un linguaggio reale è possibile verificare le proprie conoscenze. È possibile cioè verificare sperimentalmente il funzionamento dell'algoritmo e comprenderlo meglio (si può per esempio eseguire il codice un'istruzione per volta con un debugger o stampare a video gli stati intermedi). Limitandosi a scrivere i propri programmi con diagrammi o in pseudo-codice questa fase di verifica manca completamente. Si può certamente eseguire il programma "manualmente" su un foglio di carta, ma è difficile capire se si è davvero capito tutto.
- Quando si crea qualcosa di funzionante ci si sente gratificati per il proprio lavoro e si è spinti a proseguire. Io credo che la maggior parte degli studenti si aspettino di imparare a realizzare dei programmi entro la fine del corso. Alcuni ne sono molto probabilmente già in grado. Un corso troppo teorico e astratto rischia di non attirare molto l'attenzione degli studenti, studenti che non sono ancora in grado di apprezzare quello che gli viene insegnato. Facendo uso del giusto linguaggio e dei giusti esercizi è invece possibile attirare la loro attenzione e portarli a comprendere perché un algoritmo è meglio di un altro o perché è importante studiare gli algoritmi.
- Lo sviluppo di un software non si limita alla sua progettazione. L'implementazione del codice è un'altra fase importante dell'attività di un programmatore. Un programmatore che non è in grado di trasformare le proprie idee in codice è più inutile di uno che ha poche idee ma che sa trasformarle in qualcosa di funzionante. Credo che un buon corso di programmazione dovrebbe soffermarsi su tutte le fasi di sviluppo di un software, dedicando quindi tempo alla progettazione dell'architettura del codice, alla scelta degli algoritmi e delle strutture dati da usare, all'implementazione del codice e alla verifica e correzione degli errori.
Un buon primo corso di programmazione deve secondo me seguire i seguenti punti:
1. Essere “sperimentale”. Deve cioè richiedere agli studenti di progettare, implementare e verificare funzionalmente diversi progetti di difficoltà crescente. Per costringere gli studenti a seguire queste fasi, tutte necessarie, si può richiedere la consegna di relazioni. Per favorire poi la sperimentazione e la creatività personale è poi possibile premiare lo sviluppo di funzionalità aggiuntive (non necessariamente utili, anche estetiche o simpatiche*). È importante che lo studente non venga comunque lasciato solo e che venga aiutato a trovare da solo le soluzioni ai propri problemi. I progetti devono inoltre essere preparati in modo che siano uno stimolo per gli studenti e che contemporaneamente portino gli studenti a desiderare la teoria che successivamente verrà insegnata (dandogli contemporaneamente la possibilità di scoprirla da soli in precedenza). È importante osservare che non c'è alcuna ragione al mondo per cui gli studenti dovrebbero partire a sviluppare tutti i progetti dal nulla. Il professore potrebbe fornire delle funzioni che facilitino alcune operazioni o fornire funzionalità, ad esempio grafiche, che richiederebbero parecchio lavoro.
2. Fornire tutti gli strumenti necessari per analizzare un algoritmo o una struttura dati e realizzarne di proprie. Questo punto credo si commenti da solo.
Per quanto riguarda il linguaggio da usare, credo che sia sufficiente essere ben conosciuto e usato dal professore. In mancanza di un linguaggio che rispetti tale condizione...

Credo che sarebbe utile aprire questo corso anche a studenti di materie non necessariamente affini all'informatica. Infatti, anche in settori quali la medicina o le scienze sociali o la psicologia o la linguistica si sta facendo un uso sempre maggiore di software per le proprie ricerche. Anche se i software più complessi verranno sempre realizzati da programmatori esperti, credo che un minimo di familiarità nella programmazione possa essere utile in tutti i settori.
EDIT: Dei corsi simili a quello da me descritto, anche se con obiettivi un po' diversi, più pratici e un po' meno teorici, sono stati attivati (sono in realtà abbastanza rari, tipo 3 in 5 anni, perché richiedono un certo impegno e dedizione da parte degli utenti più esperti) con grande successo su un forum americano che frequento per sviluppatori di videogiochi. Per esempio questo era quello di C#. Immagino che ci siano iniziative simili anche su altri forum/comunità online.
* Tipo easter eggs.. a patto ovviamente di non essere volgari o inappropriati.
"Rggb":
Certo, se imposti un corso decente in cui - parallelamente alla teoria - usi Pyton per la pratica, siamo già messi meglio rispetto ai minestroni sopradetti, e magari riesci a fare un corso di programmazione basilare con qualche risultato utile.
Mi dispiace correggerti ma si chiama Python

Comunque, io ho citato appunto python perché è a mio parere il linguaggio che meglio si presta per far concentrare gli studenti sull'algoritmo senza perdersi nei dettagli della sintassi che d'altronde è quanto di più vicino possibile ad uno pseudocodice. Almeno i primi tempi, dopo se si vuole si può divertirsi anche con la metaprogrammazione, ma beh magari aspetterei qualche lezione

Per il resto concordo completamente con apatriarca.
Capisco che il python è più semplice nella sintassi, ma insegnare il C ha lo scopo di dare delle conoscenze senza le quali non si potrebbero studiare gli altri linguaggi.In alcune università americane insegnano il python, ma con python non si impara a gestire la memoria, mentre si insegna il C proprio perchè lo studente capisca come funzioni un programma.L' allocazione della memoria in C è la parte più utile, dopodichè si studia un pò di assembly del MIPS in modo che lo studente abbia un quadro completo di come funziona una macchina, cioè sa come funziona la memoria e il processore.
Queste sono le basi, dopodichè si può passare agli altri linguaggi.
Sono contrario a questa proposta (so che non è tuo socpo realizzarla) perchè secondo me si insegna anzi troppa poca programmazione al primo anno.
Secondo me bisognerebbe fare un corso teorico completo nel primo semestre, per poi passare al C e all' assembly nel secondo semestre.Toglierei molte parti di matematica e fisica che secondo me sono poco pratiche.
Queste sono le basi, dopodichè si può passare agli altri linguaggi.
Sono contrario a questa proposta (so che non è tuo socpo realizzarla) perchè secondo me si insegna anzi troppa poca programmazione al primo anno.
Secondo me bisognerebbe fare un corso teorico completo nel primo semestre, per poi passare al C e all' assembly nel secondo semestre.Toglierei molte parti di matematica e fisica che secondo me sono poco pratiche.
"ramy1989":
Capisco che il python è più semplice nella sintassi, ma insegnare il C ha lo scopo di dare delle conoscenze senza le quali non si potrebbero studiare gli altri linguaggi.In alcune università americane insegnano il python, ma con python non si impara a gestire la memoria, mentre si insegna il C proprio perchè lo studente capisca come funzioni un programma.L' allocazione della memoria in C è la parte più utile, dopodichè si studia un pò di assembly del MIPS in modo che lo studente abbia un quadro completo di come funziona una macchina, cioè sa come funziona la memoria e il processore.
Al massimo si dovrebbe fare il contrario. Prima l'assembly e poi il C. E comunque neanche col C s'impara a gestire la memoria, visto che la maggior parte di chi sostiene un esame di programamzione sul C la memoria non la sa gestire comunque. Triste realtà, ma vera.
Il fatto che il C NON è adatto per insegnare a programmare secondo me è evidente: una tra le prime nozioni che s'insegnano è la gestione dell'input, ma per saper gestire l'input in C bisogna già conoscere i puntatori e come funziona lo stream I/O (infatti il K&R introduce i puntatori e gli array al cap. 5, mentre l'I/O al capitolo 7). La gestione della memoria ecc. sono cose che vanno sapute, ma che non è necessario introdurre in un primo corso di programmazione, perché altrimenti si rischia di fare le cose male, meglio non farle a questo punto. Se si vuole necessariamente introdurre anche la gestione della memoria in un primo corso di programmazione che si scelga il Pascal perlomeno. Il C è il mio linguaggio preferito e il suo apprendimento ha un valore didattico ineguagliabile, ma non come primo linguaggio di programmazione. Questa opinione è condivisa anche dai docenti del mio corso che insegnano come primo linguaggio Java agli informatici e C ai matematici con risultati differenti.
Sono contrario a questa proposta (so che non è tuo socpo realizzarla) perchè secondo me si insegna anzi troppa poca programmazione al primo anno.
Secondo me bisognerebbe fare un corso teorico completo nel primo semestre, per poi passare al C e all' assembly nel secondo semestre.Toglierei molte parti di matematica e fisica che secondo me sono poco pratiche.
D'accordo sul fatto che forse si insegni poca programmazione al primo anno, assolutamente contrario a diminuire la matematica.
Il C e l'assembly vanno certamente insegnati durante il curriculum universitario, ma è necessario che sia proprio al primo corso? Si può certamente insegnare la programmazione partendo dal basso, dall’elettronica digitale per poi passare all'assembly e infine al C e agli altri linguaggi, ma avrebbe i seguenti problemi:
1. uno studente che si iscrive ad un corso di informatica senza saper programmare, vuole molto probabilmente imparare a programmare il prima possibile;
2. è un percorso didattico molto lungo e difficile per imparare a programmare (si parte dalle cose difficili per poi far diventare tutto semplice);
3. si rischia di dare allo studente un punto di vista troppo di basso livello, con un'attenzione esagerata all'ottimizzazione*;
4. è adeguato solo ad un certo curriculum e non certamente ad un corso di matematica ad esempio.
Io penso che sia già difficile imparare a programmare e il C lo rende inutilmente più complicato. E ci pensano poi i professori a renderlo ancora più difficile.. Nella mia esperienza osservando studenti di informatica del primo anno in diversi forum, posso dire che gli studenti che hanno iniziato con Java sembrano essere più produttivi e avere una conoscenza migliore del linguaggio. Questo è probabilmente dovuto in parte al linguaggio più user-friendly, ma credo che la miglior conoscenza del linguaggio da parte dei professori e l'uso di IDE molto più avanzati abbia contribuito. Se il C venisse insegnato bene non avrei problemi ad accettarlo come primo linguaggio, ma siccome non è questo sfortunatamente il caso credo che sarebbe più opportuno cambiare linguaggio.
* Si potrebbe ovviare a questo punto insegnando in contemporanea o subito dopo un linguaggio fortemente astratto come Haskell.
1. uno studente che si iscrive ad un corso di informatica senza saper programmare, vuole molto probabilmente imparare a programmare il prima possibile;
2. è un percorso didattico molto lungo e difficile per imparare a programmare (si parte dalle cose difficili per poi far diventare tutto semplice);
3. si rischia di dare allo studente un punto di vista troppo di basso livello, con un'attenzione esagerata all'ottimizzazione*;
4. è adeguato solo ad un certo curriculum e non certamente ad un corso di matematica ad esempio.
Io penso che sia già difficile imparare a programmare e il C lo rende inutilmente più complicato. E ci pensano poi i professori a renderlo ancora più difficile.. Nella mia esperienza osservando studenti di informatica del primo anno in diversi forum, posso dire che gli studenti che hanno iniziato con Java sembrano essere più produttivi e avere una conoscenza migliore del linguaggio. Questo è probabilmente dovuto in parte al linguaggio più user-friendly, ma credo che la miglior conoscenza del linguaggio da parte dei professori e l'uso di IDE molto più avanzati abbia contribuito. Se il C venisse insegnato bene non avrei problemi ad accettarlo come primo linguaggio, ma siccome non è questo sfortunatamente il caso credo che sarebbe più opportuno cambiare linguaggio.
* Si potrebbe ovviare a questo punto insegnando in contemporanea o subito dopo un linguaggio fortemente astratto come Haskell.
"apatriarca":
l'uso di IDE molto più avanzati abbia contribuito
Concordo assolutamente in tutto tranne in questo: per un primo corso di programmazione un editor con evidenziazione della sintassi è più che sufficiente e non credo un IDE aiuti nell'apprendimento.
Aiuta nella correzione degli errori però. Un IDE come Eclipse segnala gli errori del codice mentre lo stai scrivendo e mostra la documentazione delle funzioni che stai inserendo nel codice. Inoltre ci sono diversi tools aggiuntivi integrati (lo studente deve imparare un singolo programma). Ammetto che non sia un aspetto solo positivo, ma sicuramente contribuisce alla produttività iniziale. L'aspetto molto negativo che mi viene però in mente e che alcuni studenti che hanno imparato con questo genere di programmi non sa programmare senza. Ma con Python questo problema non si pone perché essendo interpretato molti problemi semplicemente spariscono. Il debugger non è ad esempio necessario perché pasta eseguire un'istruzione per volta.. Alcuni tipi di errori non esistono e così via.
Due commenti veloci:
1) Il K&R è senza dubbio una bibbia ma che non è attualmente conforme allo standard (che ha ormai 10 anni)
2) Il Pascal non lo usa più nessuno e non penso neanche sia facilissimo trovare dei compilatori, se proprio devi dire un linguaggio simile allora insegniamo l'Ada.
1) Il K&R è senza dubbio una bibbia ma che non è attualmente conforme allo standard (che ha ormai 10 anni)
2) Il Pascal non lo usa più nessuno e non penso neanche sia facilissimo trovare dei compilatori, se proprio devi dire un linguaggio simile allora insegniamo l'Ada.