[gl-como] Fwd: [LIFO] Amarcord di qualche anno fa - La zappa sui piedi

Matteo Cavalleri gl-como@lists.linux.it
Mon, 26 May 2003 10:27:08 +0200


Mi hai fatto tornare in mente qualcosa di simile che avevo letto ai 
tempi dei modem a 2400baud (ma GIA' con MNP5 !!!) e delle fidonet ...




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 e' 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=3D1,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 puo' essere battuto da un 
ragazzino di 12 anni in qualunque videogioco, in cui chiunque puo' 
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' percio' necessario 
stabilire una netta distinzione tra Il Vero Programmatore ed un 
universitario giocatore di Pac-Man... Se questa distinzione sara' 
chiara questi giovani inesperti potranno avere un modello guida, un 
padre spirituale a cui ispirarsi. Inoltre sara' possibile spiegare ai 
datori di lavoro perche' non e' 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 piu' rapido e sicuro per distinguere un Vero programmatore 
dal resto del mondo e' 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 puo' 
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 =E8 fin troppo 
chiaro..), ed 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 contabilita' in C 
Il Vero Programmatore fa TUTTO in C. 
Se per caso il C non fosse sufficiente il Vero Programmatore 
lavorera' in assembler, se neppure questo fosse sufficiente allora il 
lavoro non e' fattibile, ma la cosa e' impossibile, un Vero 
Programmatore in C ed assembler puo' fare TUTTO, per definizione. 
Programmazione Strutturata 
Gli accademici negli ultimi anni hanno stabilito, dall'alto delle 
loro cattedre, che un programma e' piu' 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 percio' 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 universita') e' di prendere un 
sorgente di 100.000 o 200.000 linee e farlo andare il doppio piu' 
veloce. In questo caso qualunque Vero Programmatore vi potra' dire 
che la programmazione strutturata non serve a nulla, quello che in 
realta' serve e' del talento.... Alcune rapide considerazioni del 
Vero Programmatore sulla programmazione strutturata: 
Il Vero Programmatore non ha paura di usare GOTO 
Il Vero Programmatore puo' 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 piu' divertente. 
Il Vero Programmatore scrive del codice automodificante, soprattutto 
se questo pu=F2 salvare 20 nanosecondi all'interno di un ciclo. 
Il Vero Programmatore non ha bisogno di commenti, il codice e' ga' 
autoesplicante a sufficienza. 
Dopo aver parlato di programmazione strutturata si e' anche parlato 
molto di strutture di dati. Tipi di dati astratti, stringhe, liste e 
chi piu' ne ha piu' ne metta... Wirth (il mangiatore di Quiche 
menzionato poco sopra) ha scritto un intero libro [2] tentando di 
dimostrare che si pu=F2 scrivere un intero programma basandosi solo 
sulle strutture di dati. Come ogni Vero Programmatore sa invece 
l'unica struttura che serve VERAMENTE e' 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 e' 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 ??? Gia' meglio, crittico quel tanto che basta, 
facile da modificare, se ce ne fosse necessita' , 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 perche' mai per compilare un programma 
uno debba staccare le mani dalla tastiera e cliccare su un menu 
quando e' tanto semplice battere : 
CL pippo.c -k -iC:\all -q -w -e -r +t -y +cvb +f -g +g +p =3Dl /f /a 
/s 
In ogni caso il Vero Programmatore ha una sola nostalgia: il sistema 
IBM OS/370 (sigh! n.m.p.). 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 e' successo... Un 
Grande Programmatore poi sapra' i codici a memoria, mentre un 
Grandissimo Programmatore potra' trovare l'errore osservando 6 mega 
di dump senza neppure usare un calcolatore esadecimale... L'OS/370 e' 
VERAMENTE un SO potente, infatti e' possibile distruggere giorni e 
giorni di lavoro con la semplice pressione di un tasto. Questo 
incoraggia l'attenzione sul lavoro e forma una mentalita' che 
servira' in futuro, quando per distruggere giorni di lavoro saranno 
ufficienti 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=E0' pi=F9 che sufficiente. Ma purtroppo adesso 
i computer non hanno pi=F9 tastiere esadecimali, come pure non hanno 
piu' 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 
iscrivere 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 VeroProgrammatore. Uno dei migliori Veri 
Programmatori che abbia mai conosciuto e' 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 e' che se un 
tastierino ed una stampante possono far comodo un Vero Programmatore 
puo' 
arrangiarsi anche con solo un telefono... Un altro tool fondamentale 
e' un buon text editor. Molti dicono che il migliore sia quello della 
Xerox di Palo Alto, ma, come gia' 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 e' quello che ottieni) si applica ai 
computer malissimo, cosi' come si applica alle donne... Quello che un 
vero programmatore vuole =E8 in effetti qualcosa di piu' complesso, 
che implementi la filosofia del "You asked for it, you 
got it !!!" (YAFIYGI, avrai solo quello che chiedi). Insomma, 
l'editor perfetto =E8 il TECO. Alcuni hanno osservato che una linea 
di comandi per TECO assomiglia molto di piu' al rumore sulle linee 
telefoniche che ad una linea di comandi, ed in effetti uno dei giochi 
piu' divertenti da fare e' quello di scrivere il proprio nome sulla 
linea di comando e vedere cosa succede... Inoltre ogni piccolo 
errore avra' come risultato quello di distruggere il vostro mma, o, 
peggio, di introdurre subdoli errori che saranno in seguito 
difficilmente rintracciabili... Per questa ragione un Vero 
Programmatore 
=E8 molto riluttante a editare un programma funzionante per dargli 
gli ultimi ritocchi. E sempre per questa ragione un Vero 
Programmatore trova pi=F9 semplice fare le modifiche finali 
utilizzando 
un programma come lo Zap. Alcuni Veri Programmatori utilizzano lo Zap 
stesso come editor, ma =E8 forse esagerato... Procedendo su questa 
linea il risultato =E8 che tra il codice sorgente e 
quello che in effetti c'=E8 scritto su disco c'=E8 una discrepanza 
sempre maggiore, con il risultato che il lavoro =E8 sempre pi=F9 
sicuro, perch=E9 solo un Vero Programmatore potr=E0 
lavorarci sopra in modo proficuo, nessun mangiatore di Quiche potr=E0 
fare manutenzione, minimizzando cosi' i rischi di malfunzionamenti 
ulteriori del programma. Questa =E8 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 e' inutile e deviante. 
Il Vero Programmatore se possibile legge i manuali in lingua 
originale, anche se questo a volte pone dei problemi di reperibilita' 
. Il Vero Programmatore non colleziona libri di raccolte di 
algoritmi. 
Questo perch=E9 e pi=F9 lento cercare l'algoritmo in 3000 pagine di 
manuale che scriverlo di getto. 
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=E0 quello che cerca. Se nelle vicinanze del 
terminale sono presenti pi=F9 di 5 manuali ci sono delle 
forti probabilita' 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 e' in 
grado di capire quello che dice il Debug... 
Compilatori ottimizzanti. L'ottimizzazione del programma scritto dal 
Vero Programmatore e' gia' il massimo, e percio' 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 piu' 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 lavora gioca. In generale il Vero Programmatore gioca nello 
stesso modo in cui lavora: con i computer. In generale lo 
stesso lavoro e' un gioco, ed alla fine del mese il Vero 
Programmatore e' sempre abbastanza stupito di ricevere un compenso 
per quello che, a tutti gli effetti, e' per lui un divertimento. 
Anche se non lo dira' mai a voce alta... Occasionalmente il Vero 
Programmatore uscira' 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: 
Ad 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... Ad una partita 
di football il Vero Programmatore e' quello che controlla gli schemi 
delle squadre basandosi su quelli disegnati dal suo programma su di 
un foglio 11x14. Sulla spiaggia il Vero Programmatore e' 
quello che disegna flow chart sulla sabbia. 
L'habitat del vero programmatore 
Dal momento che un vero programmatore e', 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 piu' 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 piu' o meno cronologico, su ogni superficie 
piatta disponibile intorno. 6 o piu' tazze di caffe', quasi sempre 
fredde, ed alcune con alcuni mozziconi di sigaretta galleggianti. 
Attaccato al muro c'e' un ritratto di Spock con in mano l' enterprise 
stampato con una vecchia stampante a margherita. Sparsi per terra ci 
sono pacchetti vuoti di noccioline e vaccate simili. In 
generale un Vero Programmatore puo' lavorare anche 30 o 40 ore di 
fila, anzi, di solito lavora molto megli sotto sforzo. Fino a qualche 
tempo fa si concedeva dei pisolini mentre il computer 
compila 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 puo' 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 8 mega di RAM questa non sara' mai abbastanza, e percio' 
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. 
Altri corollari 
Il Vero Programmatore si trovava a suo agio con il Fortran in quanto 
consentiva la programmazione a spaghetti senza limitazioni. Va 
comunque detto che il Vero Programmatore e' in grado di 
scrivere programmi a spaghetti in qualsiasi linguaggio. In questo 
senso, il C va a pennello per la sua capacita' i scrivere programmi 
Write-only che nessuno, a parte un altro Vero Programmatore, 
sara' mai in grado di decodificare.[M] Il Vero Programmatore non 
mette mai commenti perche' a suo parere il codice e' 
autodocumentante. Questo vale anche per i dump esadecimali di codice 
assembler. Nel tempo libero, il Vero Programmatore va abbastanza 
spesso in discoteca, ma si limita ad osservare il gioco di luci. 
Ultimamente, viene stranamente attratto dal terminale del 
controllore laser. Le Vere Programmatrici esistono in ragione di 1 
per ogni 256 Vero Programmatori, come tale la probabilita' di 
incontrarne una e' estremamente bassa. Il Vero Programmatore ha 
scarsa considerazione degli utenti, ritenuti ad un livello troppo 
basso. La probabilita' di trovare un utente competente e' stimata 
inferiore a quella di trovare una Vera Programmatrice. 
ErrataCorrige 
ll Vero Programmatore non usa commenti: se e` stato difficile da 
scrivere, deve essere difficile da leggere. Ma se e` un VERO 
PROGRAMMATORE lo legge ugualmente con facilita`. Il Vero 
Programmatore usa il C, e QUINDI usa anche Unix e i Preprocessori. 
Unix, almeno nelle prime versioni, e' il vero sistema operativo 
contemporaneo per il VP, e' l'unico che consente ancora di azzerare 
un intero file system con un comando di 7 lettere blank compresi: rm -
r / OS/370 era seriamente migliore, ma non bastava battere un tasto 
per perdere tutto, era sufficiente sbagliare la posizione di un 
blank.
=======================================
There is *Good*, *Cheap*, and *Fast*. 
You can only have two of the three at any one time