Il vero programmatore

IL VERO PROGRAMMATORE

Tornando indietro ai vecchi e gloriosi giorni dell'informaticaprimordiale era relativamente facile distinguere tra veri uomini eragazzini (nella letteratura classica la distinzione e' tra "veriuomini" e "mangia-quiche").

Durante quei tempi i Veri Uomini erano gli unici che si intendevano dicomputer, gli altri (i ragazzini o "mangiatori di quiche") erano quelliche di computer non se ne intendevano.

I Veri Uomini dicevano cose come "DO 10 I=1,10" o "ABEND" (ovviamenteparlando in lettere maiuscole, mi sembra ovvio), mentre il resto dellagente diceva semplicemente che i computer erano cose troppo complicateper loro. (sempre il lavoro [1] dice appunto che non esistono cosetroppo complicate per il vero uomo).

Ma, come in tutte le cose, i tempi cambiano, adesso viviamo in tempi incui anche le vecchiette hanno dei computer dentro i loro forni amicroonde, in cui qualunque Vero Uomo puo' essere battuto da unragazzino 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 VeroProgrammatore ed un universitario giocatore di Pac-Man. Se questadistinzione sara' chiara questi giovani inesperti potranno avere unmodello guida, un padre spirituale a cui ispirarsi. Inoltre sara'possibile spiegare ai datori di lavoro perche' non e' ne' necessarione' giusto sostituire dei Veri Programmatori con dei giocatori di PacMan, anche se il risparmio sugli stipendi sarebbe considerevole.
 
LINGUAGGI

Il sistema piu' rapido e sicuro per distinguere un Vero programmatoredal resto del mondo e' considerare il linguaggio che usa: il VeroProgrammatore programmava in FORTRAN, mentre ora programma in C.

I mangiatori di Quiche programmano in Pascal. Da questo si deduce chesicuramente Niklaus Wirth era un mangiatore di Quiche e NON un VeroProgrammatore.

Ad un Vero Programmatore non servono tutte le strutture ed i meccanismidel pascal, un Vero Programmatore puo' essere felice con un perforatoredi schede o un terminale a 1200 baud, un C a standard K&R (ANSI... ache 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 none' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C edassembler puo' fare TUTTO, per definizione.

PROGRAMMAZIONE STRUTTURATA

Gli accademici negli ultimi anni hanno stabilito, dall'alto delle lorocattedre, che un programma e' piu' facilmente leggibile se ilprogrammatore utilizza particolari tecniche, strutture e costrutti.

Ovviamente essi non sono d'accordo su quali questi costrutti e questetecniche precisamente siano, e percio' le loro teorie sono discordantied erratiche. In questo modo solo alcuni mangia-Quiche si lascianoconvincere dai loro assiomi.

