Il Tao della Programmazione
Creato da Geoffrey James
Trascritto da Duke Hillard
Trasmesso da Anupam Trivedi, Sajitha Tampi, and Meghshyam Jagannath
Portato in HTML e sistemato da Kragen Sittler
Tradotto da Devil Master
Ultima modifica 2012-01-18 o precedente
Tabella dei Contenuti
- Il Vuoto Silenzioso
- Gli Antichi Maestri
- Progettazione
- Scrittura
- Manutenzione
- Management
- Saggezza Corporativa
- Hardware e Software
- Epilogo
Libro 1 - Il Vuoto Silenzioso
Così parlò il maestro programmatore:
``Quando avrete imparato a estrarre il codice di errore dal trap frame, potrete andare.''
1.1
Qualcosa di misterioso si è formato, nato nel vuoto silenzioso. In attesa, solo e immobile, è allo stesso tempo fermo e in perenne movimento. E' la sorgente di tutti i programmi. Non conosco il suo nome, così lo chiamerò il Tao della Programmazione.
Se il Tao è grande, il sistema operativo è grande. Se il sistema operativo è grande, il compilatore è grande. Se il compilatore è grande, l'applicazione è grande. L'utente è soddisfatto e nel mondo nasce armonia.
Il Tao della Programmazione scorre via lontano e ritorna con il vento del mattino.
1.2
Il Tao ha dato vita al linguaggio macchina. Il linguaggio macchina ha dato vita all'assemblatore.
L'assemblatore ha dato vita al compilatore. Ora ci sono diecimila linguaggi.
Ogni linguaggio ha il suo scopo, per quanto umile sia. Ogni linguaggio esprime lo Yin e Yang del software. Ogni linguaggio ha il suo posto nel Tao.
Ma non programmate in COBOL se riuscite a evitarlo.
1.3
All'inizio c'era il Tao. Il Tao ha dato vita allo Spazio e al Tempo. Dunque, lo Spazio e il Tempo sono lo Yin e lo Yang della programmazione.
I programmatori che non comprendono il Tao sono sempre a corto di tempo e spazio per i loro programmi. I programmatori che comprendono il Tao hanno sempre abbastanza tempo e spazio per raggiungere il loro scopo.
Come potrebbe essere altrimenti?
1.4
Il programmatore saggio sente parlare del Tao e lo segue. Il programmatore medio sente parlare del Tao e lo cerca. Il programmatore stupido sente parlare del Tao e lo deride.
Se non fosse per quelle risate, il Tao non esisterebbe.
I suoni più acuti sono i più difficili da udire. Andare avanti è un modo per ritirarsi. Un grande talento si mostra tardi nella vita. Anche un programma perfetto ha ancora bug.
Libro 2 - Gli Antichi Maestri
Così parlò il maestro programmatore:
``Dopo tre giorni senza programmare, la vita diventa priva di significato.''
2.1
Gli antichi programmatori erano misteriosi e profondi. Non possiamo sondare i loro pensieri, così tutto quello che possiamo fare è descrivere il loro aspetto.
Attenti, come una volpe che attraversa un corso d'acqua. All'erta, come un generale nel campo di battaglia. Gentili, come un'albergatrice che saluta i suoi ospiti. Semplici, come blocchi di legno non lavorato. Opachi, come pozze nere in caverne buie.
Chi può rivelare i segreti del loro cuore e della loro mente?
La risposta esiste solo nel Tao.
2.2
Il Grande Maestro Turing una volta sognò di essere una macchina. Quando si svegliò esclamò:
``Non so se sono Turing che sogna di essere una macchina, o una macchina che sogna di essere Turing!''
2.3
Un programmatore di una grossa ditta di software andò a una conferenza e poi tornò per fare rapporto al suo manager, dicendo: ``Che razza di programmatori lavorano per le altre ditte? Si comportavano male e non erano interessati al loro aspetto. Avevano i capelli lunghi e non curati e indossavano abiti vecchi e stropicciati. Hanno rovinato la sala degli ospiti, e facevano rumori maleducati durante la mia presentazione.''
Il manager disse: ``Non avrei mai dovuto mandarti alla conferenza. Quei programmatori vivono oltre il mondo fisico. Considerano la vita assurda, una coincidenza accidentale. Vanno e vengono senza conoscere limitazioni. Senza preoccupazioni, vivono solo per i loro programmi. Perchè dovrebbero preoccuparsi delle convenzioni sociali?
``Sono vivi all'interno del Tao.''
2.4
Un novizio chiese al Maestro: ``Qui c'è un programmatore che non organizza, documenta nè testa i suoi programmi. Eppure tutti quelli che lo conoscono lo considerano uno dei migliori programmatori del mondo. Perchè?''
Il Maestro rispose: ``Quel programmatore padroneggia il Tao. E' andato oltre la necessità di organizzazione; non si arrabbia quando il sistema va in crash, ma accetta l'universo senza preoccupazione. E' andato oltre la necessità di documentazione; non si preoccupa più se qualcun altro vede il suo codice. E' andato oltre la necessità di testare i suoi programmi; ognuno di essi è perfetto in sè stesso, sereno ed elegante, il loro scopo è palese. E' veramente penetrato nel mistero del Tao.''
Libro 3 - Progettazione
Così parlò il maestro programmatore:
``Quando il programma viene testato, è troppo tardi per fare modifiche nel progetto.''
3.1
C'era una volta un uomo che andò a una fiera di computer. Il primo giorno, entrando, disse alla guardia sulla porta:
``Io sono un grande ladro, famoso per le mie imprese di taccheggio. Siate preparati, perchè questa fiera non sfuggirà alle mie brame.''
Questo discorso infastidì molto la guardia, perchè c'erano milioni di dollari di attrezzature all'interno, così osservò attentamente l'uomo. Ma l'uomo si limitava a girovagare da padiglione a padiglione, canticchiando sommessamente.
Quando l'uomo se ne andò, la guardia lo portò da parte e perquisì i suoi abiti, ma non trovò nulla.
Il giorno successivo della fiera, l'uomo tornò e infastidì la guardia dicendo: ``Ieri sono sfuggito con un vasto bottino, ma oggi sarà ancora meglio.'' Così la guardia iniziò a tenerlo d'occhio più attentamente, ma senza risultato.
L'ultimo giorno della fiera, la guardia non poteva più trattenere la sua curiosità. ``Signor ladro,'' disse, ``sono così perplesso da non riuscire a capacitarmi. Per favore mi illumini. Che cos'è che sta rubando?''
L'uomo sorrise. ``Sto rubando idee'', disse.
3.2
C'era una volta un maestro programmatore che scriveva programmi non strutturati. Un programmatore novizio, cercando di imitarlo, iniziò anche lui a scrivere programmi non strutturati. Quando il novizio chiese al maestro di valutare i suoi progressi, il maestro lo rimproverò per aver scritto programmi non strutturati, dicendo: ``Ciò che è appropriato per il maestro non è appropriato per l'allievo. Devi comprendere il Tao prima di trascendere la struttura.''
3.3
C'era una volta un programmatore che lavorava alla corte del Signore di Wu. Il signore chiese al programmatore: ``Che cosa è più facile da progettare: un programma di contabilità o un sistema operativo?''
``Un sistema operativo'', rispose il programmatore.
Il signore fece un'espressione di incredulità. ``Sicuramente un programma di contabilità è banale in confronto alla complessità di un sistema operativo'', disse.
``Non è così'', disse il programmatore, ``progettando un programma di contabilità, il programmatore opera da mediatore tra persone che hanno idee diverse: come deve operare, come devono apparire i suoi rapporti, e come deve conformarsi alle leggi sulle tasse. Invece, un sistema operativo non è limitato dalle apparenze esterne. Quando progetta un sistema operativo, il programmatore cerca l'armonia più semplice tra macchina e idee. Ecco perchè un sistema operativo è più facile da progettare.''
Il Signore di Wu annuì e sorrise. ``Sono d'accordo su tutto, ma quale è più facile da debuggare?''
Il programmatore non rispose.
3.4
Un manager andò dal maestro programmatore e gli mostrò il documento dei requisiti per una nuova applicazione. Il manager chiese al maestro: ``Quanto tempo servirà per progettare questo sistema se gli assegno cinque programmatori?''
``Servirà un anno,'' disse prontamente il maestro.
``Ma questo sistema ci serve immediatamente o anche prima! Quanto tempo servirà se gli assegno dieci programmatori?''
Il maestro programmatore corrugò la fronte. ``In quel caso, serviranno due anni.''
``E se gli assegno cento programmatori?''
Il maestro programmatore alzò le spalle. ``Allora il progetto non sarà mai completato,'' disse.
Libro 4 - Scrittura
Così parlò il maestro programmatore:
``Un programma scritto bene è il suo stesso paradiso; un programma scritto male è il suo stesso inferno.''
4.1
Un programma dovrebbe essere leggero e agile, le sue subroutine collegate come una collana di perle. Lo spirito e l'intento del the programma dovrebbe essere mantenuto attraverso tutto il suo codice. Non ci dovrebbe essere nè troppo poco nè troppo, nè cicli che non servono nè variabili inutili, nè mancanza di struttura nè eccessiva rigidità.
Un programma dovrebbe seguire la `Legge del Minor Stupore'. Cosa dice questa legge? Semplicemente che il programma dovrebbe sempre rispondere all'utente nel modo che lo stupisce di meno.
Un programma, non importa quanto complesso, dovrebbe comportarsi come una singola unità. Il programma dovrebbe essere diretto dalla logica interiore anziché dall'apparenza esteriore.
Se il programma manca di questi requisiti, sarà in uno stato di disordine e confusione. Il solo modo per correggerlo è riscrivere il programma.
4.2
Un novizio chiese al maestro: ``Ho un programma che a volte gira e a volte no. Ho seguito le regole della programmazione, eppure sono totalmente sconcertato. Qual è la ragione per questo?''
Il maestro rispose: ``Sei confuso perchè non capisci il Tao. Solo uno stupido si aspetta un comportamento razionale da altri umani. Perchè tu te lo aspetti da una macchina costruita da umani? I computer simulano il determinismo; solo il Tao è perfetto.''
``Le regole della programmazione sono transitorie; solo il Tao è eterno. Quindi devi contemplare il Tao prima di ricevere l'illuminazione.''
``Ma come farò a sapere quando ho ricevuto l'illuminazione?'' chiese il novizio.
``Allora il tuo programma girerà correttamente'', rispose il maestro.
4.3
Un maestro stava spiegando la natura del Tao a uno dei suoi allievi. ``Il Tao è racchiuso in tutto il software - non importa quanto sia insignificante'', disse il maestro.
``Il Tao è in un calcolatore tascabile?'' chiese l'allievo.
``Lo è'' fu la risposta.
``Il Tao è in un videogioco?'' continuò l'allievo.
``E' anche in un videogioco'' disse il maestro.
``E il Tao è nel DOS per un personal computer?''
Il maestro tossì e si spostò leggermente sulla sedia. ``La lezione è finita per oggi'' disse.
4.4
Il programmatore del Principe Wang stava scrivendo software. Le sue dita danzavano sulla tastiera. Il programma venne compilato senza errori, girando come una brezza gentile.
``Eccellente!'' esclamò il Principe, ``La tua tecnica è perfetta!''
``Tecnica?'' disse il programmatore voltandosi dal suo terminale, ``Ciò che seguo è il Tao - oltre tutte le tecniche! Quando avevo appena iniziato a programmare vedevo davanti a me l'intero problema in un'unica massa. Dopo tre anni non vedevo più questa massa. Invece, usavo le subroutine. Ma ora non vedo nulla. Il mio intero essere esiste in un vuoto informe. I miei sensi sono inattivi. Il mio spirito, libero di lavorare senza progetti, segue il suo stesso istinto. In breve, il mio programma si scrive da solo. Certo, a volte ci sono problemi difficili. Li vedo arrivare, rallento, osservo in silenzio. Poi modifico una singola linea di codice e le difficoltà svaniscono come nuvolette di fumo. Poi compilo il programma. Sto seduto immobile e lascio che la gioia del lavoro riempia il mio essere. Chiudo gli occhi per un momento e poi mi disconnetto.''
Il Principe Wang disse, ``Fossero tutti così saggi, i miei programmatori!''
Libro 5 - Manutenzione
Così parlò il maestro programmatore:
``Anche se un programma dovesse essere lungo tre righe, un giorno dovrà essere mantenuto.''
5.1
A una porta ben usata non serve olio sui cardini. Un torrente che scorre in fretta non diventa stagnante. Nè il suono nè i pensieri possono viaggiare attraverso il vuoto. Il software marcisce se non viene usato.
Questi sono grandi misteri.
5.2
Un manager chiese a un programmatore quanto tempo gli sarebbe servito per finire il programma a cui stava lavorando. ``Sarà finito domani'', rispose prontamente il programmatore.
``Penso che tu sia irrealistico'', disse il manager, ``Sul serio, quanto tempo servirà?''
Il programmatore pensò un momento. ``Ho alcune caratteristiche che vorrei aggiungere. Serviranno almeno due settimane'', disse infine.
``Anche così è un'aspettativa troppo grossa'' insistette il manager, ``Sarò soddisfatto se mi dici semplicemente quando il programma sarà completo.''
Il programmatore accettò.
Diversi anni dopo, il manager andò in pensione. Mentre andava al pranzo di pensionamento, scoprì il programmatore esausto, addormentato al terminale. Aveva lavorato tutta la notte a quello stesso programma.
5.3
A un programmatore novizio venne richiesto di scrivere un semplice programma finanziario.
Il novizio lavorò furiosamente per molti giorni, ma quando il suo maestro valutò il suo programma, scoprì che conteneva un editor di schermate, un set di routine grafiche generalizzate, un'interfaccia di intelligenza artificiale, ma non la benché minima menzione di qualcosa di finanziario.
Quando il maestro chiese spiegazioni, il novizio si indignò. ``Non essere così impaziente'', disse, ``Includerò la roba finanziaria, prima o poi.''
5.4
Un buon contadino trascura un raccolto che ha piantato? Un buon insegnante trascura anche lo studente più umile? Un buon padre permette a un solo figlio di morire di fame? Un buon programmatore si rifiuta di mantenere il suo codice?
Libro 6 - Management
Così parlò il maestro programmatore:
``Che i programmatori siano molti e i manager pochi - allora tutto sarà produttivo.''
6.1
Quando i manager tengono riunioni infinite, i programmatori scrivono giochi. Quando i contabili parlano di profitti trimestrali, il budget dello sviluppo sta per essere tagliato. Quando gli scienziati più vecchi parlano del cielo azzurro, stanno per arrivare le nuvole.
Davvero, questo non è il Tao della Programmazione.
Quando i manager prendono impegni, i giochi vengono ignorati. Quando i contabili fanno progetti a lunga scadenza, stanno per tornare l'armonia e l'ordine. Quando gli scienziati più vecchi prendono in mano i problemi, i problemi stanno per essere risolti.
Davvero, questo è il Tao della Programmazione.
6.2
Perchè i programmatori non sono produttivi? Perchè il loro tempo è sprecato in riunioni.
Perchè i programmatori si ribellano? Perchè il management interferisce troppo.
Perchè i programmatori si dimettono uno per uno? Perchè sono esausti.
Lavorando per un management scadente, non danno più valore al loro lavoro.
6.3
Un manager stava per essere licenziato, ma un programmatore che lavorava per lui inventò un nuovo programma che divenne popolare e vendette bene. Come risultato, il manager mantenne il suo posto.
Il manager cercò di dare un compenso extra al programmatore, ma il programmatore lo rifiutò, dicendo, ``Ho scritto il programma perchè pensavo che fosse un concetto interessante, quindi non mi aspetto alcun premio.''
Il manager, sentendo questo, pensò: ``Questo programmatore, anche se ha una posizione di basso pregio, capisce bene il dovere proprio di un impiegato. Promuoviamolo alla posizione esaltata di consulente del management!''
Ma quando gli venne detto, il programmatore rifiutò nuovamente, dicendo, ``Io esisto per poter programmare. Se venissi promosso, non farei altro che sprecare il tempo di tutti. Posso andare ora? Ho un programma a cui sto lavorando."
6.4
Un manager andò dai suoi programmatori e disse loro: ``Riguardo alle vostre ore di lavoro: dovete essere entrati alle nove del mattino e uscire alle cinque del pomeriggio.'' Sentendo questo, tutti si arrabbiarono e alcuni si dimisero immediatamente.
Allora il manager disse: ``Va bene, in questo caso potete gestire da voi l'orario di lavoro, a patto che finiate in tempo i vostri progetti.'' I programmatori, ora soddisfatti, iniziarono a entrare in ufficio a mezzogiorno e lavorare fino a tarda notte.
Libro 7 - Saggezza Corporativa
Così parlò il maestro programmatore:
``Potete mostrare un programma a un dirigente, ma non potete renderlo un esperto di computer.''
7.1
Un allievo chiese al maestro: ``A oriente c'è una grande struttura ad albero che gli uomini chiamano `Sede della Ditta'. E' dilatata e sformata con vicepresidenti e contabili. Pubblica una moltitudine di promemoria, ognuno dei quali dice `Andate là!' o `Venite qua!' e nessuno sa cosa vogliono dire. Ogni anno vengono aggiunti nuovi nomi sui rami, ma tutti di nessuna utilità. Come può esistere un'entità così innaturale?"
Il maestro rispose: ``Tu percepisci questa immensa struttura e sei disturbato dal fatto che non ha uno scopo razionale. Non riesci a trarre sollazzo dalle sue infinite giravolte? Non godi della facilità di programmare senza problemi sotto i suoi ospitevoli rami? Perchè la sua inutilità ti infastidisce?''
7.2
A oriente c'è uno squalo che è più grande di tutti gli altri pesci. Si trasforma in un uccello le cui ali sono come nuvole che riempiono il cielo. Quando quest'uccello si muove da un capo all'altro della terra, porta un messaggio dalla Sede della Ditta. Questo messaggio lo fa cadere tra la moltitudine dei programmatori, come un gabbiano che lascia il suo marchio sulla spiaggia. Poi l'uccello monta in groppa al vento, e, con il cielo azzurro alle spalle, ritorna a casa.
Il programmatore novizio fissa meravigliato l'uccello, perchè non lo capisce. Il programmatore medio teme l'attivo dell'uccello, perchè ha paura del suo messaggio. Il programmatore esperto continua a lavorare al terminale, perchè non sa che l'uccello è venuto e andato via.
7.3
Il Mago della Torre d'Avorio portò la sua ultima invenzione dal maestro programmatore perchè la esaminasse. Il mago fece entrare una grande scatola nera nell'ufficio del maestro, mentre il maestro aspettava in silenzio.
``Questa è una workstation multiuso integrata e distribuita'', iniziò il mago, ``progettata ergonomicamente con un sistema operativo proprietario, linguaggi di sesta generazione, e numerose interfacce utente ultramoderne. Ai miei assistenti sono state necessarie diverse centinaia di anni-uomo per costruirla. Non è stupefacente?''
Il maestro sollevò leggermente le sopracciglia. ``E' davvero stupefacente'', disse.
``La Sede della Ditta ha ordinato'', continuò il mago, ``che tutti usino questa workstation come piattaforma per i nuovi programmi. Siete d'accordo?''
``Certamente'', rispose il maestro, ``La farò trasportare al centro dati immediatamente!'' E il mago tornò alla sua torre, molto compiaciuto.
Diversi giorni dopo, un novizio entrò nell'ufficio del maestro programmatore e disse, ``Non riesco a trovare il listato per il mio nuovo programma. Sa dove potrebbe essere?''
``Sì'', rispose il maestro, ``i listati sono impilati sulla piattaforma nel centro dati.''
7.4
Il maestro programmatore si muove da programma to programma senza paura. Nessun cambio di management può danneggiarlo. Non sarà licenziato, anche se il progetto è annullato. Perchè? E' tutt'uno con il Tao.
Libro 8 - Hardware e Software
Così parlò il maestro programmatore:
``Senza il vento, l'erba non si muove. Senza il software, l'hardware è inutile.''
8.1
Un novizio chiese al maestro: ``Vedo che una ditta informatica è molto più grande di tutte le altre. Torreggia sopra la concorrenza come un gigante tra i nani. Ognuna delle sue divisioni potrebbe includere un'intera azienda. Perchè è così?''
Il maestro rispose, ``Perchè fai domande così stupide? Quella ditta è grande perchè è grande. Se producesse solo hardware, nessuno lo comprerebbe. Se producesse solo software, nessuno lo userebbe. Se facesse solo manutenzione di sistemi, la gente la tratterebbe come un servo. Ma siccome combina tutte queste cose, la gente la considera una divinità! Senza cercare di sforzarsi, conquista senza fatica.''
8.2
Un giorno un maestro programmatore passò vicino a un novizio. Il maestro notò la preoccupazione del novizio con un videogioco portatile. ``Chiedo scusa'' disse, ``posso esaminarlo?''
Il novizio scattò in piedi e passò il dispositivo al maestro. ``Vedo che il dispositivo sostiene di avere tre livelli di gioco: Facile, Medio, e Difficile,'' disse il maestro. ``Eppure ogni dispositivo di questo tipo ha un altro livello di gioco, in cui il dispositivo non cerca di sconfiggere l'umano, nè di essere sconfitto dall'umano.''
``Dica, gran maestro'' implorò il novizio, ``Come si trova quest'opzione misteriosa?''
Il maestro gettò il dispositivo a terra e lo schiacciò sotto i piedi. E improvvisamente il novizio trovò l'illuminazione.
8.3
C'era una volta un programmatore che lavorava sui microprocessori. ``Guarda come mi trovo bene qui'' disse a un programmatore di mainframe venuto in visita, ``ho il mio sistema operativo e la mia memoria di massa. Non devo condividere le mie risorse con nessuno. Il software è autoconsistente e facile da usare. Perchè non abbandoni il tuo lavoro e non ti unisci a me qui?''
Il programmatore di mainframe allora iniziò a descrivere il suo sistema al suo amico, dicendo ``Il mainframe siede come un vecchio saggio che medita in mezzo al centro dati. I suoi dischi sono appoggiati uno accanto all'altro come un grande oceano di macchine. Il software è multisfaccettato come un diamante, e convoluto come una giungla primitiva. I programmi, ognuno dei quali è unico, attraversano il sistema come un rapido fiume. Ecco perchè sono felice dove sono.''
Il programmatore di microprocessori, sentendo ciò, rimase in silenzio. Ma i due programmatori rimasero amici per tutta la vita.
8.4
Hardware incontrò Software sulla strada per Changtse. Software disse: ``Tu sei lo Yin e io sono lo Yang. Se viaggiamo insieme diventeremo famosi e guadagneremo grandi somme di denaro.'' E così si incamminarono insieme, pensando di conquistare il mondo.
Poi incontrarono Firmware, che era vestito di stracci e camminava appoggiato a un bastone spinoso. Firmware disse loro: ``Il Tao sta oltre lo Yin e lo Yang. E' silenzioso e immobile come una pozza d'acqua. Non cerca la fama, quindi nessuno è al corrente della sua presenza. Non cerca la fortuna, perchè è completo in sè stesso. Esiste oltre lo spazio e il tempo.''
Software e Hardware, con vergogna, tornarono a casa loro.
Libro 9 - Epilogo
Così parlò il maestro programmatore:
``Ora potete andare.''