Perchè programmare è un passatempo decisamente concettuale. Un lavoro piacevole per chi ha una mente matematica abituata a schematizzare ed a destreggiarsi tra formulari e rappresentazioni astratte della realtà che ben poco hanno a che fare con la fantasia e la creatività dei linguaggi tradizionali e decisamente niente in comune con l'arte...
Oppure no? ;)
ASCII Art
3 esempi autoreferenziali a casaccio... :P
Ottimo...
E se vi dicessi che, parallelamente alla suddetta forma artistica, ne esiste una variante "anomala" che può trovare applicazione nel codice sorgente dei programmi che adoperiamo ogni giorno? Mi credereste? ;)
La "Code Art", fondamentalmente, è la rivisitazione delle metodologie formali proprie dell'"ASCII Art" nel contesto della scrittura del codice di un programma. Detta così, sembra una cosa decisamente banale da realizzare. Tuttavia, per capirne pienamente la complessità, bisogna tenere costantemente a mente che realizzare una figura convenientemente formata all'interno di un codice sorgente è un'impresa decisamente complicata dal fatto che l'ordine e la tipologia dei caratteri da utilizzare per comporla non è a completa discrezione dell'artista/programmatore. Diversamente, il coder è vincolato dal fatto che sta scrivendo un programma utilizzando un linguaggio che adopera una precisa sintassi e dei comandi dai quali non può prescindere... Parallelamente, essendo la dimensione di un determinato codice "finita" e non variabile a piacere in eccesso o in difetto, l'"artista" deve gestire i simboli grafici a sua disposizione nel miglior modo possibile, venendo costantemente a patti con la dimensione della sua "opera d'arte"...
Detto questo, un programma realizzato secondo gli stringenti canoni della "Code Art", deve categoricamente ubbidire alle seguenti regole:
1) L'impiego dei commmenti al codice è severamente bandito. In tal senso, tutte le parti "grafiche" di un programma concepito come "Code Art" devono essere strutturate con le istruzioni compilabili che daranno successivamente vita all'eseguibile vero e proprio.
2) Coerentemente con il punto "1", un progetto realizzato in "Code Art" nega al programmatore la possibilità di utilizzare funzioni "NOP" come riempitivo del codice. Per lo stesso motivo, è altresì vietato inserire nel programma qualsiasi tipo di "dead code". Morale: tutto il codice presente all'interno della struttura del programma deve essere attivo, eseguibile e sensato.
3) L'unica eccezione alle due regole suddette prevede l'eventuale allungamento delle funzioni matematiche e delle variabili numeriche, come riempitivo. (Esempio: il programmatore può utilizzare "1+1+1" al posto di "3", se lo ritiene necessario per fini "artistici"... ;) ). Tuttavia, questa concessione è deprecabile e deve essere considerata alla stregua di un'"ultima risorsa" da impiegare solo ed esclusivamente se non si riesce a strutturare la "Code Art" altrimenti.
Per esemplificare, immaginate di voler scrivere un programma in "C Sharp" che calcoli il "π" fino alla sua millesima cifra decimale. Potete scrivere una pappardella informe, funzionale ed assolutamente priva di creatività che svolga il suddetto compito, oppure potete divertirvi e comporre il vostro codice così, per sfizio... :D
Un programma che rende davvero l'idea! :D
Oppure: immaginate di essere uno sviluppatore di software alle prese con un cliente che vi commissiona un semplice programma di "sorting" funzionante secondo le specifiche dell'algoritmo "Bubble Sort" (ovvero: data una lista di elementi, a coppie di due vengono confrontati in successione i dati adiacenti, che eventualmente saranno invertiti nel caso questi si trovino nell'ordine sbagliato. Il processo ha termine quando non sono più possibili degli scambi e la lista risulta quindi correttamente ordinata... :) ).
Ovvero una cosa tipo questa... :P
Come al solito, potete fare i precisini e compilare una mattonella di testo allineata a "bandiera sinistra", oppure dare sfogo alla vostra creatività, uscendovene con un listato tipo questo:
Si intuiscono le bolle?! :)
Tutto questo a riprova del fatto che la creatività si può trovare ovunque, anche nei posti più impensati! :D