IL VERO PROGRAMMATORE

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

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

  - 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.

=========
  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)

  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 :-)