venerdì 6 dicembre 2013

Il vero programmatore




Tornando indietro ai vecchi e gloriosi giorni dell'informatica primordiale era relativamente facile distinguere tra veri uomini e ragazzini (nella letteratura classica [1] la distinzione è tra "veri uomini" e "mangia-Quiche"). 

Durante quei tempi i Veri Uomini erano gli unici che si intendevano di computer, gli altri (i ragazzini o "mangiatori di Quiche") erano quelli che di computer non se ne intendevano...
I Veri Uomini dicevano cose come "DO 10 I=1,10" o "ABEND" (ovviamente parlando in lettere maiuscole, mi sembra ovvio), mentre il resto della gente diceva semplicemente che i computer erano cose troppo complicate per loro...(sempre il lavoro [1] dice appunto che non esistono cose troppo complicate per il vero uomo...).

Ma, come in tutte le cose, i tempi cambiano, adesso viviamo in tempi in cui anche le vecchiette hanno dei computer dentro i loro forni a microonde, in cui qualunque Vero Uomo può essere battuto da un ragazzino di 12 anni in qualunque videogioco, in cui chiunque può comperare, usare e capire un computer. Il Vero programmatore rischia di intraprendere la via dell'estinzione, sopraffatto da universitari che basano la loro vita su Mouse ed Icone...

E' perciò necessario stabilire una netta distinzione tra Il Vero Programmatore ed un universitario giocatore di Pac-Man... Se questa distinzione sarà chiara questi giovani inesperti potranno avere un modello guida, un padre spirituale a cui ispirarsi. Inoltre sarà possibile spiegare ai datori di lavoro perché non è ne necessario ne giusto sostituire dei Veri Programmatori con dei giocatori di Pac Man, anche se il risparmio sugli stipendi sarebbe considerevole...


LINGUAGGI


Il sistema più rapido e sicuro per distinguere un Vero Programmatore dal resto del mondo è considerare il linguaggio che usa: il Vero Programmatore programmava in FORTRAN, mentre ora programma in C. I mangiatori di Quiche programmano in Pascal. Da questo si deduce che sicuramente Niklaus Wirth era un mangiatore di Quiche e NON un Vero Programmatore.
Ad un Vero Programmatore non servono tutte le strutture ed i meccanismi del pascal, un Vero programmatore può essere felice con un perforatore di schede o un terminale a 1200 baud, un C a standard K&R (ANSI... a che serve, il K&R è fin troppo chiaro...), e una birra...
A proposito, Kerningan e Ritchie sicuramente erano dei Veri Uomini... probabilmente anche dei veri programmatori...

  •  Il Vero Programmatore processa liste in C
  •  Il Vero Programmatore processa numeri in C
  •  Il Vero Programmatore manipola stringhe in C
  •  Il Vero Programmatore elabora programmi di IA in C
  •  Il Vero Programmatore fa contabilità in C
  •  Il Vero Programmatore fa TUTTO in C


Se per caso il C non fosse sufficiente il Vero Programmatore lavorerà in assembler, se neppure questo fosse sufficiente allora il lavoro non è fattibile, ma la cosa è impossibile, un Vero Programmatore in C ed assembler può fare TUTTO, per definizione.



PROGRAMMAZIONE STRUTTURATA


Gli accademici negli ultimi anni hanno stabilito, dall'alto delle loro cattedre, che un programma è più facilmente leggibile se il programmatore utilizza particolari tecniche, strutture e costrutti. Ovviamente essi non sono d'accordo su quali questi costrutti e queste tecniche precisamente siano, e perciò le loro teorie sono discordanti ed erratiche. In questo modo solo alcuni mangia-Quiche si lasciano convincere dai loro assiomi. Un tipico lavoro del mondo reale (e non un lavoro teorico da università) è di prendere un sorgente di 100.000 o 200.000 linee e farlo andare il doppio più veloce. In questo caso qualunque Vero Programmatore vi potrà dire che la programmazione strutturata non serve a nulla, quello che in realtà serve è del talento....

