[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