Newsgroup: it.hobby.umorismo
Titolo: Vero programmatore

Non so se e' quello che cercava Trev ma io lo posto lo stesso.
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 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=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 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 e'
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 crea simulatori di reti neuronali in C
- Il Vero Programmatore starnutisce 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 puo' salvare 20 nanosecondi all'interno di un ciclo. 
- Il Vero Programmatore utilizza l'area di memoria di un codice gia'
eseguito
  e che non servira' piu' come area di memoria per i dati, ottimizzando
in
  questo modo lo spazio a disposizione.
- Il Vero Programmatore non ha bisogno di commenti, il codice e' gia'
  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 puo' 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? NO!, 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:\gnu\c\all -q -w -e -r +t -y +cvb +f -g +g +p =l /f /a
/s 
Comunque il Vero Programmatore ha una sola nostalgia: il sistema IBM
OS/370.
Questo era infatti il SO che qualunque Vero Programmatore vorrebbe
vedere
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 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
gia' piu' che sufficiente.
Ma purtroppo adesso i computer non hanno piu' 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
del-
l'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 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 e' 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 e' 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 programma, o, peggio, di introdurre subdoli errori che saranno in
seguito difficilmente rintracciabili.
Per questa ragione un Vero Programmatore e' molto riluttante a editare
un
programma funzionante per dargli gli ultimi ritocchi. E sempre per
questa
ragione un Vero Programmatore trova piu' semplice fare le modifiche
finali
utilizzando un programma come lo Zap. 
Alcuni Veri Programmatori utilizzano lo Zap stesso come editor, altri
scrivono
il programma direttamente in codice eseguibile, ma e' forse esagerato.
Procedendo su questa linea il risultato e' che tra il codice sorgente e
quello
che in effetti c'e' scritto su disco c'e' una discrepanza sempre
maggiore, con
il risultato che il lavoro e' sempre piu' sicuro, perche' solo un Vero
Programmatore potra' lavorarci sopra in modo proficuo, nessun mangiatore
di
Quiche potra' fare manutenzione, minimizzando cosi' i rischi di
malfunzionamenti ulteriori del programma. Questa e' 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 perche' e' piu' 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 trovera' quello che cerca.
Se nelle vicinanze del terminale sono presenti piu' 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 GIOCA
==================================
 
Il 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.
 
- Durante un black out un Vero Programmatore generalmente sviene in
quanto
  vengono a mancare i vitali afflussi di energia che gli permettono di
vivere.
L'HABITAT DEL VERO PROGRAMMATORE
================================
Dal momento che un vero programmatore e', per l'azienda che lo usa,
generalmente molto costoso, vediamo come fare 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. 
 
- Sei 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
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
progetto, 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' di scrivere programmi Write-only che nessuno, a parte
un
  altro Vero Programmatore, sara' mai in grado di decodificare. 
- Il Vero Programmatore non mette  mai commenti perche' a suo parere il
codice
  e' autodocumentante. Questo vale anche per i dump esadecimali di
codice
  assembly. 
- 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. 
- Ai funerali di un collega, il Vero Programmatore commenta:
  "Peccato.. la sua routine di sort O(logN) stava quasi per funzionare" 
- 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.
- Il Vero Programmatore conta in base due.
ERRATA CORRIGE
==============
- QUALE hard disk? mangianastri e ferriti! 
- QUALI nastri? cassetti di schede perforate! Solo i ricchi avevano i
nastri!
- l 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
  l'unico che consente ancora di azzerare un intero file system con un
  comando di sette 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.  
REFERENZE
=========
[1] Feirstein, B., "Real Men don't Eat Quiche", New York, Pocket Books,
1982.
[2] Wirth, N., "Algorithms + Data structures = Programs", Prentice Hall,
1976.
- L'idea originale: 
[0] sdcarl!lin, "Real Programmers", UUCP-net, Thu Oct 21 16:55:16 1982 
-- 
Ciao
/\/\arco /\/\ex
Il Meglio di it.hobby.umorismo
http://www.geocities.com/Hollywood/Lot/9796/

 =====================
[snip! (of course!)]
Ci sono almeno tre tizi che hanno disquisito con nostalgia di queste cosa
nel corso della settimana su it.comp.win95
Non dico chi sono perche' il VERO PROGRAMMATORE e' pure un poco
suscettibile e vendicativo...
Jojo