E S T R A T T O da: TELEMATICUS nø6 dell'agosto 1991: -----> IL VERO PROGRAMMATORE ===================== Traduzione ed adattamento di: Massimo Gentilini SysOp nodo 2:332/401 Tornando indietro ai vecchi e gloriosi giorni dell'informatica primordiale era relativamente facile distinguere tra veri uomini e ragazzini (nella letteratura classica [1] 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 dicevano semplicemente che i computer erano cose troppo complicate per loro... (sempre il lavoro [1] dice appun- to 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 Pro- grammatore dal resto del mondo e' considerare il linguaggio che usa: il Vero Programmatore programmava in FORTRAN, mentre ora programma in C. [NdE: anche se si tiene sempre un compilatore FORTRAN per le cosettine veramente simpatiche] 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, Kernighan 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 fa TUTTO in C [NdE: ovviamente puo' fare tutto questo in FORTRAN, dipende da come si sveglia il mattino. Tanto e' indubbio che tutti i linguaggi di programmazione sono equivalenti...] 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 Pro- grammatore 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 co- strutti. Ovviamente essi non sono d'accordo su quali siano precisa- mente questi costrutti e queste tecniche, 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 pro- grammazione strutturata: * Il Vero Programmatore non ha paura di usare GOTO * Il Vero Programmatore puo' scrivere un ciclo DO lungo 5 pa- gine 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 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] tentan- do 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 que- sti... e dato che sono limitati perche' mai dovremmo usarli ???? Un Vero Programmatore al massimo utilizza i puntatori, soprattutto se questi rendono possibile bombare irrimediabilmente il computer, se no dove starebbe il divertimento???? [NdE: in realta' il vero motivo per cui i Veri Programmatori hanno deciso che anche il C e' un Vero Linguaggio non e' dato dal fatto che il K&R limita il numero di caratteri significativi a 8 (6? 12?), o che ci sono tanti operatori strani che si possono combinare tra loro in maniera creativa, oppure ancora che il preprocessore sembra fatto apposta per incasinare le cose e fare ritornare i sani vecchi .LE. .GT. e simili che come tutti possono intuire sono gli unici modi seri per fare una comparazione. Si', tutte queste sono Caratteristiche Funzionali, ma la realta' e' un'altra. Volete mette- re la gioia di avere un puntatore a disposizione, e in quante inso- spettate maniere possono venire usati per risparmiare un paio di cicli di istruzioni? Vedremo adesso, con il nuovo standard FORTRAN 90 che e' appena stato approvato e comprende tutte queste cose e altre ancora - i Veri Programmatori non potevano lasciare perire si' miseramente il loro primo amore! - cosa succedera'] SISTEMI OPERATIVI ----------------- Che SO usa un Vero Programmatore ??? Unix ??? Noooo, 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 program- ma uno debba staccare le mani dalla tastiera e cliccare su un menu quando e' tanto semplice battere CL pippo.c -k -iC:\all -q -w -e -r +t -y +cvb +f -g +g =l /f /a /s In ogni caso il Vero Programmatore ha una sola nostalgia: il sistema IBM OS/370. Questo era infatti il SO che qualunque Vero Programmatore vorrebbe veder 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 di- struggere giorni e giorni di lavoro con la semplice pressione di un tasto. Questo incoraggia l'attenzione sul lavoro e forma una menta- lita' che servira' in futuro, quando per distruggere giorni di lavo- ro saranno sufficienti tre tasti... TOOL DI PROGRAMMAZIONE ---------------------- Di 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 esadeci- mali, 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 dell'hard disk, e lo potevano riscrivere a memoria ogniqual- volta che il loro programma lo rovinava... La leggenda narra che Seymore Cray (creatore del Cray I) scris- se il SO del primo CDC7600 usando il pannello frontale del computer la prima volta che questo venne acceso. Senza bisogno di dirlo Sey- more era un Vero Programmatore. Uno dei migliori Veri Programmatori che abbia mai conosciuto e' un sistemista della Texas Instrument. Una volta rispose alla telefo- nata di un cliente a cui si era bombato il sistema durante il salva- taggio del lavoro. Il Vero Programmatore rimise a posto tutto facen- do scrivere le istruzioni per terminare il lavoro di I/O sul pannel- lo 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. [NdE: essi hanno il vantaggio di avere tutti quei bei comandi che si eseguono con una lettera che non ha in genere nessun significato logico per il programmatore, e poi usano tutte le combinazioni ctl- alt- shift- meta- esistenti. Sicuramente nessun Vero Programmatore considerera' mai l'utilizzo di un editor tipo Word.] In effetti il concetto di WYSIWYG (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). Insom- ma, l'editor perfetto e' il TECO. Alcuni hanno osservato che una lina 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. Alcu- ni Veri Programmatori utlizzano lo Zap stesso come editor, 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' sem- pre 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 ulte- riori 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 reperibili- ta'. [NdE: Ci credo, qualunque persona con un minimo di conoscenza del lavoro dei traduttori farebbe cosi'...] * Il Vero Programmatore non colleziona libri di raccolte di algoritmi. Questo perche' e' piu' lento cercare l'algoritmo in 3000 pagine di manuale che riscriverlo al volo. * Il Vero Programmatore non ha bisogno di manuali sull'assem- bler, 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 la compongono NON si trovano le informazioni che a lui ser- vono. Per questo la documentazione viene generalmente restituita intonsa, a meno che qualche mangia Quiche nel frattempo non l'abbia presa per fotocopiarla. * Il Vero Programmatore sa che in tutti i casi le informazioni che cerchi sono SEMPRE o nel libro che hai appena prestato all'amico oppure in quello che ha mangiato il cane. * Da tutto questo si deduce che su una persona ha nelle vici- nanze del terminale piu di 5 manuali ci sono delle forti probabili- ta' che NON sia un Vero Programmatore. Alcuni Tool NON usati da un Vero Programmatore: * Preprocessori di linguaggio. [NdE: e a che servono? I lin- guaggi hanno gia' tutti i costrutti necessari] * Traduttori di linguaggio. [NdE: e a che servono? gli unici veri linguaggi sono C e FORTRAN. Ed e` inutile usarne altri...] * Full Screen Debugger a livello sorgente. Il Vero Programmato- re 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, non ne varrebbe la pena. 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 decritta- re 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 gio- co, 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 un angolo parlando di Sistemi Operativi, mentre di fianco a loro passa- no ragazze che si fermano, ascoltano per alcuni secondi e poi, dato che non capiscono una parola, se ne vanno. A volte un Vero Program- matore inncontra 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. L'HABITAT DEL VERO PROGRAMMATORE -------------------------------- Dal momento che un vero programmatore e', per l'azienda che lo usa, generalmente molto costoso, vediamo come far per farlo rendere al meglio sul posto di lavoro: Il Vero Programmatore vive davanti ad uno o piu' monitor, at- torno, sopra, dietro e sotto questi terminali si trovano generalmen- te 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. * 6 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'En- terprise stampato con una vecchia stampante a margherita. * Sparsi per terra ci sono pacchetti vuote 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 compi- lava il programma, ma purtroppo il diffondersi di computer e perife- riche 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 programma, 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 prepa- rare 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 que- sta 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 servi- ranno solo ad altre tre persone al mondo oltre a lui. REFERENZE --------- [1] Feirstein, B., "Real Men don't Eat Quiche", New York, Pocket Books, 1982. [2] Wirth, N., "Algorithms + Data Structures = Programs", Pren- tice Hall, 1976. L'idea originale: [0] sdcarl!lin, "Real Programmers", UUCP-net, Thu Oct 21 16:55:16 1982 NOTE E AVVERTENZE ----------------- Come si vede dalla data sopra il file e' una traduzione ed un adattamento di un file del 21 ottobre 1982 [NdE: con le mie chiose... sono sempre stato molto pieno di me]. Se qualcuno volesse il testo originale e' disponibile sul mio BBS. Saluti a tutti <^_^>