Gli accademici di Scienze dell'Informazione hanno, negli anni scorsi, a
lungo dissertato di programmazione strutturata. Essi hanno sostenuto che i
programmi sono più facilmente leggibili e comprensibili, se vengono
adottati speciali costrutti linguistici ed opportune modalità di scrittura
del codice. Naturalmente non tutti gli accademici sono d'accordo su tali
costrutti, e gli esempi, che essi riportano a sostegno delle rispettive
tesi, rimandano invariabilmente ad una particolare pagina di questa o
quell'oscura rivista, dove al più viene descritto un solo caso, quasi mai
convincente.
Quando il Vero Programmatore terminò gli studi, egli riteneva di
essere il miglior programmatore al mondo. Era in grado di scrivere una
imbattibile routine di divisione, usare 5 differenti linguaggi e scrivere
programmi di 1000 statements che funzionavano.
Al primo impiego, egli fu messo a leggere e a capire un programma in
Fortran di 200.000 istruzioni, per renderlo più veloce di un fattore 2.
Qualunque Vero Programmatore sa che non c'è codifica strutturata al mondo
che possa aiutare a risolvere un tale problema. Ci vuole talento!
Alcune rapide considerazioni del Vero Programmatore circa la programmazione strutturata :
- Il Vero Programmatore non ha paura del Go To.
- Il Vero Programmatore è capace di scrivere un DO loop di 5 pagine,
senza confondersi.
- Il Vero Programmatore apprezza l'IF aritmetico, perché esso rende
il codice più interessante.
- Il Vero Programmatore scrive codice automodificantesi, specialmente
se c'è da risparmiare 20 nanosecondi nel bel mezzo di un loop stretto.
- Il Vero Programmatore non ha bisogno di commenti, perchè per lui il
codice è autospiegante.
- Poichè il Fortran non dispone di costrutti, quali l'IF strutturato,
il Repeat...Until o il Case, il Vero Programmatore non deve preoccuparsi di
farne uso; inoltre, all'occorrenza, tali costrutti possono essere
implementati mediante il Go To assegnato.
Fiumi di inchiostro sono stati recentemente versati per trattare le
strutture di dati. Tipi di dati astratti, strutture, puntatori, liste e
stringhe sono divenute popolari in certi circoli. Wirth, il già citato
Mangiatore di Ciocorì, ha addirittura scritto un intero libro per
illustrare le modalità secondo cui scrivere un programma basandosi sulle
strutture di dati. Così come qualunque Vero Programmatore sa, la sola
utile struttura di dati è l'array.
Stringhe, liste, strutture e insiemi
sono tutti casi particolari di array e possono essere trattati senza
ingarbugliare il linguaggio di programmazione con inutili complicazioni.
La peggior cosa di tali stravaganti tipi di dati è che essi vadano
esplicitamente dichiarati, mentre i linguaggi del Veri Programmatori
prevedono la tipizzazione implicita, basata sulla prima lettera del nome
della variabile.
Quale tipo di sistema operativo usa un Vero Programmatore? CP/M? Per carità': il CP/M
è solo un sistema operativo giocattolo. Anche le
vecchie, care signore e gli studenti medi inferiori sono in grado di capire
ed usare il CP/M.
Unix è indubbiamente più complicato (è ben noto lo sforzo richiesto
al tipico scribacchino Unix per ricordare il nome diverso, quotidianamente
riassegnato, dei comandi di Shell), ma quando hai imparato ad usarlo, ti
accorgi che Unix non è altro che un video-game ben dissimulato: gli
scribacchini Unix spediscono facezie al mondo intero attraverso le reti,
scrivono adventure-games e articoli di ricerca.
No! Il Vero Programmatore usa l'OS/370. Un buon programmatore può
trovare e capire la descrizione dell'errore IJK3051 nel suo manuale di Job
Control Language, un grande programmatore può scrivere JCL senza neanche
usare il manuale, ma un Vero Programmatore può individuare errori sparsi
in un dump di 6 megabytes di memoria, senza neanche usare un calcolatore
esadecimale.
L'OS è un vero sistema operativo: è possibile distruggere il lavoro
di giorni e giorni sbagliando solo la posizione di un blank.
La maniera migliore di utilizzare l'OS è mediante una perforatrice di
schede. Qualcuno sostiene che l'OS/370 preveda anche un sistema time-
sharing, ma, dopo attenti studi, il Vero Programmatore è addivenuto alla
conclusione che fosse solo una diceria.
Quali tipi di strumenti di ausilio alla programmazione per un Vero
Programmatore? In teoria un Vero Programmatore potrebbe introdurre i suoi
programmi attraverso il pannello frontale del computer. Al tempo in cui i
computers avevano il pannello frontale, questa era infatti la modalità di
scrittura di norma usata.
Il tipico Vero Programmatore conosceva a memoria tutto il codice
esadecimale del caricatore di bootstrap e lo reinseriva fischettando, ogni
volta che il bootstrap veniva distrutto dall'esecuzione di un suo
programma. A quei tempi anche le memorie erano vere memorie! Il loro
contenuto non si volatilizzava quando la tensione cadeva. Oggi, invece, le
memorie perdono le cose che non dovrebbero perdere e conservano a lungo le
cose che farebbero meglio a perdere subito!
La leggenda vuole che Seymour Cray, il progettista del supercomputer
Cray I e della maggior parte dei computers della Control Data, caricasse
dal pannello frontale il primo sistema operativo del CDC 7600 quando questo
fu acceso per la prima volta. Seymour, inutile dirlo, era un Vero
Programmatore.
Uno dei migliori Veri Programmatori era un sistemista della Texas
Instruments. Un giorno egli ricevette una telefonata da un utente molto
lontano, il cui sistema era caduto, nel bel mezzo del backup di un
importante lavoro. Tale sistemista fu in grado di riparare il guasto per
telefono, guidando l'utente nell'inserimento, dal pannello frontale, di una
routine di I/O da disco, nel mettere a posto, in esadecimale, le tabelle di
sistema e nel controllare il contenuto dei registri.
La morale di una tale storia è che, se è vero che la perforatrice di
schede e la stampante costituiscono i normali strumenti di ausilio alla
programmazione di un Vero Programmatore, è anche vero che questi,
all'occorrenza, sa anche far uso del pannello frontale e del telefono.
In alcune societa', il text editing non consiste più nel fatto che 10
ingegneri facciano la coda per usare una perforatrice 029. Alcune aziende
sono ormai addirittura sprovviste di perforatrici di schede. Il Vero
Programmatore è costretto, in tale frangente, a far uso di un text editor.
Il sistema ospite mette a disposizione diversi text editors alternativi e il
Vero Programmatore fa ben attenzione a sceglierne uno che rifletta il
suo stile personale.
Molti pensano che i migliori text editors siano quelli
scritti al Centro di Ricerca della Xerox per i sistemi Alto e Dorado.
Sfortunatamente nessun Vero Programmatore userà mai un computer, il cui
sistema operativo sia del tipo di SmallTalk, e non farà mai uso di un
mouse per comunicare con il computer.
Alcuni concetti dei text editors della Xerox sono stati assunti in vari
altri editors di diversi altri sistemi. La cosa che ad un Vero
Programmatore non garba assolutamente di tali editors è che essi, come le
donne, basino tutto su un approccio del tipo "tutto ciò che vedi, puoi
ottenerlo". No! Il Vero Programmatore preferisce l'approccio basato sul
"prova a chiederlo e forse l'otterrai"; approccio complicato, criptico,
potente, indimenticabile, pericoloso!
Il Vero Programmatore preferisce un text editor, la cui sequenza di
comandi rassomigli più al disturbo di una linea di trasmissione che ad un
testo leggibile, con il quale si possa provare l'eccitazione di inserire
come comando il proprio nome e vedere cosa avviene, con cui sbagliare a
battere un comando e accorgersi che il programma fino a quel momento
battuto è andato completamente perso o, ancora peggio, che subdoli e
misteriosi errori siano stati disseminati in routines fino a quel momento
corrette.
Il Vero Programmatore è in genere riluttante a editare un programma
quasi funzionante. Egli ritiene più facile e sicuro modificare
direttamente il codice oggetto binario, facendo uso di un meraviglioso
programma chiamato Superzap (o il suo equivalente su macchine non IBM).
Questo programma lavora così bene, che molti programmi funzionanti su
macchine IBM si comportano in una maniera che non ha alcuna relazione con
codice originario Fortran. In molti casi, addirittura, il codice
sorgente non è più disponibile.
Quando arriva il momento di mettere le mani su tale programma, nessun
manager si sognerebbe di ricorrere ad altri, che non sia un Vero
Programmatore. Qualunque programmatore strutturato Mangiatore di Ciocorì
non saprebbe neppure da dove iniziare.
Questa si chiama "segretezza del
lavoro".
Alcuni tipici strumenti di ausilio alla programmazione, che un Vero
Programmatore non userà mai:
- pre-processors Fortran, prodotti dell'arte culinaria, buoni solo per
i Mangiatori di Ciocorì;
- debuggers simbolici del programma sorgente; un Vero Programmatore sa
leggere i dump;
- compilatori che controllino che l'indice di una variabile non ecceda
i limiti dichiarati dell'arrray; essi mortificano la creativita', rendono
impossibile la maggior parte dei più interessanti usi dell'Equivalence e
inibiscono la modifica del codice di sistema operativo mediante l'uso di
indici negativi; tali controlli sono altresì inefficienti.
- sistemi di manutenzione del codice sorgente; un Vero Programmatore
conserva il suo codice in raccoglitori di schede, gelosamente custoditi e
sempre accuratamente guardati a vista.
Come è facile immaginare, molti dei Veri Programmatori lavorano in
aziende pubbliche, in applicazioni prevalentemente destinate alla Difesa.
Recentemente una nuvola minacciosa si è stagliata all'orizzzonte del
Vero Programmatore. Sembra che alcuni altolocati Mangiatori di Ciocorì del
Dipartimento della Difesa americano abbiano deciso che tutti i programmi
debbano essere scritti in un certo mastodontico linguaggio unificato
denominato ADA.
Per un pò si è avuta l'impressione che ADA fosse destinato a divenire
un linguaggio per contravvenire tutti i principi di un Vero Programmatore:
un linguaggio con tipizzazione dei dati, forte strutturazione e i punti e
virgola; in breve, un linguaggio definito per paralizzare la creatività
del tipico Vero Programmatore.
Fortunatamente, il linguaggio adottato dal Dipartimento della Difesa
presenta ora un numero sufficiente di caratteristiche, che lo rendono
invece praticabile per un Vero Programmatore: esso è incredibilmente
complesso, include metodi per fare usi "opportuni" del sistema operativo e
riorganizzare la memoria; inoltre ha il pregio di non piacere a Dijkstra,
l'autore, a tutti noto, di roventi articoli sulla nocività del Go To, vere
pietre miliari nella metodologia della programmazione, applauditi dai
programmatori Pascal e dai Mangiatori di Ciocorì. è comunque opportuno
osservare che un Vero Programmatore può scrivere programmi Fortran in
qualunque linguaggio.
Un Vero Programmatore può, contravvenendo ai suoi gusti preminenti, lavorare anche su temi un
pò più banali di quelli a lui congeniali, a
condizione che si possa guadagnare convenientemente. Vi sono diversi Veri Programmatorri che, per esempio, sviluppano video-games alla Atari, senza
naturalmente giocarci; Un Vero Programmatore sa sempre come battere la macchina; non
v'è ombra di dubbio in merito.
La percentuale di Veri Programmatori che lavorano alla computer graphics
è al di sotto della norma, principalmente perchè ancora nessuno è riuscito a individuare alcun significativo possibile uso della computer graphics. Ad ogni buon conto,
poichè tutta la computer graphics è sviluppata in Fortran, un buon numero di Veri Programmatori si assoggetta a sviluppare procedure di grafica, pur di evitare di scrivere programmi in
Cobol.
Di tanto in tanto il Vero Programmatore fa due passi fuori dell'ufficio, per prendere una boccata di aria fresca e bere un
caffè o
due. Per riconoscerlo fuori del suo ambiente, si osservi che:
- ad un party, il Vero Programmatore sta in un angolo e parla di sicurezza del sistema operativo e di come aggirare gli ostacoli
frappostivi;
- ad una partita di calcio, il Vero Programmatore è lì che confronta il gioco con la sua simulazione su stampante con un foglio 11x14;
- sulla spiaggia, il Vero Programmatore disegna flow-charts sulla sabbia;
- in discoteca, il Vero Programmatore si limita ad osservare il gioco di luci;
- al funerale di un collega, il Vero Programmatore osserva: "Poverino.
La sua routine di sort era quasi funzionante appena prima dell'infarto".
In quale tipo di ambiente lavora meglio il Vero Programmatore? Questo costituisce un quesito cruciale per il capo di un Vero Programmatore. Dato
l'alto salario che un Vero Programmatore percepisce, è fondamentale, infatti, creare per lui le migliori condizioni ambientali di lavoro.
Il tipico Vero Progammatore vive di fronte ad un video. L'ambiente circostante
è costituito da:
- listings di tutti i programmi che il Vero Programmatore ha scritto nella sua vita, ammonticchiati in ordine presso a poco cronologico e sparsi
dovunque su tutte le superfici orizzontali dell'ufficio;
- una mezza dozzina di tazze semivuote di caffè freddo, in cui galleggiano cicche di sigarette;
- un manuale di JCL e uno di "Principles of Operations", aperti ad una qualche pagina interessante;
- appeso alla parete, un calendario di Snoopy del 1969;
Il Vero Programmatore è capace di lavorare 30, 40, o anche 50 ore di seguito, quando
necessità lo imponga. Egli adora lavorare così. I tempi di risposta cattivi del sistema non lo innervosiscono,
anzi gli
consentono di schiacciare un pisolino tra una compilazione e l'altra.
Se non vi sono impellenti tempi di completamento di un progetto, egli tende, nelle prime 9 settimane, a lavoricchiare, occupandosi magari di
qualche aspetto marginale del problema, a suo dire interessante, terminando poi il lavoro solo nell'ultima settimana, con due o tre maratone da 50 ore.
Questa tirata finale non solo impressiona il suo capo, il quale cominciava a disperare di veder concluso in tempo il progetto, ma fornisce
altresì al Vero Programmatore la scusa per non scrivere la documentazione.
In generale:
- nessun Vero Programmatore lavora dalle 9 alle 5 (a meno che non si tratti di ore notturne);
- un Vero Programmatore arriva in ufficio in tempo per il pranzo;
- un Vero Programmatore può ricordare o dimenticare il nome di sua moglie, ma
ricorderà sempre a memoria l'intera tabella di codifica ASCII o EBCDIC;
- un Vero Programmatore non sa
cucinare, vi sono infatti snack aperti fino a tardi ed il Vero Programmatore può d'altronde sopravvivere con un
toast ed un caffè