DJ-lab: Laboratorio di Informatica Distribuito

Alessandro Soro - Raffaella Sanna - Manuela Angioni 
Davide Carboni - Gavino Paddeu
CRS4 - Centro di Ricerca, Sviluppo e Studi Superiori in Sardena
Parco Scientifico e Tecnologico, POLARIS, Edificio 1, 09010 PULA (CA - Italy)

{asoro,raffa,angioni,dcarboni,gavino}@crs4.it

Sommario
l presente lavoro vuole esporre l’impiego di un’architettura software distribuita su rete Internet nel campo della formazione a distanza, e in particolar modo nello svolgimento dell’attività di laboratorio di informatica con la pratica del pair programming. DJ-lab è un software di comunicazione che, per mezzo di un plugin per il popolare ambiente di sviluppo integrato IntelliJ IDEA, permette a due istanze del programma di sincronizzare le proprie viste su un medesimo sorgente rendendo possibile a due studenti la pratica del pair programming a distanza.
1.	Introduzione.
La formazione a distanza sta guadagnando un ruolo sempre più importante nell’ambito dei corsi di studi per venire incontro alle esigenze di studenti fuori sede, disabili o lavoratori. Parallelamente cresce la disponibilità di strumenti informatici a supporto della ricerca e distribuzione di documenti, della comunicazione sincrona (messaging, chat) e asincrona (forum, mailing lists), nonché di pacchetti integrati che raccolgono queste funzionalità e le accostano ad altre, relative all’aspetto gestionale e organizzativo dei corsi. Tuttavia non si può dire altrettanto per quanto riguarda la collaborazione e l’attività di laboratorio. In quest’ambito infatti il sussidio informatico è pressoché assente e l’attività pratica viene svolta dagli studenti in modo individuale, perdendo in tal modo tutti i vantaggi della collaborazione e del lavoro di gruppo. 
Il presente lavoro vuole esporre l’impiego di un’architettura software distribuita su rete Internet nel campo della formazione a distanza, e in particolar modo nello svolgimento dell’attività di laboratorio di informatica con la pratica del pair programming. L’architettura descritta permette a due studenti di collaborare attivamente e in tempo reale alla stesura di codice sorgente, pur essendo fisicamente distanti, come se essi sedessero alla stessa scrivania e guardassero lo schermo dello stesso computer.
Nel seguito vengono passati in rassegna alcuni esempi di piattaforme software che trovano applicazione nella formazione a distanza. 

