Sei un vero programmatore? Scoprilo leggendo questo documento!! Il vero programmatore Tornando indietro ai vecchi e gloriosi giorni dell'informatica primordiale= =20 era relativamente facile distinguere tra veri uomini e ragazzini (nella=20 letteratura classica [1] la distinzione =E8 tra "veri uomini" e= "mangia-quiche"). Durante quei tempi i Veri Uomini erano gli unici che si intendevano di=20 computer, gli altri (i ragazzini o "mangiatori di quiche") erano quelli che= =20 di computer non se ne intendevano... I Veri Uomini dicevano cose come "DO 10 I=3D1,10" o "ABEND" (ovviamente=20 parlando in lettere maiuscole, mi sembra ovvio), mentre il resto della=20 gente diceva semplicemente che i computer erano cose troppo complicate per= =20 loro... (sempre il lavoro [1] dice appunto che non esistono cose troppo complicate= =20 per il vero uomo...). Ma, come in tutte le cose, i tempi cambiano, adesso viviamo in tempi in cui= =20 anche le vecchiette hanno dei computer dentro i loro forni a microonde, in= =20 cui qualunque Vero Uomo pu=F2 essere battuto da un ragazzino di 12 anni in= =20 qualunque videogioco, in cui chiunque pu=F2 comperare, usare e capire un=20 computer. Il Vero Programmatore rischia di intraprendere la via dell'estinzione,=20 sopraffatto da universitari che basano la loro vita su Mouse ed Icone... E' perci=F2 necessario stabilire una netta distinzione tra Il Vero=20 Programmatore ed un universitario giocatore di Pac-Man... Se questa distinzione sar=E0 chiara questi giovani inesperti potranno avere= =20 un modello guida, un padre spirituale a cui ispirarsi. Inoltre sar=E0 possibile spiegare ai datori di lavoro perch=E9 non =E8 ne=20 necessario ne giusto sostituire dei Veri Programmatori con dei giocatori di= =20 Pac Man, anche se il risparmio sugli stipendi sarebbe considerevole... Linguaggi Il sistema pi=F9 rapido e sicuro per distinguere un Vero=20 programmatore dal resto del mondo =E8 considerare il linguaggio che usa: il= =20 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=20 Quiche e NON un Vero Programmatore. Ad un Vero Programmatore non servono tutte le strutture ed i meccanismi del= =20 pascal, un Vero Programmatore pu=F2 essere felice con un perforatore di=20 schede o un terminale a 1200 baud, un C a standard K&R (ANSI... a che serve, il K&R =E8 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=20 processa numeri in C * Il Vero Programmatore manipola stringhe in C * Il=20 Vero Programmatore elabora programmi di IA in C * Il Vero Programmatore fa= =20 contabilit=E0 in C * Il Vero Programmatore fa TUTTO in C Se per caso il C= non=20 fosse sufficiente il Vero Programmatore lavorer=E0 in assembler, se neppure= =20 questo fosse sufficiente allora il lavoro non =E8 fattibile, ma la cosa =E8= =20 impossibile, un Vero Programmatore in C ed assembler pu=F2 fare TUTTO, per= =20 definizione. Programmazione Strutturata Gli accademici negli ultimi anni hanno=20 stabilito, dall'alto delle loro cattedre, che un programma =E8 pi=F9= facilmente=20 leggibile se il programmatore utilizza particolari tecniche, strutture e=20 costrutti. Ovviamente essi non sono d'accordo su quali questi costrutti e queste=20 tecniche precisamente siano, e perci=F2 le loro teorie sono discordanti ed= =20 erratiche. In questo modo solo alcuni mangia-Quiche si lasciano convincere dai loro=20 assiomi. Un tipico lavoro del mondo reale (e non un lavoro teorico da universit=E0) = =E8=20 di prendere un sorgente di 100.000 o 200.000 linee e farlo andare il doppio= =20 pi=F9 veloce. In questo caso qualunque Vero Programmatore vi potr=E0 dire che la=20 programmazione strutturata non serve a nulla, quello che in realt=E0 serve = =E8=20 del talento.... Alcune rapide considerazioni del Vero Programmatore sulla programmazione=20 strutturata: * Il Vero Programmatore non ha paura di usare GOTO * Il Vero Programmatore= =20 pu=F2 scrivere un ciclo DO lungo 5 pagine senza fare confusione. * Il Vero Programmatore usa i costrutti CASE basati su calcoli aritmetici,= =20 essi rendono un programma pi=F9 divertente. * Il Vero Programmatore scrive del codice automodificante, soprattutto se=20 questo pu=F2 salvare 20 nanosecondi all'interno di un ciclo. * Il Vero Programmatore non ha bisogno di commenti, il codice =E8 gi=E0=20 autoesplicante a sufficienza. Dopo aver parlato di programmazione strutturata si =E8 anche parlato molto= di=20 strutture di dati. Tipi di dati astratti, stringhe, liste e chi pi=F9 ne ha pi=F9 ne metta... Wirth (il mangiatore di Quiche menzionato poco sopra) ha scritto un intero= =20 libro [2] tentando di dimostrare che si pu=F2 scrivere un intero programma= =20 basandosi solo sulle strutture di dati. Come ogni Vero Programmatore sa invece l'unica struttura che serve=20 VERAMENTE =E8 l'array, dato che tutti gli altri tipi di dato altro non sono= =20 che sottoinsieme limitati di questi... e dato che sono limitati egli usa solo puntatori, soprattutto se questi=20 rendono possibile bombare irrimediabilmente il computer, se no dove=20 starebbe il divertimento???? Sistemi Operativi Che SO usa un Vero=20 Programmatore ??? Unix ??? Noooo, Unix =E8 qualcosa di simile a quello che= si=20 aspetta un vero Hacker, dato che qualunque Vero Programmatore non trova=20 alcun divertimento nel tentare di indovinare come cavolo il comando PRINT=20 viene chiamato questa settimana... La gente non fa lavori seri su Unix, lo usano soprattutto per fare=20 adventure, modificare Rogue e mandarsi il tutto via UUCP. MS-DOS ??? Gi=E0' meglio, crittico quel tanto che basta, facile da=20 modificare, se ce ne fosse necessit=E0, facile da bombare, con tante cose=20 sconosciute e strane... Una cosa sicuramente possiamo dire: Il Vero Programmatore non usa il mouse= =20 e le icone, infatti il Vero Programmatore non capisce perch=E9 mai per=20 compilare un programma uno debba staccare le mani dalla tastiera e cliccare= =20 su un menu quando =E8 tanto semplice battere : CL pippo.c -k -iC:all -q -w= -e=20 -r +t -y +cvb +f -g +g +p =3Dl /f /a /s In ogni caso il Vero Programmatore= ha=20 una sola nostalgia: il sistema IBM OS/370. Questo era infatti il SO che qualunque Vero Programmatore vorrebbe veder=20 implementato su TUTTI i computer del mondo. Un Vero Programmatore sa che se vede comparire l'errore IJK3051 basta=20 andare a vedere nel manuale del JCL per capire cosa =E8 successo... Un Grande Programmatore poi sapr=E0 i codici a memoria, mentre un= Grandissimo=20 Programmatore potr=E0 trovare l'errore osservando 6 mega di dump senza=20 neppure usare un calcolatore esadecimale... L'OS/370 =E8 VERAMENTE un SO potente, infatti =E8 possibile distruggere= giorni=20 e giorni di lavoro con la semplice pressione di un tasto. Questo incoraggia l'attenzione sul lavoro e forma una mentalit=E0 che= servir=E0=20 in futuro, quando per distruggere giorni di lavoro saranno sufficienti tre= =20 tasti... Tool di programmazione Quali tool di programmazione necessita realmente un= =20 Vero Programmatore ??? In effetti, come detto prima sono sufficienti un=20 terminale a 1200 baud o un lettore di schede perforate, ma anche una=20 semplice tastiera esadecimale sarebbe gi=E0' pi=F9 che sufficiente. Ma purtroppo adesso i computer non hanno pi=F9 tastiere esadecimali, come=20 pure non hanno pi=F9 quei magnifici pannelli frontali pieni di lucine e=20 tastini che facevano tanto futuro... I primi veri programmatori sapevano a memoria l'intero settore di boot=20 dell'hard disk, e lo potevano iscrivere a memoria ogniqualvolta che il loro= =20 programma lo rovinava... La leggenda narra che Seymore Cray (creatore del Cray I) scrisse il SO del= =20 primo CDC7600 usando il pannello frontale del computer la prima volta che=20 questo venne acceso. Senza bisogno di dirlo Seymore era un VeroProgrammatore. Uno dei migliori Veri Programmatori che abbia mai conosciuto =E8 un=20 sistemista della Texas Instrument. Una volta rispose alla telefonata di un cliente a cui si era bombato il=20 sistema durante il salvataggio del lavoro. Il Vero Programmatore rimise a posto tutto facendo scrivere le istruzioni=20 per terminare il lavoro di I/O sul pannello frontale (allora c'erano=20 ancora), riscrivendo i dati rovinati in esadecimale e facendosi dire i=20 risultati per telefono. La morale della storia =E8 che se un tastierino ed una stampante possono far= =20 comodo un Vero Programmatore pu=F2 arrangiarsi anche con solo un telefono... Un altro tool fondamentale =E8 un buon text editor. Molti dicono che il migliore sia quello della Xerox di Palo Alto, ma, come= =20 gi=E0' detto, il Vero Programmatore non parla al suo computer attraverso un= =20 mouse. Altri preferiscono EMACS o VI, ma in effetti il concetto di WYSYWYG (quello= =20 che vedi =E8 quello che ottieni) si applica ai computer malissimo, cosi'= come=20 si applica alle donne... Quello che un vero programmatore vuole =E8 in effetti qualcosa di pi=F9=20 complesso, che implementi la filosofia del "You asked for it, you got it=20 !!!" (YAFIYGI, avrai solo quello che chiedi). Insomma, l'editor perfetto =E8 il TECO. Alcuni hanno osservato che una linea di comandi per TECO assomiglia molto=20 di pi=F9 al rumore sulle linee telefoniche che ad una linea di comandi, ed= in=20 effetti uno dei giochi pi=F9 divertenti da fare =E8 quello di scrivere il=20 proprio nome sulla linea di comando e vedere cosa succede... Inoltre ogni piccolo errore avr=E0 come risultato quello di distruggere il= =20 vostro programma, o, peggio, di introdurre subdoli errori che saranno in=20 seguito difficilmente rintracciabili... Per questa ragione un Vero Programmatore =E8 molto riluttante a editare un= =20 programma funzionante per dargli gli ultimi ritocchi. E sempre per questa ragione un Vero Programmatore trova pi=F9 semplice fare= =20 le modifiche finali utilizzando un programma come lo Zap. Alcuni Veri Programmatori utilizzano lo Zap stesso come editor, ma =E8 forse= =20 esagerato... Procedendo su questa linea il risultato =E8 che tra il codice sorgente e=20 quello che in effetti c'=E8 scritto su disco c'=E8 una discrepanza sempre=20 maggiore, con il risultato che il lavoro =E8 sempre pi=F9 sicuro, perch=E9= solo=20 un Vero Programmatore potr=E0 lavorarci sopra in modo proficuo, nessun=20 mangiatore di Quiche potr=E0 fare manutenzione, minimizzando cosi' i rischi= =20 di malfunzionamenti ulteriori del programma. Questa =E8 SICUREZZA.... Altri tool importanti sono le documentazioni su cui il vero programmatore=20 basa gran parte del suo lavoro: * Il Vero Programmatore non legge mai i=20 manuali introduttivi, bastano ed avanzano i Reference Manual. * Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo =E8= =20 inutile e deviante. * Il Vero Programmatore se possibile legge i manuali in lingua originale,=20 anche se questo a volte pone dei problemi di reperibilit=E0. * Il Vero Programmatore non colleziona libri di raccolte di algoritmi. Questo perch=E9 e pi=F9 lento cercare l'algoritmo in 3000 pagine di manuale= che=20 scriverlo di getto. * Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono=20 sufficienti i data sheet dei microprocessori * Il Vero Programmatore non=20 scrive MAI i manuali dei programmi che fa, non ne ha il tempo materiale. * Il Vero Programmatore generalmente ha da qualche parte la documentazione= =20 completa del SO su cui lavora, pubblicata dalla casa che ha fatto il SO, ma= =20 sa che SICURAMENTE nelle 3500 pagine che in media compongono la=20 documentazione non trover=E0 quello che cerca. Se nelle vicinanze del terminale sono presenti pi=F9 di 5 manuali ci sono=20 delle forti probabilit=E0 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 =E8 in grado di capire quello che dice il Debug... * Compilatori ottimizzanti. L'ottimizzazione del programma scritto dal Vero Programmatore =E8 gi=E0' il= =20 massimo, e perci=F2 altre modifiche non farebbero altro che peggiorare la=20 situazione. Il lavoro del vero programmatore In generale il Vero Programmatore non fa=20 lavori semplici come gestione di indirizzari o programmi gestionali, ecco=20 alcuni dei lavori pi=F9 adatti ai veri programmatori: * Il Vero= Programmatore=20 scrive programmi per la simulazione di una guerra termonucleare per= l'esercito. * Il Vero Programmatore lavora per lo spionaggio, per decrittare le=20 trasmissioni in cifra del nemico. * E' in gran parte dovuto al lavoro dei Veri Programmatori che gli=20 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= =20 molto ben pagati. Il vero programmaore mentre gioca Il generale il Vero Programmatore gioca=20 nello stesso modo in cui lavora: con i computer. In generale lo stesso lavoro =E8 un gioco, ed alla fine del mese il Vero=20 Programmatore =E8 sempre abbastanza stupito di ricevere un compenso per=20 quello che, a tutti gli effetti, =E8 per lui un divertimento. Anche se non lo dir=E0 mai a voce alta... Occasionalmente il Vero Programmatore uscir=E0 dall'ufficio per prendere una= =20 boccata d'aria e farsi una birra, ecco alcuni sistemi per riconoscere un=20 Vero Programmatore fuori dal suo posto di lavoro: * Ad un party i Veri=20 Programmatori sono quelli che stanno in angolo parlando di Sistemi=20 Operativi, mentre di fianco a loro passano ragazze che si fermano,=20 ascoltano per alcuni secondi e poi, dato che non capiscono una parola, se=20 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 =E8 quello che controlla= =20 gli schemi delle squadre basandosi su quelli disegnati dal suo programma su= =20 di un foglio 11x14. * Sulla spiaggia il Vero Programmatore =E8 quello che disegna flow chart=20 sulla sabbia. L'habitat del vero programmatore Dal momento che un vero programmatore =E8,= =20 per l'azienda che lo usa, generalmente molto costoso, vediamo come far per= =20 farlo rendere al meglio sul posto di lavoro: Il Vero Programmatore vive=20 davanti ad uno o pi=F9 monitor, attorno, sopra, dietro e sotto questi=20 terminali si trovano generalmente le seguenti cose: * I listati di TUTTI i= =20 programmi a cui il Vero Programmatore ha mai lavorato, accatastati, in=20 ordine pi=F9 o meno cronologico, su ogni superficie piatta disponibile= intorno. * 6 o pi=F9 tazze di caff=E8, quasi sempre fredde, ed alcune con alcuni=20 mozziconi di sigaretta galleggianti. * Attaccato al muro c'=E8 un ritratto di Spock con in mano l' enterprise=20 stampato con una vecchia stampante a margherita. * Sparsi per terra ci sono pacchetti vuote di noccioline e vaccate simili. * In generale un Vero Programmatore pu=F2 lavorare anche 30 o 40 ore di= fila,=20 anzi, di solito lavora molto megli sotto sforzo. Fino a qualche tempo fa si concedeva dei pisolini mentre il computer=20 compilare il programma, ma purtroppo il diffondersi di computer e=20 periferiche veloci ha reso questa pratica difficile. In generale un Vero Programmatore se ha 5 settimane per terminare un=20 programma passa le prime 4 cincischiando con aspetti secondari, ma=20 interessanti, del programma, mentre il grosso del lavoro viene fatto in una= =20 settimana di lavoro ininterrotto. Questo provoca sempre grosse preoccupazioni al principale che teme sempre=20 che il lavoro non sia mai pronto in tempo, ed offre al Vero Programmatore=20 una buona scusa per non scrivere la documentazione. Varie ed eventuali * Il Vero Programmatore a volte pu=F2 scordare il nome=20 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= =20 automaticamente a qualunque layout. * Il Vero Programmatore sa che anche avendo 8 mega di RAM questa non sar=E0= =20 mai abbastanza, e perci=F2 tenta di fare programmi piccoli. * Il Vero Programmatore tiene sempre i backup da quando ha dovuto=20 riscrivere 327000 linee di assembler 68020. * Il Vero Programmatore scrive programmi di pubblico dominio, anche se di=20 solito sono programmi talmente specialistici che serviranno solo ad altre=20 tre persone al mondo oltre a lui. Altri corollari * Il Vero Programmatore si trovava a suo agio con il=20 Fortran in quanto consentiva la programmazione a spaghetti senza= limitazioni. * Va comunque detto che il Vero Programmatore =E8 in grado di scrivere=20 programmi a spaghetti in qualsiasi linguaggio. In questo senso, il C va a pennello per la sua capacit=E0 di scrivere=20 programmi Write-only che nessuno, a parte un altro Vero Programmatore, sar= =E0=20 mai in grado di decodificare.[M] * Il Vero Programmatore non mette mai=20 commenti perch=E9 a suo parere il codice =E8 autodocumentante. Questo vale anche per i dump esadecimali di codice assembler. * Nel tempo libero, il Vero Programmatore va abbastanza spesso in=20 discoteca, ma si limita ad osservare il gioco di luci. Ultimamente, viene stranamente attratto dal terminale del controllore laser. * Le Vere Programmatrici esistono in ragione di 1 per ogni 256 Vero=20 Programmatori, come tale la probabilit=E0 di incontrarne una =E8= estremamente=20 bassa. * Il Vero Programmatore ha scarsa considerazione degli utenti, ritenuti ad= =20 un livello troppo basso. La probabilit=E0 di trovare un utente competente =E8 stimata inferiore a= quella=20 di trovare una Vera Programmatrice. ErrataCorrige * l Vero Programmatore non usa commenti: se e` stato=20 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, =E8 il vero sistema operativo=20 contemporaneo per il VP, =E8 l'unico che consente ancora di azzerare un=20 intero file system con un comando di 7 lettere blank compresi: rm -r / *=20 OS/370 era seriamente migliore, ma non bastava battere un tasto per erdere= =20 tutto, era sufficiente sbagliare la posizione di un blank. REFERENZE Referenze [1] Feirstein, B., "Real Men don't Eat Quiche", New=20 York, Pocket Books, 1982. [2] Wirth, N., "Algorithms + Data structures =3D Programs", Prentice Hall,= 1976. [0] sdcarl!lin, L'idea originale:"Real Programmers", UUCP-net, Thu Oct 21=20 16:55:16 1982 =FF Questo documento ci =E8 pervenuto da una email. Un pinguino al giorno leva il bug di torno My personal homepage Lavarone homepage: Linuxtrent http://continue.to/fred http://www.lavarone.com=20 http://linuxtrent.grinta.net/ -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx