Veri Programmatori


Tanto tempo fa, ai cari vecchi tempi che costituirono "L'era d'oro" dei computers, era facile distinguere gli uomini dai ragazzi (talvolta detti anche in letteratura "Veri Uomini" e "Mangiatori di Ciocorì'" rispettivamente).
A quei tempi i Veri Uomini erano quelli che comprendevano la programmazione ed i Mangiatori di Ciocorì erano quelli che non ne erano capaci.
Un Vero Programmatore diceva cose come DO 10 I = 1,10 e ABEND (incidentalmente si osservi come essi si esprimessero in lettere maiuscole,voi mi capite!) ed il resto del mondo diceva cose come "i computers sono troppo complicati per me!" oppure "non riesco a legare con i computers, sono così impersonali!". Ma, come sempre avviene, i tempi cambiano. 
Viviamo oggi in un mondo in cui care, vecchie signore utilizzano un computer per regolare il loro forno a microonde, giovani dodicenni battono i Veri Uomini, con aria di sufficienza, giocando con Asteroids o con Pac Man e chiunque può comprare ed usare il suo Vic 20. Il Vero Programmatore rischia di scomparire e di essere sostituito da studenti di scuola media superiore con il loro Apple II. è dunque necessario puntualizzare le differenze tra il tipico studente medio ed il Vero Programmatore. Chiarire tale differenza servirà a dare ai giovani un modello con cui confrontarsi, un "padre" da imitare. Servirà anche ai datori di lavoro, per far loro comprendere quale madornale errore essi commetterebbero rimpiazzando, nel loro staff, dei Veri Programmatori con giocatori dodicenni di Pac Man, magari anche assoldati a basso salario.

Il Vero Programmatore ed i linguaggi di programmazione.

Elemento distintivo di un Vero Programmatore è il linguaggio di programmazione usato.
Un Vero Programmatore usa il Fortran, mentre un Mangiatore di Ciocorì usa il Pascal.
A Niklaus Wirth, l'ideatore del Pascal, fu richiesta, nel corso di una conferenza, l'esatta pronuncia del suo nome. 
Egli replicò dicendo : "Mi potete chiamare per nome e direte Veert o per valore ed allora direte 'Maestro". Da questa battuta si capisce immediatamente che Wirth è un Mangiatore di Ciocorì. 
Il solo meccanismo di parametri riconosciuto da un Vero Programmatore è quello di chiamata-per-valore, così come implementato nei compilatori Fortran G ed H dell'IBM/370. 
Il Vero Programmatore non ha bisogno di concetti astratti per svolgere il suo lavoro: egli è perfettamente felice con una perforatrice di schede, un compilatore Fortran IV ed un caffè.
- Il Vero Programmatore fa list processing in Fortran. 
- Il Vero Programmatore fa string manipulation in Fortran. 
- Il Vero Programmatore fa procedure di stipendi (se accetta in assoluto di farne) in Fortran. 
- Il Vero Programmatore fa programmi di Intelligenza Artificiale in Fortran. Se non può farli in Fortran, li fa in Assembler. Se qualcosa non si può fare in Assembler, vuol dire che non conviene farlo in assoluto. 

Il Vero Programmatore e la programmazione strutturata. 

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. 

Il Vero Programmatore e i sistemi operativi. 

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. 

Il Vero Programmatore e gli strumenti di programmazione.

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. 

 Il Vero Programmatore al lavoro. 

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. 

 Il Vero Programmatore quando gioca.

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". 

L'habitat naturale del Vero Programmatore.

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è

Il futuro del Vero Programmatore

Ed il futuro? Con scarso interesse un Vero Programmatore osserva che le ultime generazioni di programmatori non hanno più le capacità di quelle di un tempo. Molte delle giovani leve non hanno visto mai un computerr con pannello frontale; difficilmente un programmatore uscito recentemente dalla scuola sa far calcoli esadecimali senza il relativo calcolatore. I diplomati di oggi non hanno spina dorsale, protetti come sono da modalità di programmazione che prevedono l'uso di debugger simbolici, text editors che contano le parentesi e sistemi operativi user-friendly.
Il peggio è poi costituito dalla genia di docenti, che distribuiscono diplomi senza neanche insegnare il Fortran.
La scuola è dunque destinata a sfornare scribacchini Unix e programmatori Pascal?
Dal punto di vista di un Vero Programmatore, il futuro si preannuncia comunque radioso: OS/370 e Fortran non mostrano alcun segno di declino, a dispetto dei programmatori Pascal di tutto il mondo.
Anche i più subdoli tentativi di imbastardire il Fortran, come l'aggiunta ad esso dei costrutti della programmazione strutturata, sono miseramente falliti. Certo! alcuni computers son venuti fuori con compilatori Fortran 77, ma ciascuno di questi prevede, con un comando opzionale, modalità di conversione a Fortran 66, sì da consentire di compilare i DO loops come si conviene.
Anche Unix si dimostra ora più congeniale, ad un Vero Programmatore, di quanto lo fosse in passato: l'ultima versione di Unix, infatti, ha tutte le caratteristiche per essere un sistema operativo consono con le capacità di un Vero Programmatore: due interfacce differenti e subdolamente incompatibili, un arcano e complicato driver della teletype, una memoria virtuale.
Se si trascura il fatto che sia strutturato, anche il C può essere apprezzato da un Vero Programmatore: dopo tutto non c'è controllo dei tipi, i nomi delle variabili sono lunghi 6 caratteri (o 10?, o 8?) e gli impieghi delle variabili pointer sono eccitanti (è come avere ad un tempo il meglio del Fortran e dell'Assembler), senza menzionare alcuni degli usi creativi offerti dalla define. No, il futuro non è così nero. Anche perché, negli anni scorsi, il meglio degli scribacchini e dei Mangiatori di Ciocorì hanno abbandonato impieghi prestigiosi e centri di ricerca e si sono calati nella realtà. In tutti questi giovani, uomini e donne, alberga, tutto sommato, lo spirito della Vera Programmazione. Finché ci saranno obiettivi mal definiti, errori bizzarri e schedulazioni non realistiche, ci sarà sempre un Vero Programmatore che verrà su e risolverà il Problema, riservandosi di scrivere la documentazione successivamente. Lunga vita al Fortran!