venerdì 21 marzo 2008

Come i software... should be!

Ero assorto nei miei pensieri... e mi è bastato qualche minuto per riconcepire i sacri principi su cui è basata la costruzione di un buon software.

Tutti parlano di buon software quando si riferiscono a Grafica Accurata, Supporto Multilingua, Supporto ai plug-in, Interfaccia Skinnable, Dozzine di Opzioni, etc. etc.

Io dico che vi sbagliate. E passo ad esporvi le mie teorie.

Un software non deve essere multipiattaforma. Vengono compiuti sforzi enormi per permettere ad un software di girare su sistemi operativi diversi. E per cosa? Tanto esisterà sicuramente un prodotto eccellente che più di tutti spadroneggia in un constesto specifico, in un dato sistema.

Qualche esempio per chiarirci. Se pronuncio le parole "windows, irc" scommetto che vi viene in mente mIRC. E a quelli di voi che adesso stanno borbottando: "ma io non uso mIRC, uso BitchX", adesso dico: "beh, sono sicuro che hai conosciuto prima mIRC...".

Torniamo a noi. Se dico browser a cosa pensate? Molti chiaramente a "Internet Explorer. Molti altri a Firefox. Quanti di voi pensano a Mozilla Firefox? Forse gli utenti di gentoo, in quanto per installarlo hanno dovuto digitare emerge -v mozilla-firefox. Chiuque tende ad associare qualcosa a qualcosa. Un semplice meccanismo mentale per ridurre lo sforzo di ricordare. Ed è per questo che quando sento pronunciare la fatidica frase: "apri internet", non penso di fracassare il mio Access Point, ma realizzo che colui che la pronuncia si riferisce (purtroppo) all'apertura di Internet Explorer. Sempre rimanendo in tema di associazioni. Quanti dicono linux per riferirsi a qualcosa ma non hanno nemmeno una vaga idea di ciò a cui si stanno riferendo? E quanti invece lo sanno ma sbagliano comunque, in quanto il sistema operativo di cui stiamo parlando si chiama GNU-Linux (con la L maiuscola), perchè Linux è solo il kernel. E quanti di voi avranno letto GNU con il suono della g di "gnomo" anzichè della g di "guru". Il perchè lo trovate poco più avanti, quanto discuterò le lingue.

Se usi windows e vuoi disegnare in 2D a che software pensi? L'ottimo Adobe Photoshop? GIUSTO! Avete mai visto un porting ufficiale di Photoshop per linux? Vi siete mai chiesti il perchè? E quanti di voi pensano a Reader per Linux anzichè a Kpdf? Senza considerare il fatto che Okular è sulla buona strada per soppiantare la concorrenza...

Un buon software non deve essere Multilingua. Il codice diventa molto più pesante da leggere e da interpretare. E molti diranno: "e a noi che ce ne frega, tanto non siamo programmatori". In realtà lo sforzo per la gestione delle lingue, dell'adattamento alle versioni, del mirroring, di miriade di file sparsi qua e là... dietro il vostro menefreghismo ci sta un lavoro disumano, dietro il vostro menefreghismo si cela la vostra ignoranza, di essere convinti ancora che free software = software gratis, e che il Desktop non è la vostra scrivania di casa. Eppoi cerchiamo di apprezzare la bellezza della lingua originale... altrimenti facciamo come gli spagnoli: prendiamo il topo e muoviamolo sullo schermo.


E a tutte quelle persone che a causa dell'età o di chissà quale altro motivo non possono imparare qualche termine in inglese dico: "non fa niente". Tanto il 50% delle persone non legge nemmeno sullo schermo, si limita ad apprendere forme, colori, gestualità e a riprodurli e a saperli riconoscere quando serve. Non serve sapere che la parola gradient significa gradiente perchè possiamo osservare la bellissima inconcina con tutte le sue sfumature per capire che premere quel pulsante ci permette di realizzare una sfumatura. E molti non sanno nemmeno cos'è un gradiente matematico...

