Newsgroup: it.comp.lang.perl
Titolo: Passeggiando sulla learning curve e guardandosi indietro.

Questo post solo per trasmettere da profano ai profani qualche
riflessione e informazione. Forse qualche briciolo della mia
esperienza potra' tornare utile anche a qualcun altro.
Do il seguente preambolo unicamente per dare indicazioni sul contesto
all' interno del quale ho cominciato a maturare la mia esperienza con
il Perl. Ho iniziato per puro hobby - meglio, interesse culturale - a
studiarmi Java e il Perl dopo una esperienza professionale di
programmazione che e' passata attraverso il Fortran, l' Apl, il Basic
per approdare infine al C (un amore mai dimenticato), linguaggio in
cui ho scritto parecchie decine di migliaia di righe di codice per
applicazioni embedded, computer graphics, visulaizzazione, image
processing e calcolo numerico sia su PC che su workstation Unix. 
La mia partenza esitante con il Perl e' stato proprio il Larry Wall,
"Programming Perl". Questo testo, indubbiamente ottimo, mi ha creato
inizialmente difficolta' che io stesso non capivo. Forse qualcuno si
ricordera' dei miei timidi questi a cui ha risposto con garbo e
competenza (colgo l' occasione per salutarlo con simpatia) Alex
"Kazuma" Garbagnati
In sostanza il mio problema poteva essere in qualche modo descritto
con il paradosso della pronuncia inglese. Ovvero, l' aver appreso
alcuni elementi di sintassi e il fatto di averli applicati
correttamente in alcune modestissime applicazioni spesso non
costituiva un aiuto sufficiente per progredire nella conoscenza del
perl. Avevo sempre la sensazione che qualcosa mi sfuggisse, e in
particolare non mi sembravano documentati con sufficiente accuratezza
alcuni aspetti del linguaggio (per esempio l' uso di variabili
implicite come $_). Questo problema era particolarmente sentito
provenendo dal C, in cui le poche pagine del K&R sono complete e
sufficienti per costruire interi mondi.
Proseguendo nel mio tentativo di capire cosa non capivo, ho acquistato
il "Perl's programmer companion", del Chapman, che non mi ha
minimamente aiutato e che e' stato una delusione: una metodologia
espositiva simile a quella del  Wall ma piu' povera che non produce in
sostanza niente di nuovo  e mi ha lasciato stupido esattamente com'
ero prima, salvo forse per qualche aiuto nel capire come funzionano
pack e unpack.
Il salto di qualita' clamoroso e' stato proprio "Effective Perl
Programming"  di Hall e Schwarz che raccomando caldamente a quei
(pochissimi) che forse ne sanno meno di me e anelano a saperne di
piu'. Il titolo potrebbe benissimo omettere il termine "effective" e
lasciare "Perl programming". 
La natura della illuminazione avuta ha a che fare con il termine
"idiomatico". In sostanza quest' ultimo libro mi ha fatto cogliere una
insospettata (e apparentemente insostenibile) somiglianza tra il Perl
e l' Apl nonostante il fatto che la sintassi del perl sia di tipo
C-like. Ovvero, l' apprendimento del Perl, a quello che sinora ho
capito (e non ho la pretesa di sputare sentenze sull' argomento, certo
non ne ho il titolo) e' basato fondamentalmente sull' uso *idiomatico*
di costrutti basati su una sintassi la cui estrema liberta' puo'
inizialmente costituire un problema. Analogamente, in Apl (che
presenta la stessa caratteristica del Perl di consentire molti modi di
costruire diverse soluzioni a uno stesso problema) ci sono elementi
sintattici che lasciano perplessi fino a quando non vengono utilizzati
in modo combinato in costrutti che rappresentano una specie di
metalinguaggio che costituisce cosa a se rispetto alla sintassi
propriamente detta. L' esistenza di questo metalinguaggio e' forse la
difficolta' centrale del Perl (e dell' Apl).
Una ulteriore analogia con l 'Apl puo' essere vista nell' uso delle
espressioni regolari. Forse qualcuno ricordera' il mitico articolo di
Iverson "Notation as tool of tought", che fu il punto all' origine
dell' Apl. Bene, trovo che alcune cose scritte in quell' articolo
siano ancora valide per il Perl. Anche il perl consente la formazione
di un modo di pensare in termini di particolari paradigmi e cio' si
rivela un valore aggiunto rispetto alla specifica utilita' del
linguaggio. Il supporto per le espressioni regolari nel Perl consente
il recupero completo di metodi e concetti assai importanti della
matematica discreta e della teoria degli automi che sono al cuore di
un uso consapevole dei linguaggi di programmazione.
Ha contribuito ulteriormente alla mia comprensione e ho trovato assai
utile l' articolo: "Scripting: Higher Level Programming for the 21st
Century" di John K. Ousterhout, autore del linguaggio Python,
pubblicato su IEEE Computer magazine, Marzo 1998 e disponibile su:
 
