Michele SciabarràCorsoJava
testi corsi mailing
Symbian Java  Linux

Humor
-Psicopatologia Utenti Linux
-Documentario: Sistemista Linux
-Il Grande Mago Informatico
-Se le distro fossero ragazze
-La Calata Dei Barbari
-Programmatori al supermercato
-Clienti di ieri e di oggi
-Colloqui di Lavoro
-Il vero informatico 2005
-Regolamento per Software House
-Diario di un Open Source
-Non usate quel linguaggio
-Decifrare Offerta Lavoro
-Il lavoro in Italia
-I fantastici 4 degli SmartPhones
-Dalla Teoria Alla Pratica
-Cosa Vuole il Cliente
-Colloqui con gli utenti
-La Visione degli Esperti
-Di che pasta è il tuo codice
-Una Email Dal 2143

Tecnica
-JSF ClassLoader -Programmazione Cellulari Symbian
-L'invasione degli SmartPhone
-Intro Eclipse Video!
-ReadLine FrontEnd
-JspWiki

Opinioni
-C'era una volta il cellulare
-Business dell'OpenSource
-Le scuse del Linux World Expo
-Linux non è Comunismo
-Java e l'Open Source
-Chi ha scritto Linux
-Chi ha paura di XAML -Lavorare con Tanenbaum

Informazioni
-Questo sito
-L'autore








Scarica Omaggio
il Capitolo 2




Leggi Online
il Capitolo 6

Il prof Sciabarrozzi a Lezione di Python

Il prof. Sciabarrozzi incautamente va a tenere lezione di Python. Il prof Sciabarrozzi è profondamente un illuso, crede nell'Open Source, crede nell'uso di linguaggio open per fare applicazioni gestionali da dare gratis.

Il prof. Sciabarrozzi è piuttosto vecchio oramai (ha 37 anni), vissuto, ha fatto ditte, scritto libri, tenuto corsi e anche perfino sostenuto progetti Open Source. Per questo motivo, raccoglie le sue poche nozioni di Python, e si permette di tenere gratis una lezione, per quelli che ancora il Python non lo sanno.

In aula c'è il terribile Olyundo, un VERO esperto, figlio del grandissimo Simionis, amico dell'impareggiabile Valanga. Simionis è un ricchissimo imprenditore, che ha fatto i soldi con Python, ed è famoso pure negli Stati Uniti. Valanga è un grande amico di Simionis, ed è il suo general manager.

Valanga e Simionis chiamano Olyundo e gli dicono "guarda qui, questo Sciabarrozzi, e quel deficiente del suo amico DeGerardis, stanno provando a farsi conoscere con Python. Ma sono dei pezzenti: NOI siamo il Python, e loro non devono nemmeno permettersi di aprire bocca. Per cui vai alla sua lezione, E SEPPELLISCILO VIVO".

Olyundo si frega le mani, fa una risata cupa e tenebrosa, di quelle che farebbero tremare pure i muri e spaventare i bambini, e rivolto ai suoi cupi compagni gli dice "SONO PRONTO".

NOTA: l'ispirazione di questo testo è una lunga critica al mio tutorial Python. Per non rendere troppo noiose le argomentazioni di Olyundo, ho ABBREVIATO un po' le sue argomentazioni (e le mie) e cambiato dalla terza alla seconda persona qua e là. L'originale delle argomentazioni di Lawrence Oluyede qui.

Mi sono permesso di farlo esclusivamente per rendere divertente e scorrevole il testo.

A Lezione

La scena si sposta in aula. Il prof Sciabarrozzi inizia la lezione, Olyundo è in prima fila, a destra c'è Simionis e in fondo sorveglia il tutto Valanga.

Sciabarrozzi entra, vede in terza fila suo amico De Gerardis, ed è contento di vederlo. Poi vede Olyundo in prima fila (sa chi è) e si comincia a preoccupare. Poi intravede in fondo Valanga, e si spaventa. Infine scorge Simionis, e allora comincia decisamente ad aver paura. Capisce di essere in trappola, e comincia a pensare di inventare una scusa per fuggire.

Ma Simionis lo precede, prende la parola e dice: "il nostro GRAAAAAANDE Sciabarrozzi è pronto per la sua lezione, un bell'applauso al nostro docente". Sciabarrozzi vorrebbe dire "ma veramente io pensavo di tenere una lezione a poche persone, esperti programmatori, quella della mia età... cosa è questa valanga di studenti che sono venuti qui... io non volevo questo, di solito faccio queste cose lezioni ad esperti...".

