CyberLife
 

Descriviamo in questo capitolo CyberLife, una tecnologia di vita artificiale basata sull’applicazione di metafore biologiche a problemi di software-complexity. CyberLife si basa su un insieme di principi filosofici e asserzioni :
1. Pensare il computer come un contenitore per cyberspazio, pensare alla programmazione come alla creazione di macchine che popolano il cyberspazio.
2. Sciami di semplici oggetti interagiscono tra loro hanno maggiore potenza rispetto a quella che può fornire una singola struttura top-down, inoltre essi minimizzano esplosioni  combinatoriali.
3. La vita è una complessa rete di cicli feedback che permette al sistema di aggirarsi al limite del caos.
4. Il modo migliore, se non l’unico, per creare sistemi viventi è costruire modelli dei building blocks dei quali sono costituite le forme viventi.
 

Riguardo il punto uno, il cyberspazio può essere definito come un luogo dove due persone si incontrano mentre  quando sono in comunicazione telefonica. Questa definizione può essere estese a qualsiasi comunicazione di rete e internet può essere pensato come un contenitore di cyberspazio o come un canale dentro il cyberspazio.
Con l’affermarsi  del concetto di realtà virtuale il cyberspazio è “diventato” un mondo dentro il computer, le persone possono camminarci, vederlo, incontrarsi, manipolarlo. L’idea che un computer sia un contenitore e un supporto vitale per il cyberspazio ha iniziato ad avere profonde implicazioni nella metodologia di programmazione. Originariamente i computer furono progettati per essere delle veloci macchine di calcolo, in seguito sono state considerate delle macchine per eseguire algoritmi. La recente adozione della Programmazione Object-Oriented ha cambiato questo punto di vista e considera il computer come un mezzo per modellare oggetti, ognuno dei quali ha certe proprietà, ed è  la relazione tra queste proprietà che descrive il comportamento del sistema: il paradigma moderno è quindi quello in cui il programmatore costruisce oggetti che stanno nel cyberspazio dentro il computer. L’Object-Orientation è diventata popolare perché porta vantaggi come portabilità, riusabilità e robustezza.

Tradizionalmente la scienza ha usato un approccio analitico e riduzionista: per studiare qualcosa di complesso lo si divide in parti e si studiano le parti; se il modello è troppo complicato se ne cerca uno più semplice. Nonostante questo metodo abbia avuto grande successo, ha delle limitazioni in quanto spesso è impossibile predire il comportamento del sistema studiando le sue parti. Tutti sanno che l’intero è più grande della somma delle sue parti, se studi solo le parti manca qualcosa di cruciale. Questo qualcosa è conosciuto come comportamento emergente. Per esempio una formica da sola non è in grado di progettare, memorizzare o comunicare il piano per la costruzione di un formicaio, tuttavia un gruppo numeroso di formiche può costruire delle strutture sofisticate senza bisogno di una formica architetto capo. Un altro esempio è quello di una goccia d’acqua. Noi possiamo costruire le equazioni differenziali della goccia, ma queste risulteranno inutili per descrivere il comportamento di una cascata. Il principio che guardando una goccia non possiamo descrivere la cascata è chiamato emergenza e la scuola di pensiero che sfrutta l’emergenza per costruire grandi edifici da molti e piccoli building blocks è conosciuta come bottom-up.
Una conseguenza pratica del pensiero bottom-up per un programmatore è che esso lo aiuta a gestire la complessità. Immaginiamo di voler definire un adventure game in termini di albero binario di decisione (approccio top-down). La prima decisione può essere presa in due modi e ciascuna  scelta porta ad un’altra decisione definendo così quattro percorsi nell’albero. Ad esempio 32 decisioni producono 4.294.967.296 possibili percorsi per un singolo giocatore. Aggiungendo giocatori e considerando che le scelte di ciascuno influenzano gli altri, il problema diventa molto complicato per il fatto che è necessario considerare tutti i casi possibili. Se il programmatore non considera tutte le possibili soluzioni la risposta del sistema può essere errata o inesistente.
Un grande vantaggio degli esseri viventi è che essi sono in grado di risolvere problemi imparando dall’esperienza e generalizzando. Quindi se noi fossimo in grado di creare forme di vita artificiali per il nostro progetto, saremmo capaci di scegliere i problemi che noi vogliamo che queste risolvano. Ogni creatura vivente è composta da centinaia di miliardi di cellule che eseguono milioni di azioni differenti, ciascuna dando il suo piccolo contributo senza la supervisione di una cellula master. Ciascuna contribuisce inconsciamente al funzionamento dell’individuo (emergenza). In tutto ciò sta un principio molto importante: general-purpose building blocks, il cui comportamento è controllata da dati (geni, ambiente locale), la cui interazione produce il comportamento del sistema, che non può essere predetto, non è residente e non è controllato da nessuna singola parte.