Alcune rapide considerazioni del Vero Programmatore sulla programmazione strutturata:

  • Il Vero Programmatore non ha paura di usare GOTO
  • Il Vero Programmatore può scrivere un ciclo DO lungo 5 pagine senza fare confusione.
  • Il Vero Programmatore usa i costrutti CASE basati su calcoli aritmetici, essi rendono un programma più divertente.
  • Il Vero Programmatore scrive del codice automodificante, soprattutto se questo può salvare 20 nanosecondi all'interno di un ciclo.
  • Il Vero Programmatore non ha bisogno di commenti, il codice è gia autoesplicante a sufficienza.


Dopo aver parlato di programmazione strutturata si è anche parlato molto di strutture di dati. Tipi di dati astratti, stringhe, liste e chi più ne ha più ne metta...Wirth (il mangiatore di Quiche menzionato poco sopra) ha scritto un intero libro [2] tentando di dimostrare che si può scrivere un intero programma basandosi solo sulle strutture di dati. Come ogni Vero Programmatore sa invece l'unica struttura che serve VERAMENTE è l'array, dato che tutti gli altri tipi di dato altro non sono che sottoinsieme limitati di questi... e dato che sono limitati egli usa solo puntatori, soprattutto se questi rendono possibile bombare irrimediabilmente il computer, se no dove starebbe il divertimento????



SISTEMI OPERATIVI


Che SO usa un Vero Programmatore ???
Unix??? Noooo, Unix è qualcosa di simile a quello che si aspetta un vero Hacker, dato che qualunque Vero Programmatore non trova alcun divertimento nel tentare di indovinare come cavolo il comando PRINT viene chiamato questa settimana...La gente non fa lavori seri su Unix, lo usano soprattutto per fare adventure, modificare Rogue e mandarsi il tutto via UUCP.
MS-Dos??? Già meglio, crittico quel tanto che basta, facile da modificare, se ce ne fosse necessità, facile da bombare, con tante cose sconosciute e strane...
Una cosa sicuramente possiamo dire:
  • Il Vero Programmatore non usa il mouse e le icone, infatti il Vero Programmatore non capisce perché mai per compilare un programma uno debba staccare le mani dalla tastiera e cliccare su un menu quando è tanto semplice battere 
    CL pippo.c -k -iC:\all -q -w -e -r +t -y +cvb +f -g +g +p =l /f /a /s


In ogni caso il Vero Programmatore ha una sola nostalgia: il sistema IBM OS/370. Questo era infatti il SO che qualunque Vero Programmatore vorrebbe veder implementato su TUTTI i computer del mondo. Un Vero Programmatore sa che se vede comparire l'errore IJK3051 basta andare a vedere nel manuale del JCL per capire cosa è successo...
Un Grande Programmatore poi saprà i codici a memoria, mentre un Grandissimo Programmatore potrà trovare l'errore osservando 6 mega di dump senza neppure usare un calcolatore esadecimale...
l'OS/370 è VERAMENTE un SO potente, infatti è possibile distruggere giorni e giorni di lavoro con la semplice pressione di un tasto. Questo incoraggia l'attenzione sul lavoro e forma una mentalità che servirà in futuro, quando per distruggere giorni di lavoro saranno sufficienti tre tasti...



TOOL DI PROGRAMMAZIONE


