I programmatori scrivono codice per appagare se stessi o per gli utenti finali?

E’ una domanda legittima, a giudicare da questa notizia di qualche giorno fa, dove si apprende che la prossima versione di Ubuntu (Lucid Lynx, la 10.4) non includerà il famoso software di fotoritocco GIMP perché, cito testualmente, “ritenuto troppo complicato per l’utente comune” (e “ingombrante“, ma m’interessa sottolineare la precedente affermazione).

I problemi di usabilità sono un retaggio che quest’applicazione si porta dietro da parecchio tempo a causa del diverso modello adottato per la gestione dei documenti e per l’implementazione dell’interfaccia grafica in generale, rispetto ad altre applicazioni più o meno blasonate.

Ovviamente non si tratta di un giudizio universalmente accettato, poiché ci sono utenti che si trovano a loro agio col paradigma scelto dai progettisti di questo programma, ma le critiche sono consistenti e motivate (una rapida ricerca allo scopo è sufficiente per appurare che l’argomento ha generato parecchie discussioni, anche accese), tanto da aver portato da una parte a una maggior semplificazione / facilitazione dell’interfaccia con le ultime versioni, e dall’altra alla formazione di un apposito gruppo in seno al progetto che si pone lo scopo di migliorare la cosiddetta “user experience“.

D’altra parte se c’è un problema va valutato e risolto nei limiti del possibile, anche a costo di sacrifici se necessario, perché l’obiettivo per un software non rimane quello di risolvere un problema per poi “lavarsene le mani” come si suol dire: dev’essere anche fruibile dall’utenza finale a cui è indirizzato.

Non è un caso che questo progetto abbia generato numerosi fork, alcuni dei quali con lo scopo di riprodurre più o meno fedelmente della GUI del ben noto rivale Photoshop, segno questo che esiste per lo meno una parte della sua utenza che non digerisce e/o non riesce a fare a meno del modello interattivo di casa Adobe.

Quello di GIMP è, quindi, un esempio ben noto di un prodotto che soffre dei problemi citati, e il cui team di sviluppo avrebbe dovuto prendere in considerazione da tempo l’idea di dedicare una parte consistente del gruppo per la progettazione dell’interfaccia grafica.

Esistono, infatti, da parecchi anni delle linee guida ben consolidate riguardo l’argomento interfaccia uomo-macchina, che non si possono certo ignorare per questioni puramente ideologiche, come ad esempio l’avversione al paradigma MDI dei programmatori di GTK+ (toolkit su cui è fondato GIMP).

Tornando al tema generale dell’articolo, i programmatori a volte sembrano vivere in un loro mondo, un mondo in cui il fine principale è quello della risoluzione di un problema perché questo porta poi a una personale soddisfazione che li fa sentire meglio, magari gasati per l’impresa, tanto più se questa ha un’eco pubblica e rilevante.

Dimenticando, però, che tutti questi sforzi producono strumenti che devono finire nelle mani dell’utente finale, che possibilmente avrà una visione ed esigenze diverse, portando quindi a particolari aspettative nei confronti del tool che potrebbero poi risultare disattese.

A mio avviso un programmatore professionista o professionale ha il dovere di porre al centro dell’attenzione la persona o le persone che andranno a utilizzare il frutto del suo lavoro, e ciò a prescindere dal fatto che si tratti di un prodotto aziendale o realizzato per pura passione nei ritagli di tempo libero.

Per questo ritengo estremamente importante avere anche un responsabile del progetto che, oltre a conoscenze e capacità di spessore, abbia anche le idee chiare sulla sua evoluzione, che sia in grado di controllarne lo sviluppo, indirizzando opportunamente la forza lavoro in modo da raggiungere gli obiettivi prefissati.

Sembrerà una stupidaggine (o magari un’utopia da realizzare), ma avere qualcuno con cui confrontarsi e che con autorevolezza (l’autorità, invece, tante volte è controproducente) fornisca indicazioni sul da farsi aiuta molto a evitare l’insorgere di problemi o ad andare “fuori pista”, realizzando pertanto un prodotto all’altezza non soltanto dei requisiti, ma anche dei suoi fruitori. Tenendo anche conto delle scadenze che si sono fissate per non perdere il contatto con la realtà (i progetti debbono essere rilasciati, più prima che poi).

Un’azienda privata si pone generalmente il problema della soddisfazione dell’utente finale, ma non si tratta di una cosa scontata. Inoltre si potrebbe pensare che l’aderenza a costumi comuni e consolidati in qualche modo soffochi l’innovazione, portando a un appiattimento dell’offerta.

Prendiamo ad esempio Windows, che è un software molto diffuso: nonostante l’interfaccia grafica sia stata ridisegnata più volte nell’arco della sua storia portando elementi di innovazione (più o meno discutibili), continua da tantissimo tempo a non permettere il drag & drop di un file o di una cartella nel controllo testuale del dialogo di selezione che ne riporta il nome:

Mentre fa impressione vedere che la stessa operazione è possibile col vetusto prompt dei comandi:

Questo a dimostrazione che c’è sempre spazio per introdurre nuovi elementi, e soprattutto che a volte non è neppure il tipo di interfaccia, grafica o testuale che sia, a porre dei rigidi paletti sull’interazione uomo-macchina. Basti pensare, a tal proposito, ai tanti programmini sotto DOS o simili che, nonostante l’obsolescenza, continuano a girare sui terminali di banche, supermercati, e negozi vari, permettendo agli operatori si svolgere adeguatamente il loro lavoro.

Viceversa, per un programmatore che scrive codice per hobby è più difficile attenersi a certe “regolette, a causa del senso di libertà, di poter fare qualunque cosa senza vincoli e limiti vari. Ma la programmazione fine a se stessa quanto può essere gratificante? Quanto può farci sentire appagati?

Il piacere del software è anche quello di pensare che c’è qualcuno che lo userà e lo troverà un comodo strumento per il proprio lavoro, o magari come passatempo.

Credo, quindi, che un po’ di umiltà e di immedesimazione nel prossimo siano ingredienti indispensabili per un buon sviluppatore, che non ha bisogno di dimostrare al mondo quanto è bravo, ma piuttosto quanto siano utili per gli utenti finali le applicazioni che ha sviluppato.

Press ESC to close