Quello che Sciabarrozzi non sa è che Valanga ha sostituito l'indicazione di "corso specialistico" con "corso per primo anno", e ha fatto venire anche tutti i suoi amici dicendo che ci sarebbe stato uno show degno di Stanlio e Ollio. E ha anche fatto arrivare un camion di uova marce e verdura putrida che attende solo un fischio perchè gli inservienti lo portino in aula.

S è Sciabarrozzi, O è Olyundo. In aula ci sono anche DeGerardis (G), Valanga (V) e Simionis (S).

S: Benvenuti al corso Python. Python è un linguaggio di scripting Open Source. Python è un linguaggio interattivo e interpretato. Viene usato per programmi solitamente più complessi di quelli sviluppati in Perl, e maggiormente per applicazioni di tipo GUI (a differenza di PHP).

O: Presentare Python ad un newbie come un mero linguaggio di scripting credo sia sbagliato perché è quasi un effetto collaterale. Inoltre l’autore usa il termine interattivo impropriamente. Le ultime due asserzioni sul fatto che venga usato per programmi più complessi della controparte Perl e che sia maggiormente impiegato in programmi GUI only sono rispettivamente sommaria la prima e sbagliata la seconda (fatico a comprendere il senso di "applicazioni di tipo GUI (a differenza di PHP)".

S: Python è un linguaggio cosiddetto di tipo imperativo, il che significa che l’esecuzione è composta di una serie di comandi,

O: Comandi uguale a istruzioni? E` brutto usare istruzioni?

S: Questo concetto di struttura dati distingue i linguaggi di programmazione in maniera più forte della sintassi. Mentre a volte si caratterizza un linguaggio per le peculiarità della sintassi, di fatto, ciò che fa veramente la differenza sono le strutture dati manipolate dalle espressione del linguaggio.

O: Quindi tutta la teoria sui paradigmi di programmazione che viene propinata negli istituti tecnici e nelle università è fuffa? I linguaggi di programmazione non sono più classificati per paradigmi ma per il tipo di strutture dati che hanno? Ok quindi… LISP = List Processing, ma anche Python ha le liste quindi Python e` come il Lisp, ma anche C++ ha le liste quindi son tutti uguali i linguaggi! Che stupidi gli scienziati che si son sbattuti a formalizzare i linguaggi di programmazione. Mi domando cosa servono i corsi di teoria dei linguaggi

S: Per esempio i linguaggi Java e C++ sono abbastanza simile al punto di vista sintattico, ma basta osservare le struttura dati per rendersi conto che si tratta di linguaggi diversissimi.

O: Pensavo che le differenze di C++ da Java stessero nell’uso esplicito dei puntatori (che guarda caso non sono una struttura dati), nel determinismo della distruzione delle risorse, nella diversa implementazione dell’object orientation e tante altre cose. Le strutture dati son sempre le stesse (come chiunque fa un corso di Algoritmi sa), è diversa l’implementazione in base agli strumenti messi a disposizione.

S: Per fortuna Python ha una modalità interattiva che permette di provare direttamente le espressioni che via via scriveremo.

O: Quindi Python non è interattivo ma è l’interprete ad avere una modalità interattiva, ora ho scoperto l’arcano.

S: In ambiente UNIX è sufficiente scrivere uno script e poi utilizzare la classica sintassi #!/usr/bin/python. Ponendolo all’inizio di un file che contiene un programma in Python, e impostando il bit x, il file che lo contiene diventa eseguibile.

(La faccia di Olyundo fa "EEEEEEEEEEEEEHHHHHHHH???")

O: Spero che il newbie in Python non sia anche un newbie “UNIX” altrimenti qui si che si incasina. Devo mettere una sintassi all’inizio di un file, impostare il bit x e il file diventa eseguibile

S: Niente di strano: abbiamo però scoperto che python usa una sintassi aritmetica tradizionale cosiddetta “infissa”. Con un altro linguaggio di programmazione avremmo potuto avere 2 2 + (forth, postfissa) oppure (+ 2 2) (lisp, prefissa).

O: Mi domando cosa interessi al nostro amico newbie il fatto che Python usa una notazione infissa (che qualsiasi persona si aspetta di trovare nel nostro caso) ma proseguiamo…

S: Una cosa importantissima e caratteristica di Python: le variabili non hanno tipo. Sono come scatole nelle quali si può mettere qualunque cosa: un numero come una stringa come una lista, come pure un oggetto come vedremo più avanti.

O: Le variabili hanno tipo eccome, altrimenti non esisterebbero. Non esistono variabili non tipizzate in Python. Le variabili non sono come scatole, al massimo sono etichette. Una variabile ha sempre un tipo, senza contare il fatto che Python è strongly typed a runtime cosa che l’autore omette, quindi fa pensare che le variabili Python siano come i Variant in VB6 (cit. “The Variant data type is the data type for all variables that are not explicitly declared as some other type (using statements such as Dim, Private, Public, or Static). The Variant data type has no type-declaration character.”). La verità è che le variabili in Python hanno tipo (sono oggetti) ma facciamo finta di niente. Solo per questa frase un newbie avrebbe intesa un sacco di convinzioni errate. Inoltre l’autore dice che ci si possono infilare dentro numeri, stringhe, liste e oggetti implicitamente asserendo che nessuno di questi sia un oggetto, cosa palesemente falsa (anche in Python 2.2 :-) . Consiglio di leggere questo: http://docs.python.org/ref/objects.html

S: Quello che posso fare è estrarne la parte immaginaria (z.imag), la parte reale (z.real) oppure calcolarne la lunghezza (abs()), cose che invece si possono fare.

O: Lunghezza = valore assoluto? Vabbè...

S: Ovvero è possibile estrarre per esempio il quarto carattere in essa contenuto, semplicemente con la sintassi: s[4]. Notare che questo non cambia la immutabilità delle stringhe. Accedere ad un carattere non significa poter modificare.

O: s[4] ritorna il quinto e non il quarto. L’autore si sarà preso la briga di rileggere? L’articolo è pieno di errori concettuali e di errori linguistici. Cosa che non fanno altro che confondere i new-comers che in teoria sono le menti da plasmare nel modo migliore.

S: Quindi se abbiamo s="ciao", primo carattere, c, è s[0] (il primo indice è sempre 0). Invece l’ultimo carattere e ottenuto con @@s[-1].

O: Qui si corregge, per fortuna, ma non mi risulta che @@s[-1] sia una sintassi valida. Speriamo sia un doppio errore di battitura perché altrimenti non saprei spiegarmi quale versione di Python stia usando.

S: Si tratta semplicemente della sintassi s2:3 (No InterWiki reference defined in properties for Wiki called '2'!). In questo modo otteniamo una sotto sequenza che contiene tutti i caratteri dal secondo incluso al terzo escluso.

O: Riscriviamo per i newbie in ascolto: lo slicing nelle sequenze ritorna gli elementi da quello di indice specificato prima dei due punti (incluso) a quello specificato dopo i due punti. Quindi tradotto nel linguaggio dell’autore si ottiene una sotto-sequenza che contiene i caratteri dal terzo incluso al quarto escluso. Quindi il terzo e basta. Cioè s[2], quindi lo slicing è inutile per quell’esempio (fortuna che i newbie devono capire dagli esempi).

S: Della sintassi per una slice, è possibile omettere l’inizio o alla fine. In questo caso il valore non espresso coincide con i l’inizio o la fine della sequenza.

O: In quanto ex-newbie non ho capito una mazza.

S: In altri linguaggi come il pascal o il Java, le liste non sono tipi primitivi. In Python si. E come tali che possono esprimere con delle costanti.

O: Cioè? Non ho capito. Supponiamo che la frase sia “E come tali si possono esprimere con delle costanti”. Quindi il fatto che un tipo sia primitivo in un linguaggio significa che sia esprimibile attraverso una costante? Ripeto: cioè??? Allora inizio a pensare che le liste siano costanti, che me ne faccio? Sono immutabili come le stringhe? Ma no… allora alla fine di sto ragionamento continuo a non capirci una mazza. Senza contare che in tutto l’articolo l’autore usa la parola sintassi interscambiabilmente con istruzione (!!)

S: Fare attenzione al fatto che gli indici di una sequenza iniziano da zero, e quindi per estrarre secondo elemento occorre utilizzare l’indice 1.

O: Quindi lo sa che sono 0-based le sequenze in Python, ma come?? Prima diceva che s2:3 (No InterWiki reference defined in properties for Wiki called '2'!) era l’estrazione del secondo?? Quale sarà la verità per il nostro newbie?? Forse è il caso che pianti sto tutorial qui e vada a leggere qualcosa di meno contorto. Pero` siccome mi sto divertendo continuiamo

S: Allo stesso modo possiamo tenere lunghezza della lista utilizzandola funzione len().

O: Per fortuna era un tutorial per persone di lingua italiana.

S: In buona sostanza si tratta di una tabella

O: Si tratta di una implementazione efficiente di una hash table, che non è la stessa cosa di una tabella (a me viene in mente excel e il concetto di tabella nella teoria relazionale)

S: Per eliminare un elemento da un dizionario esiste invece un’operazione specifica: del. Per la precisione si seleziona un elemento da eliminare, lo si pone come argomento di del

O: del è uno statement, non una operazione. Il resto della frase è pressoché incomprensibile. Porre qualcosa come argomento? Quindi del è una funzione? Qui - http://docs.python.org/ref/del.html - non dice cosi. Giuro che faccio fatica a leggere questa pagina del tutorial, è piena di frasi incomprensibili.

S: Ci sono delle istruzioni di controllo per modulare il flusso dell’esecuzione.

O: Non ho mica capito che cosa vuol dire “modulare”. Vediamo che dice il vocabolario… Il Garzanti nella sua ignoranza asserisce che il verbo transitivo “modulare” ha questa definizione: costruire, organizzare secondo uno schema flessibile, suscettibile di modificazioni: modulare un progetto, un programma. Vuoi vedere che l’autore intendeva dire “modificare” ? Buona fortuna newbie, pregherò per te.

S: In principio c’era il GOTO, il comando di controllo del flusso esplicito, che tendeva a trasformare i programmi in un ammasso di spaghetti. Da molto tempo è stato abolito nella programmazione, sostituito dalla programmazione strutturata. Questo significa che i programmi vengono strutturati a blocchi. Ovvero, se ho una istruzione che effettua un calcolo, e voglio seguire questo calcolo 10 volte, inserisco il blocco di istruzioni che effettuano il calcolo in un blocco controllato da una istruzione esterna che controlla il blocco.

O: WHAT THE HELL THE AUTHOR IS TRYING TO SAY!? Non ho parole.

S: Notare che dopo il while e l’if (che sono comandi strutturati, come vedremo in dettaglio più avanti) c’è una condizione.

O: Forse perché sono istruzioni condizionali? Ah no sono “comandi strutturati che dopo hanno una condizione”. Sono newbie in Python, non deficienti, caro autore. Proseguendo vedo questo:

Sciabarrozzi scrive alla lavagna:

i :=1 ; while i< =10 do begin if(mod(i,2)=1) then writeln(i) end; i:= i+1; end

S: So benissimo che la maggior parte di voi che conoscono programmazione avranno visto inorriditi come non ho assolutamente rispettato le usuali regole di annidamento; regole che servono a rendere un programma leggibile; infatti l'ho fatto apposta

S: Ma io per esempio trovo quasi impossibile scrivere programmi Python usando vi.

O: Preciso che io uso emacs e non vi, pero` non ho mai sentito Guido Van Rossum fare questo tipo di sparate, eppure lui è uno che di Python ne capisce “poco”. Ok ok son gusti personali.

O: Consiglio ai lettori di leggere la PEP 008 e non dare ascolto a tutta la fuffa scritta in sta sezione. Comincio a convincermi che lo sforzo di imparare almeno l’inglese tecnico ne valga la candela se questa è la qualità del materiale che c’è in giro. Andiamo avanti per inerzia:

S: C’è una eccezione alla regola dell’annidamento: quando viene aperta una parentesi (tipicamente quando si scrivono strutture dati come liste o tuple nel corpo del codice), l’annidamento viene disattivato fino a che non viene chiusa la parentesi.

O: Cioè?! Io sono un newbie ok, ma conosco la lingua italiana. Dunque, cosa diavolo vuol dire quella frase? L’annidamento viene disattivato fino alla parentesi seguente? Boh, mica capito cosa cerca di dirmi l’autore (magari è pure giusto :P )

S: Per ogni struttura dati, esiste un valore che viene considerato falso altrimenti l’espressione viene considerata vera. In particolare il valore numerico 0 viene considerato falso, mentre un valore non zero viene considerato vero.

O: Da quando in qua i numeri sono una struttura dati?

S: Il comando while serve a interare un blocco di codice finché non è vera la condizione di controllo

O: Interare? Nemmeno il mio informatichese geek più spinto è riuscito a farmi capire il significato di interare.

Contatto: michele at sciabarra dot com