Quali tool di programmazione necessita realmente un Vero Programmatore?
In effetti, come detto prima sono sufficienti un terminale a 1200 baud o un lettore di schede perforate, ma anche una semplice tastiera esadecimale sarebbe già più che sufficiente.
Ma purtroppo adesso i computer non hanno più tastiere esadecimali, come pure non hanno più quei magnifici pannelli frontali pieni di lucine e tastini che facevano tanto futuro...
I primi veri programmatori sapevano a memoria l'intero settore di boot dell'hard disk, e lo potevano riscrivere a memoria ogniqualvolta che il loro programma lo rovinava...
La leggenda narra che Seymore Cray (creatore del Cray I) scrisse il SO del primo CDC7600 usando il pannello frontale del computer la prima volta che questo venne acceso. Senza bisogno di dirlo Seymore era un Vero Programmatore. Uno dei migliori Veri Programmatori che abbia mai conosciuto è un sistemista della Texas Instrument. 
Una volta rispose alla telefonata di un cliente a cui si era bombato il sistema durante il salvataggio del lavoro. Il Vero Programmatore rimise a posto tutto facendo scrivere le istruzioni per terminare il lavoro di I/O sul pannello frontale (allora c'erano ancora), riscrivendo i dati rovinati in esadecimale e facendosi dire i risultati per telefono. La morale della storia è che se un tastierino ed una stampante possono far comodo un Vero Programmatore può arrangiarsi anche con solo un telefono...

Un altro tool fondamentale è un buon text editor. Molti dicono che il migliore sia quello della Xeros di Palo Alto, ma, come già detto, il Vero Programmatore non parla al suo computer attraverso un mouse.
Altri preferiscono EMACS o VI, ma in effetti il concetto di WYSYWYG (quello che vedi è quello che ottieni) si applica ai computer malissimo, così come si applica alle donne...
Quello che un vero programmatore vuole è in effetti qualcosa di più complesso, che implementi la filosofia del "You asked for it, you got it !!!" (YAFIYGI, avrai solo quello che chiedi). Insomma, l'editor perfetto è il TECO. Alcuni hanno osservato che una linea di comandi per TECO assomiglia molto di più al rumore sulle linee telefoniche che ad una linea di comandi e in effetti uno dei giochi più divertenti da fare è quello di scrivere il proprio nome sulla linea di comando e vedere cosa succede... Inoltre ogni piccolo errore avrà come risultato quello di distruggere il vostro programma o, peggio, di introdurre subdoli errori che saranno in seguito difficilmente rintracciabili... Per questa ragione un Vero Programmatore è molto riluttante a editare un programma funzionante per dargli gli ultimi ritocchi. E sempre per questa ragione un Vero Programmatore trova più semplice fare le modifiche finali utilizzando un programma come lo Zap. Alcuni Veri Programmatori utilizzano lo Zap stesso come editor, ma è forse esagerato...
Procedendo su questa linea il risultato è che tra il codice sorgente e quello che in effetti c'è scritto su disco c'è una discrepanza sempre maggiore, con il risultato che il lavoro è sempre più sicuro, perché solo un Vero Programmatore potrà lavorarci sopra in modo proficuo, nessun mangiatore di Quiche potrà fare manutenzione, minimizzando così i rischi di malfunzionamenti ulteriori del programma. Questa è SICUREZZA....

Altri tool importanti sono le documentazioni su cui il vero programmatore basa gran parte del suo lavoro:

  • Il Vero Programmatore non legge mai i manuali introduttivi, bastano ed avanzano i Reference Manual.
  • Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante.
  • Il Vero Programmatore se possibile legge i manuali in lingua originale, anche se questo a volte pone dei problemi di reperibilità.
  • Il Vero Programmatore non colleziona libri di raccolte di algoritmi. Questo perché e più lento cercare l'algoritmo in 3000 pagine di manuale che scriverlo al volo.
  • Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono sufficienti i data sheet dei microprocessori.
  • Il Vero Programmatore non scrive MAI i manuali dei programmi che fa, non ne ha il tempo materiale.
  • Il Vero Programmatore generalmente ha da qualche parte la documentazione completa del SO su cui lavora, pubblicata dalla casa che ha fatto il SO, ma sa che SICURAMENTE nelle 3500 pagine che in media compongono la documentazione non troverà quello che cerca. Se nelle vicinanze del terminale sono presenti più di 5 manuali ci sono delle forti probabilità che NON sia un Vero Programmatore.


Alcuni Tool NON usati da un Vero Programmatore:

  • Preprocessori di linguaggio.
  • Traduttori di linguaggio
  • Full Screen Debugger a livello sorgente. Il Vero Programmatore è in grado di capire quello che dice il Debug...
  • Compilatori ottimizzanti. L'ottimizzazione del programma scritto dal Vero Programmatore è già il massimo, e perciò altre modifiche non farebbero altro che peggiorare la situazione.



IL LAVORO DEL VERO PROGRAMMATORE


In generale il Vero Programmatore non fa lavori semplici come gestione di indirizzari o programmi gestionali, ecco alcuni dei lavori più adatti ai veri programmatori:

  • Il Vero Programmatore scrive programmi per la simulazione di una guerra termonucleare per l'esercito.
  • Il Vero Programmatore lavora per lo spionaggio, per decrittare le trasmissioni in cifra del nemico.
  • E' in gran parte dovuto al lavoro dei Veri Programmatori che gli americani sono arrivati sulla luna.
  • Il Vero Programmatore programma i sistemi guida di satelliti e missili.
  • In ogni caso il Vero Programmatore lavora su progetti molto importanti o molto ben pagati.




IL VERO PROGRAMMATORE MENTRE GIOCA


Il generale il Vero Programmatore gioca nello stesso modo in cui lavora: con i computer. In generale lo stesso lavoro è un gioco e alla fine del mese il Vero Programmatore è sempre abbastanza stupito di ricevere un compenso per quello che, a tutti gli effetti, è per lui un divertimento. Anche se non lo dirà mai a voce alta...
Occasionalmente il Vero Programmatore uscirà dall'ufficio per prendere una boccata d'aria e farsi una birra, ecco alcuni sistemi per riconoscere un Vero Programmatore fuori dal suo posto di lavoro:

  • A un party i Veri Programmatori sono quelli che stanno in angolo parlando di Sistemi Operativi, mentre di fianco a loro passano ragazze che si fermano, ascoltano per alcuni secondi e poi, dato che non capiscono una parola, se ne vanno. A volte un vero Programmatore incontra una Vera Programmatrice...vi risparmio per decenza il racconto di come si svolgono i fatti.
  • A una partita di football il Vero Programmatore è quello che controlla gli schemi delle squadre basandosi su quelli disegnati dal suo programma su di un foglio 11x14.
  • Sulla spiaggia il Vero Programmatore è quello che disegna flow chart sulla spiaggia.




L'HABITAT DEL VERO PROGRAMMATORE


Dal momento che un vero programmatore è, per l'azienda che lo usa, generalmente molto costoso, vediamo come far per farlo rendere al meglio sul posto di lavoro:

Il Vero Programmatore vive davanti ad uno o più monitor, attorno, sopra, dietro e sotto questi terminali si trovano generalmente le seguenti cose:
  • I listati di TUTTI i programmi a cui il Vero Programmatore ha mai lavorato, accatastati, in ordine più o meno cronologico, su ogni superficie piatta disponibile intorno. 
  • 6 o più tazze di caffè, quasi sempre fredde, ed alcune con alcuni mozziconi di sigaretta galleggianti.
  • Attaccato al muro c'è un ritratto di Spock con in mano l'enterprise stampato con una vecchia stampante a margherita.
  • Sparsi per terra ci sono pacchetti vuote di noccioline e vaccate simili.


In generale un Vero Programmatore può lavorare anche 30 o 40 ore di fila, anzi, di solito lavora molto meglio sotto sforzo. Fino a qualche tempo fa si concedeva dei pisolini mentre il computer compilava il programma, ma purtroppo il diffondersi di computer e periferiche veloci ha reso questa pratica difficile. In generale un Vero Programmatore se ha 5 settimane per terminare un programma passa le prime 4 cincischiando con aspetti secondari, ma interessanti, del programma, mentre il grosso del lavoro viene fatto in una settimana di lavoro ininterrotto. Questo provoca sempre grosse preoccupazioni al principale che teme sempre che il lavoro non sia mai pronto in tempo, ed offre al Vero Programmatore una buona scusa per non scrivere la documentazione.



VARIE ED EVENTUALI


  • Il Vero Programmatore a volte può scordare il nome della moglie o della ragazza, ma sa a memoria il codice ASCII.
  • Il Vero Programmatore non si cura della tastiera, le sue dita si adattano automaticamente a qualunque layout.
  • Il Vero Programmatore sa che anche avendo 3 mega di ram questa non sarà mai abbastanza, e perciò tenta di fare programmi piccoli.
  • Il Vero Programmatore tiene sempre i backup da quando ha dovuto riscrivere 327000 linee di assembler 68020.
  • Il Vero Programmatore scrive programmi di pubblico dominio, anche se di solito sono programmi talmente specialistici che serviranno solo ad altre tre persone al mondo oltre a lui.



Appendice Apocrifa: Il Vero Programmatore (Telematicus n.8) by Raffaello Valesio (334/100)

Il Vero Programmatore Di Sistema (d'ora in poi VPS) si è nella maggior parte dei casi evoluto come forma degenerativa del Vero Programmatore. Egli è immensamente orgoglioso dei sacri misteri di cui è a conoscenza e considera se stesso una specie di missionario bistrattato e misconosciuto che compie un lavoro meritevole, difficilissimo e mal retribuito.

La gioventù del VPS

Il VPS ricorda ancora nostalgicamente quando ai bei tempi bazzicava macchine antiche dai mitici nomi tramandati nelle leggende: ELEA 6001, RAMAC, 1301. Il suo più gran rimpianto è di non aver partecipato al progetto ENIAC di cui conosce a memoria tutta la storia. Su un altarino in ufficio tiene le foto di Aiken, Von Neumann, Shannon e altri numi; ogni tanto vi accende un led.

I rapporti coi suoi confratelli

Il VPS ha un forte senso della tribù e coltiva stretti rapporti con i VPS di altre ditte; fra di loro si conoscono tutti e suggellano la loro amicizia praticando strani riti. Si riuniscono talvolta intorno al tavolo di una pizzeria e passano la notte a rammentare aneddoti tecnici incomprensibili al volgo, ma che sembrano farli sbellicare dalle risa. Una scena tipica:

"Ti ricordi quando il Renzo ha zappato il BGX.ZOMP con una PTF taroccata e ha raspato la VTOC del disco di Sistema?"
Risa omeriche e manate sulle spalle...
"E il backup gli dava permanent I/O error anche sulla seconda copia ?"

L'ilarità si fa irrefrenabile... I commensali vicini guardano il gruppo con sospetto.

"Ha dovuto passare due notti a patchare la VTOC sugli indirizzi fisici !!! Ed era pure indexata!!"

A questo punto alcuni sono già rotolati sotto il tavolo: nessun problema, perché ormai si è creato un cordone di sicurezza che li separa dagli altri commensali, pigiati all'inverosimile pur di non rimanere toccati da costoro. Come tutte le società segrete che si rispettano, anche i VPS hanno i loro simboli, il loro gergo e i loro misteriosi sistemi di comunicazione. Nessuno sa come, ma appena la disposizione dei VPS nei vari posti di lavoro cambia tutta la comunità ne viene a conoscenza istantaneamente.


L'ambiente di lavoro

Un VPS ormai non programma quasi più. La sua occupazione è baloccarsi con le macro, che trova sparse a piene mani nei manuali di installazione e nei Reference (per non parlare dei leggendari IBM Internal Use Only, che chissà come riesce sempre a procurarsi). Il suo habitat ideale è un centro EDP con la massima quantità possibile di prodotti di software di sistema il più esoterici e criptici possibile, e almeno tre S.O. diversi che si parlano. Più il sistema è incasinato, più il VPS si diverte. Ho conosciuto un tempo un VPS, forse il più geniale che abbia mai incontrato, che aveva Zappato il compilatore COBOL tentando di tradurre il linguaggio in piemontese, con curiosi risultati tipo:

STOP RUN --> BOGIA NEN
DISPLAY --> VEDOMA
LESS THAN --> PI CIT

Talvolta il VPS scende di soppiatto in sala macchine e tracanna un sorso di fluido di raffreddamento del 3090 per tirarsi su.


I rapporti del VPS con il suo prossimo

Il VPS nutre il massimo disprezzo per tutto ciòche ha sia pur vaga attinenza con il software gestionale, le applicazioni e naturalmente l'Utente Finale. Quando si trova con dei Veri Programmatori, li inonda di paterni consigli, dimenticando le sue stesse origini e pontificando uggiosamente finché non viene cacciato a male parole. Naturalmente segue con pedanteria il lavoro dei tecnici hw, criticando, suggerendo, cianciando e rischiando la pelle quando questi ultimi lo minacciano di morte se non la pianta.


Il VPS nelle Emergenze

In caso di malfunzionamenti del Sistema, dovuti solitamente ai suoi sconclusionati smanettamenti di variabili vitali, il VPS tende sempre ad aggirare le vie ufficiali. Il suo motto è: Deve Essere Già Successo A Tizio, Mi Sembra. Pienamente fiducioso in ciò passa giorni e giorni a contattare oscuri amici e colleghi di altre ditte, in modo sotterraneo e carbonaro, finché il suo superiore esasperato lo insolentisce e lo costringe a rivolgersi al supporto software ufficiale. In questi momenti il VPS fa sfoggio di tutte le sue conoscenze: borbotta misteriosi codici e acronimi, consulta tonnellate di manuali, telefona freneticamente alle Grandi Case (leggi C.A. e BigBlue), chiama per nome tutti i loro CE Software, parla in HEX e ascolta in REXX, cita sconosciuti casi simili, digerisce metri cubi di dump di sistema e alla fine ferma tutto il Macchinone per tre giorni e rimedia al guaio. Peccato che a questo punto l'Utente Finale abbia già organizzato bande armate che lo cercano per fargli la pelle. Triste la vita per un VPS!


Il VPS si Riproduce! (paragrafo a luci rosse)

Il VPS generalmente è indaffaratissimo a seguire gigabazzecole con cui cincischiare, per cui non ha mai tempo per seguire le cose vitali del sistema. Ecco quindi che gli serve un aiutante che si occupi delle cose troppo materiali, come le linee tp o la terminaleria. Eccoci giunti al punto scabroso che tratta della Riproduzione del VPS; se siete deboli di cuore, meglio non proseguiate.
Poiché le femmine di VPS sono esemplari rarissimi, normalmente custodite negli impenetrabili harem delle Grandi Case e destinate a luminose carriere commerciali (ben più retribuite), il VPS ha escogitato un curioso sistema asessuato di riproduzione: l'Inizializzazione. Egli si aggira furtivo fra i più giovani e promettenti Veri Programmatori e li irretisce con oscure promesse e fugaci sguardi a riviste proibite che trattano argomenti tipo User Exit, MegaZap, Tuning, e illustrano le intimità dei Grandi Sistemi Operativi. E' fatta. Il giovane, abbagliato da cotanta visione, segue il losco figuro nella sua tana e immediatamente diventa un Cucciolo di VPS. Il MAESTRO in gran segreto e sotto il vincolo del silenzio lo inizia ai sacri misteri e lo fa diventare Apprendista VPS. Di lì a un paio d'anni il cucciolo se ne andrà in un posto prestigioso - solitamente una grande Banca o Assicurazione - a guadagnare il triplo del suo maestro, e quanto prima il loop ricomincia, perpetuando in questo modo la specie.






REFERENZE


[1] Feirstein, B., "Real Men don't Eat Quiche", New
York, Pocket Books, 1982.

[2] Wirth, N., "Algorithms + Data h [tructures =
Programs", Prentice Hall, 1976.


L'idea originale:

[0] sdcarl!lin, "Real Programmers", UUCP-net, Thu Oct 21
16:55:16 1982