
Tratto da:
Real Programmers Don't Use PASCAL
Ed Post
Graphic Software Systems
P.O. Box 673
25117 S.W. Parkway
Wilsonville, OR 97070
Copyright (c) 1982
Datamation, July, 1983, pp. 263-265
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
meccanism 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
iltutto 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 gotit !!!" (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 indiscoteca, 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!
- QUALI tastiere e display esadecimali? File di interruttori e LED
in
binario.
- 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 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.
POSTILLE:
- Il Vero Programmatore edita direttamente il file Postscript di un
documento, se deve modificarlo.
- il Vero Programmatore conosce sempre almeno 16 cifre di pi greco,
di cui conosce anche la rappresentazione IEEE in esadecimale, e
(se anche fisico) tutte le cifre di c (e' definito con 9 cifre), in
modo
da non aver bisogno di noiosi include files.
- Il Vero Programmatore e la programmazione ad oggetti: se costretto
a
simili pratiche, il Vero Programmatore PRIMA scrive il programma, e
POI,
quando funziona, ne fa un'analisi ad oggetti. Per nessuna ragione
comunque modifichera' il codice gia' scritto per conformarlo
all'analisi. Comunqe inserira' nel programma un numero sufficente di
variabili globali usate da TUTTE le classi, in modo da renderne
impossibile la manutenzione da un mangiatore di Quiche (vedi
praragrafo
sulla sicurezza dei programmi).
- Il Vero Programmatore chiama le variabili con nomi autoespicativi
di
massimo 5 lettere (es. CVfrZ). Solo mangiatori di Quiche usano nomi
tipo "Massimo_Numero_Di_Dipendenti" per una variabile. Se un Vero
Programmatore usa un nome simile, probabilmente la variabile indica
la
velocita' terminale di uno ione in una nube molecolare (il codice e'
stato riciclato efficentemente da un programma di contabilita').
- Il capitano Picard di Star Trek TNG e' un Vero Programmatore:
riprogramma Data usando un pezzo di ferro per cortocircuitarne il
circuito di input in binario. (Time's Arrow, part II, stardate
46001.3)
LA LISTA DELLA SPESA DEL VERO PROGRAMMATORE
Come ragionano i programmatori, quando vanno a fare la spesa?
Dipende da che linguaggio di programmazione usano.
Lista Normale
- Una lampadina
- Pane
- Tonno
- Prosciutto
- Mozzarella
Programmatore C
- Una lampadina piccola attacco mignon
- 100 grammi di pane
- Una scatoletta di tonno porzione singola
- Una fetta di prosciutto
- Un bocconcino di mozzarella
Programmatore C++
- Una lampadina a 35 watt con impedenza di 18 microAmpere,
al neon
- Pane integrale con crusca pugliese e semini di finocchio
lombardi
- Tonno di pesce azzurro del baltico da allevamento
biologico
- Prosciutto crudo di parma dell'anno precedente, da
maiale di razza
- Mozzarella di bufala campana certificata
Programmatore C# su .Net
- Lampadina a marchio COOP
- Pane COOP
- Tonno a marchio COOP
- Prosciotto dal banco imbustato COOP
- Mozzarella COOP
Programmatore Java
- Una scatola di lampadine (meglio due)
- Dieci chili di pane
- Tutte le scatole di tonno dello scaffale
- Un cosciotto di prosciutto crudo (e anche la spalla)
- Mozzarella confezione famiglia, tre pacchi
Programmatore Perl
- Una lampadina psichedelica
- Pasta di pane da cuocersi da solo
- Tonno di importazione thailandese
- Misto di prosciutto mortadella e salumi vari
- Mozzarella piccante con il pepe
Programmatore Python
- Lampadina 100w con interruttore maggiorato ed un gran
pulsantone rosso
- Pane morbido, ovviamente senza crosta, gią tagliato
- Scatoletta di tonno (gią sgocciolato!) ad apertura
facilitata
- Prosciutto crudo disossato/sgrassato
- Mozzarella importata direttamente da Caserta
Programmatore Ruby
- lampadina alogena con max (lumen/prezzo)
- 1 rosetta, 1 ciabatta, 1 grissino
- tonno crudo, per il sushi
- un po' di crudo, un po' di cotto, un po' di bresaola
- tofu
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
NOTA: L'origine del documento ci č sconosciuta, non vogliamo
togliere quindi nulla all'autore.
