|
Il Vero Programmatore
17/08/2009 21:00:00
|
Tornando indietro ai vecchi e gloriosi giorni
dell'informatica primordiale era relativamente facile distinguere tra veri uomini
e ragazzini (nella letteratura classica 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 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. È 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), 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 contabilità 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 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 auto-modificante, soprattutto se questo può salvare 20 nanosecondi all'interno di un ciclo.
- Il Vero Programmatore utilizza l'area di memoria di un codice già eseguito e che non servirà più 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 è già auto-esplicante 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 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? NO!, 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, criptico 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:\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 è 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 Xerox 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, cosi' 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, ed 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, altri scrivono il programma direttamente in codice eseguibile, 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
cosi' 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è è più
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à 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.
- è 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, ed 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:
- 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 è 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 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 è, 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 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.
- Sei 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 vuoti 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 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 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 8 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.
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 è in grado di scrivere
programmi a spaghetti in qualsiasi linguaggio. In questo senso, il C va a
pennello per la sua capacità di scrivere programmi Write-only che nessuno, a
parte un altro Vero Programmatore, sarà mai in grado di decodificare.
- Il Vero Programmatore non mette mai commenti perchè a suo parere il
codice è auto-documentante. 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 probabilità di incontrarne una è estremamente
bassa.
- Il Vero Programmatore ha scarsa considerazione degli utenti, ritenuti ad
un livello troppo basso. La probabilità di trovare un utente competente è
stimata inferiore a quella di trovare una Vera Programmatrice.
- Il Vero Programmatore conta in base due.
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 (è 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
modificherà il codice già scritto per conformarlo all'analisi. Comunqe
inserirà 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 paragrafo sulla sicurezza dei programmi).
- Il Vero Programmatore chiama le variabili con nomi auto-espicativi 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 velocità terminale di
uno ione in una nube molecolare (il codice è stato riciclato efficientemente
da un programma di contabilità).
- Il capitano Picard di Star Trek TNG è un Vero Programmatore: riprogramma
Data usando un pezzo di ferro per cortocircuitarne il circuito di input in
binario. (Timès Arrow, part II, stardate 46001.3).
Tutti i Testi