Hollerith card.jpg
"Hollerith card". Con licenza Pubblico dominio tramite Wikimedia Commons.

La programmazione al tempo dei dinosauri

Ho cominciato a programmare nel 1968. Usavo gia' un linguaggio ad alto livello (il Fortran) ma i programmi si scrivevano su schede di carta IBM e lo stesso compilatore veniva caricato da un pacco di schede.Il primo computer sul quale ho lavorato era l'IBM 1620 con CPU fatta di transistor (i chip non c'erano ancora) e memoria fatta di nuclei di ferrite.Era una grossa cassa piena di transistor che si riscaldava troppo e spesso andava in tilt:si accendeva una luce rossa e bisognava spegnere tutto e aspettare che si raffreddasse.

L'occasione di questo primo incontro con i calcolatori e' stata la frequenza del corso sui Calcolatori tenuto a Fisica (la laurea di Informatica ancora non esisteva) dall'ingegnere Anelli.Ricordo benissimo la prima lezione quando,dopo una breve introduzione, prese un pacco di schede con un programma e ci porto' nella stanza dove c'era il computer.

Qualche anno dopo ho fatto la tesi su "Un sistema interattivo realizzato su display grafico per l'analisi di dati in esperimenti di alta statistica" lavorando su un display grafico IBM 2250 che aveva bisogno di un computer dedicato IBM 1320 per funzionare.Questo era a sua volta collegato a un computer centrale IBM 360. Il mio relatore era il compianto Alberto Silvestri.

L'IBM 360 , a differenza del 1620, non potevamo usarlo personalmente. Era in una grande sala ed era formato da diversi armadi e casse su cui apparivano lucine lampeggianti e bobine di nastro magnetico in rapida rotazione. Proprio come si puo' vedere in qualche film d'epoca. Era una macchina che costava moltissimo e a cui avevano accesso solo gli operatori e gli ingegneri. I programmatori come me preparavano un pacco di schede e lo consegnavano all'operatore di turno allo sportello. Dopo un po' si tornava e si ritirava il pacco assieme a uno stampato coi risultati dell'esecuzione del programma.

Probabilmente adesso si direbbe che ero un hacker dell'IBM 360(o meglio un geek:non vorrei offendere i veri hackers!) e poi del 370.Riuscivo a capire dai dump della memoria alcune delle sottigliezze del sistema operativo e del compilatore.

Ho insegnato la programmazione in un linguaggio chiamato PL/1 quando Knuth stava ancora scrivendo la sua bibbia: The Art of Computer Programming.

Con un programma chiamato Wylbur finalmente sono passato dalle schede di carta all'uso di un terminale online.

La mia prima rete e' stata Decnet(una rete proprietaria della Digital): Internet doveva aspettare altri 10 anni per arrivare in Europa. Il mio primo incontro con Internet e' stato attraverso un account su un computer sperimentale (mi pare si chiamasse priam.cern.ch) che il Cern di Ginevra aveva messo su per provare la nuova tecnologia. Ci si potevano leggere i famosi newsgroups alcuni dei quali anche con immagini! Facendo una ricerca sui newsgroups di Internet trovate il mio primo posting del 1991 ovviamente il famoso "test" a misc.test.

Non e' che da allora la programmazione sia cambiata molto: infatti non facciamo che riscrivere il mitico Ciao a Tutti in sempre nuovi linguaggi. Questa mia risposta a un corrispondente che voleva cominciare a programmare in Java, riassume l'essenza della programmazione:

Il mio corrispondente:
> oh giuseppe,
> saro�scemo ma non c' ho capito niente
> dove lo scrivo sto ciao a tutti?sull blocco note?
> e poi cosa viene fuori?    
La mia risposta:
Leo,
non ti preoccupare se non hai capito niente. Java e' un linguaggio di
programmazione e i linguaggi di programmazione (a differenza dell'HTML)
non servono per parlare con le persone ma per parlare col computer, per
dirgli cosa fare. Solo che i computer quelli sono davvero scemi e per
fare una cosa cosi' semplice come scrivere "Ciao a tutti" ti devi:
- Scaricare dalla rete un malloppazzo chiamato jdk (20M!) e installarlo
sul tuo computer.
- Scrivere con Notepad o Wordpad questa specie di abracadabra
 class CiaoATutti{
      public static void main (String args[]){
            System.out.println("Ciao a tutti");
     }
  }
- Salvarlo in un file di testo chiamato "CiaoATutti.java"
-Dare il comando da finestra MS-DOS "javac CiaoATutti.java"
- Dare il comando sempre dalla stessa finestra "java CiaoATutti"      
Finalmente il computer a questo punto ti dovrebbe rispondere
(ammesso che sei riuscito a fare tutto in maniera perfetta)
"Ciao A Tutti".
 
Capisco la tua delusione ma la programmazione e' cosi'!
    Ciao,
       Giuseppe                                            
A parte gli scherzi, condivido la visione degli hacker.E sono orgoglioso di essere un programmatore(ho fatto scrivere questa come professione sulla carta d'identita'). Essere un programmatore adesso e' un po' come essere pittore al tempo di Leonardo. Cioe' essere un artigiano in un campo completamente nuovo e in fase di rapidissima evoluzione.Scrivere "Ciao a Tutti" in tanti linguaggi non mi ha certo reso uguale a Leonardo ma mi ha dato la possibilita' di osservare altri straordinari artigiani all'opera: come Tim Berners Lee ,l'inventore del Web, di cui ho potuto seguire i primi seminari sul Web al Cern, quando il Web era solo un luccichio nei suoi occhi.
In questi 30 anni i concetti base non sono cambiati.Nonostante la grande propaganda intorno alle nuove tecniche spesso queste non aggiungono niente di nuovo e anzi dopo un po' improvvisamente spariscono con la stessa velocita' con cui sono apparse.Chi si ricorda piu' del PL/1 o di Ada?In futuro forse Java e .NET seguiranno la stessa strada.Per questo,quando arriva qualcosa di nuovo, aspetto che si posi il polverone.Ad esempio adesso ci sono XP(extreme programming) e i Design Patterns.

Cosa fa un programmatore

Ha 100 idee al giorno su nuovi interessanti problemi da risolvere usando il computer.Purtroppo di queste idee ne puo' realizzare si e no una al mese. E per il resto del tempo e' occupato a debuggare l'unica idea realizzata.
E' una cosa ridicola: se si e' in vena si possono scrivere anche mille righe di codice al giorno. Ma quel codice puo' anche contenere decine e decine di errori e poi richiedere mesi per funzionare.
Il computer e' uno stupido che esegue tutto alla lettera e questo crea un sacco di problemi.

Cosa mi piace di piu' della professione del programmatore:

  1. L'aspetto creativo della stessa.
  2. La capacita' di poter trattare problemi di grande complessita'. Probabilmente e' questo il campo dove un singolo individuo e' ancora in grado di iniziare e padroneggiare ,senza mezzi particolari, dei progetti di grande complessita'. Si pensi a Linus Thorwald con Linux. Anzi,secondo me, nessun grande progetto software puo' avere successo se non ha dietro un singolo individuo che lo padroneggi almeno nelle linee essenziali.
  3. Quando si e' concentrati su un problema si scorda tutto e questo certe volte fa davvero piacere!Questa incapacita' del programmatore di gestire il suo tempo perdendosi per cosi' dire nel problema , ha portato ad alcune raccomandazioni XP (una serie di tecniche di eXtreme Programming) quali:
    1. I programmatori devono lavorare 40 ore la settimana senza fare straordinari.
    2. I programmatori devono dedicare non piu' di 10-15 minuti a ogni singola tecnica. Quest'ultima richiesta caratterizza XP come la tecnica del programmatore 10 minuti.
  4. La sensazione di riuscire in qualche modo a controllare la macchina qualsiasi sia il linguaggio e il sistema operativo, facendogli fare quello che si desidera.
  5. La capacita' di debaggare la soluzione a un problema.
  6. Creare qualcosa di proprio che sara' usato da altri.
  7. L'aspetto "magico" della programmazione. Mi spiego: il calcolatore e' di fatto una macchina universale che puo' emulare qualsiasi altra macchina. Per questo la ritroviamo in un numero crescente di macchine. Ma per costruire queste macchine simulate dal calcolatore non c'e' bisogno di motori e ingranaggi . Il motore delle nuove macchine e' la parola. Le parole contenute nei programmi.Basta trovare le parole giuste, il mitico hack divino, ed e' possibile evocare ,pardon far funzionare , qualsiasi macchina.
  8. Il piacere di "smontare" i programmi scritti da altri per vedere come funzionano.
  9. Il piacere di capire la causa di un errore o di un comportamento inatteso.
  10. (Fino a qualche tempo fa avrei aggiunto a questa lista : il fatto che si guadagna bene. Ma ora non sono piu' sicuro della cosa. Mi spiego:il lavoro del programmatore puo' essere fatto anche lontano dal posto di lavoro se si ha un buon collegamento Internet. Quindi quando anche i Cinesi e gli Indiani avranno un buon collegamento Internet, la concorrenza dei programmatori asiatici sara' fortissima e probabilmente un programmatore italiano non avra' piu le opportunita' che ha adesso.)
  11. La via del programmatore

Imparare a programmare : una vita non basta

Avendo scritto alcuni documenti sul Web come
Imparate Java in un'ora o Imparate C++ in 3 giorni volevo spiegare a chi non e' programmatore che il titolo di questi documenti e' ironico. Sarebbe come promettere di insegnare la meccanica quantistica oppure a costruire un ponte in pochissimo tempo. Assurdo.
Come mai sembra pero' "credibile" ed esistono tanti libri di programmazione con titoli di questo tipo? Perche' nell'insegnare la programmazione e' possibile fornire dei programmi gia' pronti che potete eseguire e farvi un'idea (specialmente se siete gia' un programmatore). Non imparate veramente a farlo , ma riuscite ad avere un'idea di come si fa.
Per intenderci e' come se un'ingegnere vi fornisse dei piccoli prototipi di ponti che potete assemblare e capire piu' o meno qual'e' il problema di costruire un ponte reale. Tutto questo per un programmatore esperto e' di grande utilita', perche' vi permette di acquistare quella familiarita' e quella confidenza che vi guidera' negli innumerevoli giorni, mesi o addirittura anni che vi occorreranno per padroneggiare un nuovo linguaggio di programmazione. E' una cosa difficile da spiegare a un non programmatore che infatti scoprira' subito che in una settimana non solo non ha imparato niente ma non ha capito nemmeno di che cosa si trattava.
La reale difficolta' di imparare a programmare viene descritta molto bene in questo Teach Yourself Programming in Ten Years e c'e' stato qualcuno che ha parlato della Crudelta' di insegnare la programmazione intendendo che si introduce un allievo in una materia cosi' difficile senza prevenirlo sulle reali difficolta'.

Le mie idee su questo argomento sono un po' cambiate recentemente. Ci vogliono sempre 10 anni per diventare un programmatore eccellente ma ora si puo' cominciare anche prima di imparare a leggere e scrivere!

In effetti sta venendo fuori la generazione iPad che usa il computer ancor prima di andare a scuola. E' possibile insegnare a questa generazione la programmazione come un gioco che consiste nel creare immagini o animazioni con metodi completamente visuali e senza uso di linguaggi scritti? Sembrerebbe di si o almeno molti ci stanno provando.

L'idea di base e' di insegnare a programmare usando una sintassi nascosta nelle regole di assemblaggio di oggetti grafici e animazioni . In questo e' di grande aiuto HTML5 e Javascript che lavorando via Web sono la piattaforma ideale. La sintassi scritta viene presentata solo in un secondo momento quando il bambino comincia a essere in grado di trattare il testo scritto. A quel punto dovrebbe essere molto piu' semplice per l'aspirante programmatore capire il significato della sintassi dei programmi scritti.
All'inizio sarebbe una semplice maniera alternativa di rappresentare il programma che viene generata automaticamente in aggiunta a quella visuale. In seguito l'aspirante programmatore si rende conto della facilita' di modificare il programma usando la forma testuale: scrive "rosso" e il colore cambia senza usare un'interfaccia grafica. Copia e incolla e puo' trasferire interi pezzi di programma scritti da altri e cosi' via. Infine si rende conto come lo stesso programma puo' essere adattato a trattare qualsiasi tipo di dati: non solo oggetti grafici. A cominciare dallo stesso testo. Puo' funzionare? Secondo me si. Anzi quell'eta' e' quella ideale per affrontare certi concetti che in seguito diventerebbero sempre piu' ostici da capire e assimilare. Inoltre l'uso della grafica elimina il problema dell'utilizzo di una lingua particolare (quasi sempre l'inglese) nella scrittura dei programmi. Il bambino si rende conto che parole come "while" esprimono concetti universali di programmazione che possono essere espressi in qualsiasi lingua. La regola dei 10 anni e' sempre valida, solo che adesso cominciando a 3 anni, significa che a 13 anni siete gia' programmatore esperto!

Ecco una lista dei linguaggi che conosco e un documento: How to Shoot Yourself In the Foot che spiega in maniera divertente le loro caratteristiche:

  1. Algol
  2. APL
  3. ASP
  4. Assembler 370
  5. awk
  6. Basic
  7. C
  8. C++
  9. Cobol
  10. Decwindows
  11. Excel
  12. Fortran
  13. IBM JCL
  14. Java
  15. Javascript
  16. JSP
  17. Lisp
  18. Logo
  19. Mathematica
  20. Motif e UIL
  21. openVMS DCL
  22. Pascal
  23. Perl
  24. PHP
  25. PL/1
  26. Postscript
  27. Python
  28. SVG (Scalable Vector Graphics)
  29. SOAP
  30. XML
  31. XML-Schema
  32. XSL
  33. Unix shells
  34. vms
  35. WSDL
Calcolatori sui quali ho lavorato:
Page maintained by :info@zitogiuseppe.com
Last modified :