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 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:
- L'aspetto creativo della stessa.
- 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.
- 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:
- I programmatori devono lavorare 40 ore la settimana senza fare straordinari.
- 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.
- 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.
- La capacita' di debaggare la soluzione a un problema.
- Creare qualcosa di proprio che sara' usato da altri.
- 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.
- Il piacere di "smontare" i programmi scritti da altri per vedere come funzionano.
- Il piacere di capire la causa di un errore o di un comportamento inatteso.
- (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.)
- 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'.
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:
- Algol
- APL
- ASP
- Assembler 370
- awk
- Basic
- C
- C++
- Cobol
- Decwindows
- Excel
- Fortran
- IBM JCL
- Java
- Javascript
- JSP
- Lisp
- Logo
- Mathematica
- Motif e UIL
- openVMS DCL
- Pascal
- Perl
- PHP
- PL/1
- Postscript
- Python
- SVG (Scalable Vector Graphics)
- SOAP
- XML
- XML-Schema
- XSL
- Unix shells
- vms
- WSDL
Calcolatori sui quali ho lavorato:
- IBM 1620
- IBM 1130
- IBM 360
- IBM 370
- IBM 9370
- CDC 6600
- CDC 7600
- Digital PDP11 (Digital Equipment Corp. DEC)
- Digital Vax
- Commodore Vic 20
- Commodore C64
- Commodore Amiga
- Apple Mac
- Apollo workstation
- Digital Alpha
- HP/Compaq Alpha with Tru64
- PC with Linux/Windows