Un buon software non deve possedere il supporto ai plug-in. Pensate quanto diventa pesante il software. Se la funzionalità di un plugin viene concepita e inglobata dall'utore stesso del software, quanto pensate possano migliorare l'usabilità e le prestazioni? Un buon software nasce e si sviluppa in una sola mente portante. Se essa compie tutto il lavoro, allora si parla di eccellenza. Non escludo comunque il lavoro di gruppo o lo sviluppo distribuito, purchè ci sia una mente coordinatrice al pari di un autore. Un dittatore se vogliamo, che si fa carico delle decisioni e sulla cui testa soltanto, ricade la brutta sensazione di fallimento in caso di esito negativo.

Microsoft Windows XP possiede un qualche supporto ai plugin? Quanti di voi hanno installato un software dedicato per cambiare il look&feel delle finestre e del pulsante START? Perchè non avete scritto un vostro plugin? E perchè quelli di Linux vengono chiamati moduli e non plugin? Qualcuno di voi sa la differenza?

Notepad possiede il supporto ai plugin? NO! Eppure è uno dei sofware più usati e conosciuti, anche se pochi realizzano ciò.

Al limite posso concepire il supporto allo scripting, per automatizzare alcune operazioni del proprio software. Oppure un'interfaccia di controllo verso l'esterno. E se qualcuno vuole scrivere un plugin, che creasse il suo software che comunica con il mio tramite tale interfaccia.

Un buon software non deve possedere molte funzionalità. Solo quelle essenziali... e forse un pizzico di più. Penso che un buon software debba essere estremamente mirato al contesto, che debba fare soltanto quello, e che lo debba fare come si deve.

Ecco perchè non uso il plug-in per l'ftp su mozilla-firefox, e non uso nemmeno client ftp che fanno anche da browser web. Il supporto a IRC in molti software: quantomai inutile! Ecco perchè un buon candidato a essere "il software per eccellenza" nell'ambito P2P, mi riferisco a XNap, è attualmente in fase di sviluppo bloccato. Il loro problema è stato che si sono persi in "chiacchiere". Cosa che per altro è successa anche a me quando mi occupavo di un certo sconosciuto software P2P di nome Karonte...

Un altro esempio. eMule, o aMule che dir si voglia, è un buon software che si è diffuso molto negli ultimi anni. Perchè? Tu apri il programma, lui si connette automaticamente a qualche risorsa, server ed2k o rete kademlia, tu apri la sezione ricerca, scrivi cosa ti serve, fai due click, scarichi il file, altri due click e lo visualizzi. Niente di più facile. Eppure a che ca**o servono tutti quei pulsanti in alto? Parliamo un attimo di HCI (Human Computer Interaction). La funzionalità statistiche è del tutto inutile, l'utente medio (circa il 90% degli utenti) non le ha mai usate. Connetti/Disconnetti, Importazione e Informazioni sono sottomenu , almeno dal punto di vista logico, di altre categorie. La finestra delle preferenze è ricca, anzi straborda di opzioni di configurazione che non verranno mai utilizzate, allora perchè mettercele? ... sarebbe meglio "hard-codare" i valori.

Cosa ne viene fuori? Un potenziale ottimo software, ma estremamente lento e usabile soltanto in parte, per fortuna nelle sezioni ricorrenti. Proposte?

Estrema leggerezza, usabilità portata al limite, grazie ad un estetica essenziale e ben curata, look pulito ed elementi identificabili ad occhio (e non a lettura). Codice altrettanto pulito e leggibile, ben commentato, con un layout tipografico stabilito a priori e disponibile agli sviluppatori esterni. Ecco le chiavi.

In conclusione riguardo un buon software. Sono convinto che 2-3 progettisti (e programmatori allo stesso tempo) e un buon grafico possano produrrre un ottimo software.

Sono fermamente convinto nei principi dell'open source, ma ci sono molte lacune nei team di sviluppo esistente. E' difficile organizzare un gruppo di migliaia di sviluppatori che lavorano sullo stesso progetto. E se il progetto è modulare va ancora peggio. Il progetto deve essere scomposto. Ogni sottoprogetto deve essere un'entità a se stante, una peersona che dialoga con un'altra, sfruttando un eventuale altro sottoprogetto, un'altra persona.

Ed ecco che KDE nella sua release 4.0 ha abbracciato proprio questo approccio...