Viene dunque presentato il pair programming, una pratica recentemente introdotta in ambito industriale che prevede la partecipazione di due programmatori alla redazione del codice, generalmente considerata un lavoro da svolgere su base individuale. Il pair programming ha un alta valenza didattica, riconosciuta danumerosi studi accademici ed è stato più volte efficacemente usato nell’insegnamento della programmazione. Chiaramente l’adozione del pair programming nell’ambito della formazione a distanza impone l’uso di appositi software di application sharing. 
Infine illustriamo una implementazione dell’architettura DJ-lab, che permette a due ambienti di sviluppo integrati (IDE) di sincronizzare le proprie viste su un medesimo sorgente permettendo a due studenti di praticare il pair programming a distanza. 
2.	Strumenti di Supporto alla Formazione a Distanza.
L’ampia diffusione della rete Internet ha da tempo reso competitivo il World Wide Web quale canale di distribuzione di documenti e per la comunicazione interattiva. Sebbene negli intenti del suo creatore il Web fosse più uno spazio di discussione e di scambio di idee[Berners Lee, 2002], esso si è evoluto in un mezzo di broadcast, e come tale è stato adottato nella didattica, come una sorta di repository per il materiale didattico, confezionato in formato digitale.
Altri strumenti sono stati adottati o creati appositamente per agevolare la comunicazione e permettere di creare forum e spazi di discussione, sostituendo così la comunicazione faccia a faccia, impraticabile in un contesto di formazione a distanza. Gli esempi in questo caso spaziano dalla semplice posta elettronica, alle mailing list, ai servizi di chat, instant messaging o teleconferenza, fino ad arrivare a strumenti più specifici come ad esempio ACT[Cummings 1998] un software per discussioni on-line che permette di affrontare temi di dibattito in modo ordinato e molto strutturato, tramite l’uso di filoni di discussione e label che permettono di etichettare gli interventi secondo il loro scopo (domanda, replica, ragionamento, confutazione...).
In molti casi le funzionalità di questi singoli strumenti sono state integrate e raccolte in pacchetti completi, unitamente a strumenti gestionali per pianificare e organizzare i corsi, e sono spesso accessibili come portali Web. Alcuni esempi sono 
Jolie (http://www.poliedra.it/elearning_jol.htm), 
E-dotto (http://www.e-dotto.iks.isvor.it/),
WebCT (http://www.webct.com/products).

Questi strumenti rispondono alla metafora di fondo della lezione frontale o del dibattito in classe. Da un punto di vista tecnologico essi sono basati sul cosiddetto paradigma client-server, in cui un computer centralizzato (il server) svolge il ruolo di database di informazioni o di interventi, cui i client (gli allievi) accedono o contribuiscono, su base però sostanzialmente individuale. In effetti la maggior parte di questi strumenti sono classificabili come sistemi di comunicazione asincrona, in cui cioè ad un intervento non segue necessariamente, e comunque non immediatamente, la risposta di un particolare interlocutore. Fanno eccezione gli strumenti di chat e instant messaging, che infatti trovano collocazione nelle sessioni di brainstorming più vicine all’attività di laboratorio che alla tipica lezione frontale.

I software di application sharing sono ciò che maggiormente si avvicina ad un laboratorio distribuito. Essi permettono di condividere fra più computer il controllo di una applicazione software. Esempi di tali software sono Symantec PC Anywhere (http://www.symantec.com/pcanywhere/), Microsoft Net Meeting (http://www.microsoft.com/windows/netmeeting/default.asp), o VNC
(http://www.realvnc.com). In termini tecnologici i software di application sharing sono più simili al paradigma di comunicazione peer to peer[Oram, 2002] nel quale due o più agenti comunicano su una base paritetica, in genere attraverso lo scambio di messaggi.  Essi sono stati usati per collaborare a distanza alla stesura di codice in diversi esperimenti, ed hanno evidenziato una serie di limitazioni dovute al fatto che non sono progettati per tale specifica attività, e meno ancora per un uso didattico, in cui un ruolo particolare dovrebbe essere riservato al tutor, che pure opera a distanza, ad esempio permettendogli di annotare, correggere e commentare il lavoro degli studenti. I limiti e le difficoltà riscontrate nell’uso di tali software sono discussi, ad esempio in [Stotts et al., 2003][Hanks, 2002]. 
3.	Il Pair-Programming.
Nell’ambito dell’ingegneria del software, grande risalto stanno avendo ultimamente le cosiddette metodologie agili[Highsmith, 2002], metodologie di gestione di progetti di sviluppo software concepite espressamente per avere una pronta risposta all’incostanza dei requisiti, alla frenesia del mercato e dell’evoluzione tecnologica e al fortissimo turn-over fra gli addetti a un progetto.
Il pair-programming è una pratica adottata nello sviluppo industriale di software, in particolar modo nell’ambito della metodologia nota come extreme programming[Beck, 2000] che sta emergendo fra tutte per l’efficacia delle pratiche che essa prescrive. 
Se normalmente lo sviluppo del software viene frammentato in task che poi saranno assegnati a singoli programmatori, nell’extreme programming i task sono assegnati a coppie di programmatori, che lavorano fianco a fianco, su un solo computer. Tale modo di procedere ha diversi vantaggi rispetto alla classica separazione dei compiti su base individuale[Nosek,1998][Man Lui e Chan, 2003]:

•	la qualità del codice redatto è più elevata, infatti lavorando in gruppo si da più enfasi all’ordine e all’eleganza e si riduce istintivamente la complessità; 
•	Il tempo impiegato per risolvere un task diminuisce, anche in ragione della migliore qualità del codice che implica maggior leggibilità e correttezza. In altre parole due programmatori che lavorano in coppia producono più del doppio di un programmatore che lavori da solo;
•	l’introduzione di nuovi elementi nel team è più agevole perché essi saranno subito inseriti in una coppia di lavoro e, sotto la guida di un compagno, prenderanno confidenza con la metodologia e con il progetto; 
•	le coppie cambiano frequentemente, su scala circa settimanale. Ciò agevola la condivisione della conoscenza, evita che particolari aree del progetto diventino di esclusiva competenza di pochi programmatori e in generale rafforza l’affiatamento del team.

Sebbene il pair programming nasca come pratica da applicare nell’ambito di una particolare metodologia di sviluppo usata in un contesto industriale, è facile notare come esso si avvicini alla pratica del laboratorio, in cui gruppi di studenti affrontano una serie di problemi, spesso complementari. La necessità di cambiare spesso i gruppi di lavoro e di promuovere il coinvolgimento degli studenti meno esperti sono problemi ben noti ad ogni insegnante. Un ulteriore analogia con l’attività di laboratorio consiste nel fatto che il team di lavoro, pur diviso in coppie, dovrebbe nell’extreme programming operare in un ambiente open-space, proprio allo scopo di massimizzare le possibilità di scambio, di comunicazione e di condivisione della conoscenza. 

Esistono numerosi esempi di progetti in cui il pair programming è stato efficacemente applicato a scopi didattici. Ciò conferma la validità di tale pratica, peraltro già dimostrata in ambito industriale, quale strumento di comunicazione, condivisione della conoscenza e apprendimento dei linguaggi e dell’arte della programmazione [Baheti et al., 2002][Stots et al., 2003][Williams e Kessler, 2001]. 
Tuttavia il pair programming, per sua stessa natura, mal si presta ad una applicazione in un contesto distribuito. Esso infatti richiede non solo la co-locazione della coppia di studenti, ma addirittura frequenti cambiamenti delle coppie stesse allo scopo di evitare interdipendenze fra gli allievi.
Allo scopo di abbattere il problema della co-locazione mantenendo tutti i benefici del pair-programming abbiamo realizzato un software per la redazione e la revisione collaborativa di codice sorgente. 
4.	DJ-lab: Distributed Java Lab.
Una sessione di lavoro vede la partecipazione di due o più studenti e di un tutor, in diversi ruoli: 
•	driver: è lo studente che effettivamente redige il codice, questi è di solito lo studente meno esperto o più recentemente inserito nel gruppo di lavoro, che in tal modo prende confidenza con i compagni e con il lavoro che essi hanno eventualmente già realizzato e non viene relegato a un marginale ruolo di spettatore; 
•	navigator: lo studente più esperto controlla e commenta in tempo reale il codice prodotto dal driver evidenziando errori di logica, rilevando dettagli stilistici o suggerendo implementazioni più efficienti o più eleganti di un algoritmo, suggerendo revisioni  del codice o proponendo la realizzazione di test; 
•	tutor: supervisiona il lavoro degli studenti, in tempo reale o differito, suggerisce test per evidenziare difetti nel codice realizzato ed è in generale un punto di riferimento per gli studenti, quando questi giungono a un empasse; ricopre in sostanza il ruolo che nell’extreme programming è riservato al coach. 

Affinché questi possano collaborare efficacemente allo sviluppo di codice nell’ambito di una esercitazione scolastica pur senza la possibilità di riunirsi fisicamente in un laboratorio, è necessario disporre di efficaci strumenti software di supporto che permettano la stesura e la revisione collaborativa e a distanza.
Lo sviluppo di codice sorgente è un attività creativa, purtroppo accompagnato da una grande quantità di operazioni ripetitive che lo rendono inutilmente laborioso se effettuato senza l’ausilio di software apposito. Tali software noti come ambienti di sviluppo integrato (IDE), sono riconosciuti come assolutamente indispensabili da ogni programmatore, e la loro adozione è sempre più precoce, fin dai primissimi corsi di informatica di base.
Essi infatti prevedono numerosi aiuti per la stesura del codice, come ad esempio completamento automatico delle keyword, compilatore e debugger integrato o controllo automatico della sintassi, e svincolano l’allievo dalla necessità di curare i dettagli lessicali e sintattici permettendogli di concentrarsi sull’aspetto creativo, sull’eleganza e sull’efficienza del codice

Figura 1.
La finestra dell’IDE IntelliJ IDEA. Nella parte bassa la sottofinestra dedicata a DJ-lab.

Proporre un ambiente di sviluppo (ancorché collaborativo) che non prevedesse tutte queste funzionalità sarebbe inutilmente pretenzioso e porterebbe probabilmente ad un rifiuto dello strumento.
Per questo motivo, anche se a prezzo di serie difficoltà pratiche, abbiamo scelto di realizzare DJ-lab sotto forma di plugin di cui abbiamo realizzato una implementazione per l’IDE IntelliJ IDEA (http://www.intellij.com/idea/). 
Il plugin lavora a stretto contatto con l’IDE e si presenta come una finestra (occultabile) all’interno della finestra principale di quest’ultimo, risultando in tal modo sempre a portata di mano e caratterizzato dal medesimo aspetto (look & feel, vedi figura 1). 
Il suo scopo è quello di rilevare ogni azione compiuta dal driver (lo studente che effettivamente redige il codice), come ad esempio la digitazione o cancellazione di caratteri, la selezione di testo, azioni di copia-incolla, la creazione di nuovi file.
Successivamente esso invia i dettagli di tali eventi all’IDE del navigator, sul quale essi saranno replicati identici, così che quest’ultimo possa revisionare man mano il codice prodotto, rilevando eventuali errori di logica o fare commenti sullo stile e sull’efficienza del codice. In pratica tutto ciò che il driver fa si riflette istantaneamente sull’IDE del suo compagno il quale vede ogni carattere e  ogni correzione in tempo reale, proprio come se gli studenti fossero seduti fianco a fianco. 

Figura 2.
Uno smart comment appare evidenziato graficamente da uno sfondo di colore particolare e da un’icona al margine della finestra. Il commento viene mostrato come tooltip al passaggio del mouse.

Per permettere un efficace comunicazione, DJ-lab mette a disposizione anche alcuni strumenti di supporto che permettono loro di spedirsi messaggi o parlare a viva voce, di commentare porzioni del codice e di inviare al tutor note, messaggi e richieste di aiuto nonché di ricevere le relative risposte.
DJ-lab permette inoltre al tutor di osservare l’operato degli allievi (non senza che questi ne siano al corrente) come se passasse effettivamente fra i banchi e di inviare loro commenti, suggerimenti, annotazioni e correzioni.
Come già accennato, alcuni strumenti di contorno sono integrati nel software e fanno da supporto alla comunicazione fra gli studenti e il tutor. 
Una casella di testo è a disposizione dell’utente per inviare brevi messaggi che saranno visualizzati sull’IDE del compagno di lavoro e/o del tutor accompagnati da un segnale acustico. Tale funzionalità integrata nell’IDE permette di comunicare in modo più efficace, evitando di distogliere eccessivamente l’attenzione dal codice che si sta creando. 
DJ-lab permette anche di comunicare a voce, per mezzo di cuffie e microfono, con il compagno di lavoro. Va tuttavia considerato che la comunicazione audio richiede una maggiore ampiezza di banda e può, in circostanze di particolare carico della rete o se praticata su una linea non sufficientemente veloce, essere affetta da pause o risultare addirittura impraticabile.
Una funzionalità specifica è costituita dagli smart comments (vedi figura 2). É possibile associare ad una porzione di testo un commento che, da quel momento, sarà mostrato dall’IDE come tooltip e risulterà evidenziato graficamente da un icona e dal colore del testo.
La scelta dell’IDE è stata dettata da considerazioni di natura pratica. Va tuttavia rilevato che la comunicazione fra due istanze di DJ-lab (cioe fra il programma in esecuziona sul computer del driver e quello in esecuzione sul computer del navigator o del tutor) avviene tramite messaggi espressi in linguaggio XML. questo consente di fatto di estendere l’uso di DJ-lab a qualsiasi altro IDE per il quale esista la possibilità di realizzare un plugin. Niente impedisce infatti a un IDE IntelliJ dotato di DJ-lab di comunicare e sincronizzarsi con un IDE Eclypse (http://www.eclypse.org/) una volta che DJ-lab sia stato trasportato su quest’altra piattaforma.
5.	Sperimentazione.
Diverse aziende, centri di ricerca e di formazione hanno da tempo riconosciuto il valore didattico della metodologia del pair programming adottandola per accelerare e agevolare il trasferimento di conoscenza tra programmatori senjor e junior, tra tutor e studenti ospitati per un periodo di stage. 
Tale pratica tuttavia talvolta collide con le nuove esigenze di flessibilità dell’orario di lavoro che un numero sempre crescente di organizzazioni ha accordato ai propri dipendenti che si concretizza in una libertà nella scelta degli orari e della sede di lavoro e in alcuni casi nell’adozione del telelavoro.
In particolare al CRS4 si sta da alcuni mesi introducendo, in via sperimentale, il telelavoro, che consente ai ricercatori e programmatori impegnati nei diversi progetti di ricerca e formazione di operare lontano dalla sede principale del centro (per esempio dalla propria abitazione) collegati via Internet, con l’ausilio di una serie di strumenti software di collaborazione alcuni dei quali (chat, instant messaging, ecc.) disponibili e ormai universalmente adottati, altri (come DJ-lab, il risultato del presente lavoro) costruiti ad hoc.
Da circa quattro mesi, un gruppo composto da 15 ricercatori utilizza DJ-lab come ausilio nella pratica del pair programming durante la normale attività di sviluppo software fornendo utili feedback e suggerimenti per lo sviluppo di futuro. Sebbene il contesto del telelavoro sia differente da quello della formazione a distanza, riteniamo che esistano una serie di analogie per cui i risultati promettenti ottenuti in questa sperimentazione potrebbero essere replicati in una prova sul campo nell’ambito più specifico della formazione.
6.	Conclusione e Sviluppi Futuri. 
L’alto valore didattico del pair programming è dimostrato dalle sua sempre crescente diffusione in ambito industriale e da numerosi lavori di ricerca che lo hanno applicato all’insegnamento dell’informatica e della programmazione. Le difficoltà che emergono nel tentativo di applicare tale pratica in mancanza della co-locazione dei partecipanti possono essere parzialmente risolte attraverso strumenti specifici di cui il presente lavoro descrive un esempio. L’approccio descritto presenta alcuni vantaggi sulle alternative. In primo luogo non si fa uso di un particolare strumento di application sharing che legherebbe gli studenti all’uso di una particolare piattaforma operativa. 
La comunicazione fra due istanze di DJ-lab avviene tramite scambio di messaggi che seguono un protocollo ben definito ma aperto. In altre parole se DJ-lab fosse implementato per tutti i più comuni IDE, consentirebbe sessioni di pair-programming distribuito anche fra IDE differenti, lasciando libero il docente del corso  o lo studente di scegliere il più adatto alle proprie esigenze.
La collaborazione e l’attività di laboratorio non si limita alla stesura di codice, perfino nella programmazione gran parte del tempo è spesa dai programmatori discutendo, disegnado grafici, ricercando informazioni sul Web ecc. Sarebbe auspicabile estendere il modello proposto ai più comuni Web browser, text editor o sketch pad. 
7.	Riferimenti Bibliografici.
Baheti P., Gehringer E., Stotts D., Exploring the Efficacy of Distributed Pair Programming, in D. Wells e L. Williams (eds), Proc. of  Extreme Programming and Agile Methods - XP/Agile Universe 2002: Second XP Universe and First Agile Universe Conference, Chicago, IL, USA, August 4-7, 2002, pp. 208-220

Beck K., Extreme Programming Explained:  Embrace Change, Reading, Massachusetts: Addison-Wesley, 2000. 

Berners Lee, T., L’architettura del nuovo Web, Giangiacomo Feltrinelli Editore, Milano, 2002.

Cummings J., Promoting Student Interaction in the Virtual College Classroom, in Using Technology to Enhance Learning: How Using Technology Changes What Faculty Do,1998.

Hanks, B. F., Tool Support for Distributed Pair Programming, Workshop on Distributed Pair Programming, Exteme Programming and Agile Methods – Extreme Programming and Agile Methods - XP/Agile Universe 2002: Second XP Universe and First Agile Universe Conference, Chicago, IL, USA, August 4-7, 2002

Highsmith J., Agile Software Development Ecosystems. Addison Wesley, 2002.

Man Lui, K., Chan K. C. C., When Does a Pair Outperform Two Individuals?, in Marchesi M., Succi G. (eds):Proc. of Extreme Programming and Agile Processes in Software Engineering, 4th International Conference, XP 2003, Genova, Italy, May 25-29, 2003,pp 225-233.

Nosek, J. T., The Case for Collaborative Programming, Communications of the ACM, 41, 3, Marzo 1998,pp. 105-108.

Oram, A., (ed). Peer-to-Peer - Harnessing the Power of Disruptive Technologies, O'Reilly & Associates, Sebastopol, CA. 2001.

Stotts, D., Williams, L., Nagappan, N., Baheti, P., Jen, D., Jackson, A., Virtual Teaming: Experiments and Experiences with Distributed Pair Programming, in Maurer, F. e Wells, D. (eds) Proc of Extreme Programming and Agile Methods - XP/Agile Universe 2003, 3rd XP and 2nd Agile Universe Conference, New Orleans, LA, USA, August 10-13, 2003. pp 129-141.

Williams L. A., Kessler, R. R., Experimenting with Industry's "Pair-Programming" Model in the Computer Science Classroom, Computer Science Education, Vol.11, No.1, 2001, pp. 7-20.