[Python] TIOBE vs PYPL

Valerio Maggio valerio.maggio a gmail.com
Dom 22 Dic 2013 10:19:15 CET


> "Roberto De Ioris" <roberto a unbit.it> wrote:
> 
> 
>> Valerio Maggio wrote:
>> Certo, ora sostituirei Pascal con Python quale linguaggio per insegnare a
>> programmare (come fanno al MIT per gli undergraduate, giusto per citarne
>> una), ma di certo non lo rimpiazzerei con il C.
>> I neofiti, l'aritmetica dei puntatori tipicamente non la comprendono
>> *davvero* e, insegnare C senza puntatori, significa IMHO non insegnare C.
> 
> Questa cosa del problema dei puntatori non la capiro' mai...
> 
> E' da quando vado alle medie che c'e' l'incubo dei puntatori, colleghi di
> universita' e colleghi di lavoro che non la capiscono, gente che dice che
> C e' una merda perche' devi lavorare con i puntatori (???)

No infatti.. Sono d'accordo sul rant.. Lamentele di questo tipo sono totalmente fuori luogo, specie se arrivano da professionisti con una certa maturità piuttosto che da neofiti che non sanno programmare.

> 
> Per come la vedo io, se non capisci i puntatori vuol dire che non hai
> capito come funzionano CPU e memoria, o peggio che non te lo hanno
> insegnato (ma voglio davvero sperare che non si insegni il C senza una
> base di architetture)
> 
> Parliamo di un concetto che probabilmente potrebbe essere spiegato
> facilmente a un bambino delle elementari.
> Forse mi sfugge qualcosa nel grande schema delle cose ?

Anche qui, pienamente d'accordo. Le cose che vedo sono tipicamente due:
La prima è che "tipicamente" uno studente e neofita della programmazione (a.k.a. niubbo) non ha questi concetti elementari ben chiari in mente/ non gli vengono spiegati / nessuno gli fa capire *bene* quale sia il collegamento prima di aver completato il primo anno.

Questo vale considerando l'osservazione empirica di studenti del primo anno di università senza background informatico, quindi il worst case, nella mia personalissima esperienza accademica.

Difatti, è un dato di fatto che gli studenti del primo anno del corso di programmazione, l'aritmetica dei puntatori non la capiscono/capivano, da qui l'abbandono dell'uso del linguaggio C al corso.
Abbandono che in alcuni casi si è concretizzato nell'uso di altri linguaggi, mentre in altri ha implicato l'uso di una versione di C "leggero" che escludesse l'aritmetica dei puntatori (non so che dialetto del C sia e non mi interessa conoscerlo... Scelta a mio parere, deprecabile!)

Naturalmente poi si potrebbe spostare il problema e analizzare anche *come* l'argomento viene presentato e con che contesto.. Insomma, come saprete, la questione è annosa e potremmo stare a parlarne a lungo.

Secondo aspetto da considerare, poi,  è che cosa si intenda per "programmazione":
Se il focus è "imparare a scrivere algoritmi" - imparando la differenza tra le varie strutture dati e i costrutti iterativi o la programmazione di funzioni ricorsive, beh allora in quel caso, a mio modestissimo parare, insegnare *anche* l'aritmetica dei puntatori sarebbe *rumore*: aggiunge informazioni tipicamente spiegate male (perché non ci sarebbe il tempo materiale per approfondirle) e fuori contesto (i.e., potrei fare a meno di conoscere l'aritmetica dei puntatori per implementare un metodo/funzione di append in una linked list).
A volte quest'ultimo problema si risolve limitando l'uso di strutture dati alle sole ad allocazione statica: esempio di quando io ero studente del primo anno, oramai ben dieci anni fa, nel mio corso si faceva Pascal al corso di programmazione e Ansi C al corso di algoritmi.
Non so bene quale sia ora la situazione, ma scelte del genere oggi le troverei alquanto "anacronistiche".

Inoltre, altra dovuta precisazione è che mi sto riferendo ad "aritmetica dei puntatori", vale a dire "gestione esplicita dei puntatori a basso livello a-la-C". È naturale che concetti come "passaggio per valore o riferimento" o "memorizzazione di istanze tra oggetti" sottende intrinsecamente ad una consapevolezza di cosa un puntatore sia in termini generali. 
Ma non impone che lo studente si incasini tra "asterischi" ed "ampersand" (ricordo, il target è sempre il niubbo con poca maturità informatica) o che arrivi agli "esoterismi" di Marco :-)

Al contrario, se con "programmazione" il focus è sulla "gestione e ottimizzazione della memoria" o, alternativamente, "programmare con consapevolezza di cosa siano le locazioni di memoria e come questa sia gestita in un programma", allora C è un *must*.

La mia modesta visione delle cose su questo punto, in conclusione (scusate la mia consueta prolissità), è che per un corso di programmazione, io utilizzerei un approccio a-la-Python per le solite *ovvie* ragioni ("runnable pseudo-code", "shallow learning curve",....,"it was nice to learn Python, a good afternoon" (cit.) !-)

Di contro, però, penso anche che uno studente non può terminare il suo corso di studi triennale senza saper programmare in C. *Tassativamente*.
Questo però tipicamente succede quando il "problema dei puntatori" viene estremizzato prima di tutto dagli insegnati, che presentano "C" come il mal e assoluto e "Java" come il bene supremo.
Estremizzazioni che andrebbero immediatamente *sradicate*!!

m2c
--
Valerio




Maggiori informazioni sulla lista Python