Un tipico lavoro del mondo reale (e non un lavoro teorico dauniversita') e' di prendere un sorgente di 100.000 o 200.000 linee efarlo andare il doppio piu' veloce. In questo caso qualunque VeroProgrammatore vi potra' dire che la programmazione strutturata nonserve a nulla, quello che in realta' serve e' del talento.

Alcune rapide considerazioni del Vero Programmatore sulla programmazionestrutturata:

- Il Vero Programmatore non ha paura di usare GOTO

-I Il Vero Programmatore puo' scrivere un ciclo DO lungo 5 pagine senzafare confusione.

-I Il Vero Programmatore usa i costrutti CASE basati su calcoliaritmetici, essi rendono un programma piu' divertente.

-I Il Vero Programmatore scrive del codice automodificante, soprattuttose questo puo' salvare 20 nanosecondi all'interno di un ciclo.

-I 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, ottimizzandoin 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 parlatomolto di strutture di dati. Tipi di dati astratti, stringhe, liste echi piu' ne ha piu' ne metta.

Wirth (il mangiatore di Quiche menzionato poco sopra) ha scritto unintero libro [2] tentando di dimostrare che si puo' scrivere un interoprogramma basandosi solo sulle strutture di dati.

Come ogni Vero Programmatore sa invece l'unica struttura che serveVERAMENTE e' l'array, dato che tutti gli altri tipi di dato altro nonsono che sottoinsieme limitati di questi. e dato che sono limitati egliusa solo puntatori, soprattutto se questi rendono possibile bombareirrimediabilmente 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 veroHacker, dato che qualunque Vero Programmatore non trova alcundivertimento nel tentare di indovinare come cavolo il comando PRINTviene 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 damodificare, se ce ne fosse necessita', facile da bombare, con tantecose 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 vedereimplementato su TUTTI i computer del mondo.

Un Vero Programmatore sa che se vede comparire l'errore IJK3051 basta andarea vedere nel manuale del JCL per capire cosa e' successo.

Un Grande Programmatore poi sapra' i codici a memoria, mentre un GrandissimoProgrammatore potra' trovare l'errore osservando 6 mega di dump senza neppureusare un calcolatore esadecimale...

L'OS/370 e' VERAMENTE un SO potente, infatti e' possibile distruggeregiorni e giorni di lavoro con la semplice pressione di un tasto. Questoincoraggia l'attenzione sul lavoro e forma una mentalita' che servira'in futuro, quando per distruggere giorni di lavoro saranno sufficientitre tasti...
 
TOOL DI PROGRAMMAZIONE

Quali tool di programmazione necessita realmente un Vero Programmatore?

In effetti, come detto prima sono sufficienti un terminale a 1200 baudo un lettore di schede perforate, ma anche una semplice tastieraesadecimale 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 dilucine e tastini che facevano tanto futuro.

I primi veri programmatori sapevano a memoria l'intero settore di bootdel- l'hard disk, e lo potevano riscrivere a memoria ogniqualvolta cheil loro programma lo rovinava.

La leggenda narra che Seymore Cray (creatore del Cray I) scrisse il SOdel primo CDC7600 usando il pannello frontale del computer la primavolta che questo venne acceso. Senza bisogno di dirlo Seymore era unVero Programmatore.

Uno dei migliori Veri Programmatori che abbia mai conosciuto e' unsistemista della Texas Instrument. Una volta rispose alla telefonata diun cliente a cui si era bombato il sistema durante il salvataggio dellavoro. Il Vero Programmatore rimise a posto tutto facendo scrivere leistruzioni per terminare il lavoro di I/O sul pannello frontale (allorac'erano ancora), riscrivendo i dati rovinati in esadecimale e facendosidire i risultati per telefono.

La morale della storia e' che se un tastierino ed una stampante possonofar comodo un Vero Programmatore puo' arrangiarsi anche con solo untelefono.

Un altro tool fondamentale e' un buon text editor. Molti dicono che ilmigliore sia quello della Xerox di Palo Alto, ma, come gia' detto, ilVero 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 computermalissimo, 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 assomigliamolto di piu' al rumore sulle linee telefoniche che ad una linea dicomandi, ed in effetti uno dei giochi piu' divertenti da fare e' quellodi scrivere il proprio nome sulla linea di comando e vedere cosasuccede.

Inoltre ogni piccolo errore avra' come risultato quello di distruggereil vostro programma, o, peggio, di introdurre subdoli errori chesaranno in seguito difficilmente rintracciabili.

Per questa ragione un Vero Programmatore e' molto riluttante a editareun programma funzionante per dargli gli ultimi ritocchi. E sempre perquesta ragione un Vero Programmatore trova piu' semplice fare lemodifiche finali utilizzando un programma come lo Zap.

Alcuni Veri Programmatori utilizzano lo Zap stesso come editor, altriscrivono il programma direttamente in codice eseguibile, ma e' forseesagerato.

Procedendo su questa linea il risultato e' che tra il codice sorgente equello che in effetti c'e' scritto su disco c'e' una discrepanza sempremaggiore, 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, minimizzandocosi' i rischi di malfunzionamenti ulteriori del programma. Questa e'SICUREZZA.

Altri tool importanti sono le documentazioni su cui il veroprogrammatore 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 ladocumentazione completa del SO su cui lavora, pubblicata dalla casa cheha fatto il SO, ma sa che SICURAMENTE nelle 3500 pagine che in mediacompongono la documentazione non trovera' quello che cerca.

Se nelle vicinanze del terminale sono presenti piu' di 5 manuali cisono 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 gestionedi 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 cuilavora: con i computer.