http://www.scriptics.com/people/john.ousterhout/scripting.html
 
L' ultimo passo (meglio dire: investimento) e' stato l' acquisto del
perl resource Kit della O' Reilly, acquisto che ha sancito il fatto
che il mio interesse per il perl e' diventato cosa seria. Il PRK non
mi ha provocato illuminazioni come lo Hall-Schwarz, ma e' uno
strumento di lavoro veramente efficace per impadronirsi di aspetti non
linguistici e per documentarsi sui "software-IC" che rendono il perl
un caso a se nel filone del riuso del software.
Concludo questo post asserendo che il Perl conta un nuovo, convinto
seguace. Tenendo comunque presente le indicazioni nell' articolo che
ho menzionato, la facilita' con cui il Perl consente di risolvere i
problemi e' semplicemente terrificante e la sua disponibilita'
multipiattaforma, la sua politica di licenze, l' assenza di vincoli
"vendor" consente, oltre ad applicazioni professionali su certa scala,
anche applicazioni personali "fai-da-te" che aiutano ad accrescere
notevolmente la propria produttivita' e ad impostare efficacemente
soluzioni per proprie specifiche e personali esigenze.
Sperando di non avervi tediato.
Ciao
Daniele

 wrote:
: John K. Ousterhout, autore del linguaggio Python,
Ehr, Tcl.
: Il PRK non
: mi ha provocato illuminazioni come lo Hall-Schwarz, ma e' uno
: strumento di lavoro veramente efficace per impadronirsi di aspetti non
: linguistici e per documentarsi sui "software-IC" che rendono il perl
: un caso a se nel filone del riuso del software.
Prova anche il "Perl Cookbook" (O'Reilly) e se ti interessi di algoritmi
in generale "Mastering algorithms with Perl" (sempre O'Reilly).
-- 
Nando Santagata: Telemastica & infornatica
Key fingerprint = C2 D9 C0 8E D5 B7 04 97  AF E8 3F 3E AF 4E 7F 9E
finger nandos (at) mail (dot) ipers (dot) net   for my PGP public key
Home: 
http://www.ipers.net/~nandos

  
http://www.scriptics.com/people/john.ousterhout/scripting.html
 
Un dettaglio: Ousterhout e` l'inventore del linguaggio _TCL_ ("Tool
Control Language"), un linguaggio di scripting assai diffuso (specie
per la facilita` di interfacciarlo a codice C) ma intrinsecamente piu`
povero di Perl.
Il linguaggio Python (piu` "pulito" e regolare, sia di TCL, sia di Perl,
con potenza sostanzialmente identica a Perl, e facilita` d'interfacciamento
sostanzialmente identica a TCL) e` invece dovuto a Guido van Rossum.
Un piccolo tot di materiale in Italiano relativo al Python si trova sul mio
sito 
http://aleax.supereva.it/Python/
, e parecchio di piu` al sito ufficiale 
di Python in italiano, 
http://web.tiscalinet.it/python/
.
Alex

 in generale "Mastering algorithms with Perl" (sempre O'Reilly).
Francamente, "Mastering Algoritms with Perl" l'ho trovato un po' troppo
tirato via: non ti spiegano gli algoritmi, ti danno solo la soluzione in
Perl. Per quanto sia utile, ti costringe a leggere ATTENTAMENTE il codice
Perl per capire cosa stanno facendo, e questo puo' non essere immediato.
Avrei preferito se ci fossero stati sia gli algoritmi sia il codice Perl,
piuttosto che solo il codice.
La prima parte, comunque, su strutture dati e complessita' elaborativa,
e' abbastanza buona. 
I problemi li ho trovati dopo (a partire dagli algoritmi sui grafi in poi). 
E chiariamo: di quella roba io quanto meno un'idea su cosa debba fare e di 
come funzioni ce l'ho e per questo ho trovato le loro spiegazioni troppo 
lacunose.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)