In generale lo stesso lavoro e' un gioco, ed alla fine del mese il VeroProgrammatore e' sempre abbastanza stupito di ricevere un compenso perquello che, a tutti gli effetti, e' per lui un divertimento, anche senon lo dira' mai a voce alta.

Occasionalmente il Vero Programmatore uscira' dall'ufficio per prendereuna boccata d'aria e farsi una birra, ecco alcuni sistemi perriconoscere 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 almeglio sul posto di lavoro.

Il Vero Programmatore vive davanti ad uno o piu' monitor, attorno,sopra, dietro e sotto questi terminali si trovano generalmente leseguenti 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 difila, anzi, di solito lavora molto megli sotto sforzo. Fino a qualchetempo fa si concedeva dei pisolini mentre il computer compilava ilprogramma, ma purtroppo il diffondersi di computer e periferiche velociha reso questa pratica difficile.

In generale un Vero Programmatore se ha 5 settimane per terminare unprogramma passa le prime 4 cincischiando con aspetti secondari, mainteressanti, del progetto, mentre il grosso del lavoro viene fatto inuna settimana di lavoro ininterrotto. Questo provoca sempre grossepreoccupazioni al principale che teme sempre che il lavoro non sia maipronto in tempo, ed offre al Vero Programmatore una buona scusa per nonscrivere 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 siadattano automaticamente a qualunque layout.

- Il Vero Programmatore sa che anche avendo 8 mega di RAM questa nonsara' mai abbastanza, e percio' tenta di fare programmi piccoli.

- Il Vero Programmatore tiene sempre i backup da quando ha dovutoriscrivere 327000 linee di assembler 68020.

- Il Vero Programmatore scrive programmi di pubblico dominio, anche sedi solito sono programmi talmente specialistici che serviranno solo adaltre 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 scrivereprogrammi a spaghetti in qualsiasi linguaggio. In questo senso, il C vaa pennello per la sua capacita' di scrivere programmi Write-only chenessuno, a parte un altro Vero Programmatore, sara' mai in grado didecodificare.

- Il Vero Programmatore non mette mai commenti perche' a suo parere ilcodice e' autodocumentante. Questo vale anche per i dump esadecimali dicodice 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, ritenutiad un livello troppo basso. La probabilita' di trovare un utentecompetente e' stimata inferiore a quella di trovare una VeraProgrammatrice.

- 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 inastri!

- QUALI tastiere e display esadecimali? File di interruttori e LED in binario.

- l Vero Programmatore non usa commenti: se e` stato difficile dascrivere, deve essere difficile da leggere. Ma se e` un VEROPROGRAMMATORE lo legge ugualmente con facilita`.

- Il Vero Programmatore usa il C, e QUINDI usa anche Unix e iPreprocessori. Unix, almeno nelle prime versioni, e' il vero sistemaoperativo contemporaneo l'unico che consente ancora di azzerare unintero file system con un comando di sette lettere blank compresi:
rm -r /

- OS/370 era seriamente migliore, ma non bastava battere un tasto perperdere tutto, era sufficiente sbagliare la posizione di un blank.
POSTILLE:

- Il Vero Programmatore edita direttamente il file Postscript di undocumento, 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 mododa non aver bisogno di noiosi include files.

- Il Vero Programmatore e la programmazione ad oggetti: se costretto asimili pratiche, il Vero Programmatore PRIMA scrive il programma, e POI,quando funziona, ne fa un'analisi ad oggetti. Per nessuna ragionecomunque modifichera' il codice gia' scritto per conformarloall'analisi. Comunqe inserira' nel programma un numero sufficente divariabili globali usate da TUTTE le classi, in modo da renderneimpossibile la manutenzione da un mangiatore di Quiche (vedi praragrafosulla sicurezza dei programmi).

- Il Vero Programmatore chiama le variabili con nomi autoespicativi dimassimo 5 lettere (es. CVfrZ). Solo mangiatori di Quiche usano nomitipo "Massimo_Numero_Di_Dipendenti" per una variabile. Se un VeroProgrammatore usa un nome simile, probabilmente la variabile indica lavelocita' 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)