danielemargutti

having fun at runtime

I framework sono i nuovi linguaggi di programmazione

C’è una tendenza nel mondo dello sviluppo sw di cui forse non si parla abbastanza, ma che ci sta portando ad un punto di svolta molto interessante per quanto riguarda il modo in cui si approccia allo creazione di nuovi programmi.
(No, non sto parlando del ritorno in gloria della programmazione funzionale che ormai da un anno e almeno per i prossimi due o tre ci accecherà con i suoi lampi di pura saggezza).

La scorsa settimana, come ormai tradizione, ho partecipato all’edizione romana del Codemotion: è un’occasione per incontrare vecchi amici e colleghi, ascoltare qualche talk di ispirazione e magari sporcarsi le mani con tecnologie e prodotti lontani da quello che è il mio lavoro attuale e per i quali non avrei la necessaria costanza.

Al termine della prima giornata però sono tornato a casa con la una forte consapevolezza di quanto l’interesse principale nello sviluppo di software si sia gradualmente spostato dai linguaggi verso i framework: se fino a non troppi anni fa le “faide” tra programmatori erano incentrate su quanto una particolare caratteristica di un linguaggio potesse fare la differenza, ormai gran parte delle argomentazioni sono legate a tutta quella serie di componenti già digeriti in grado di semplificarci lo sviluppo.
La stragrande maggioranza dei talk tecnici e delle discussioni che giravano riguardavano proprio i framework.

Con questo non voglio certamente dire che nel frattempo i linguaggi non si siano evoluti, tutt’altro: lo scorso anno abbiamo visto nascere Swift (e ancora prima Go, Dart, Ruby etc. ognuno con la sua dose si successo/insuccesso), poi c’è stato tutto l’hype intorno alla programmazione funzionale (non dimenticherò mai il PragmaMarkConf del 2014 con una sessione totalmente folle su come ci si potesse impiccare con Swift funzionale in una sola riga di codice), lo sdoganamento delle closure e via dicendo.

A conti fatti però la differenza tra i diversi linguaggi si è fatta meno netta; l’utilizzo di cross compiler – ad esempio – ci ha permesso di poter programmare app iOS in Java oppure ottenere codice JavaScript da qualsiasi altro linguaggio di nostro gusto.
I linguaggi stessi, pur mantenendo una serie di caratteristiche uniche, spingono il programmatore verso design patterns comuni o comunque molto simili.
Padroneggiare un nuovo linguaggio è, nel peggiore dei casi, questione di qualche settimana.

In un mondo in cui la maggior parte dei programmatori non ha necessità (e spesso neanche la competenza) per scendere più vicino alla macchina, dove la stessa conoscenza intima di come funziona il linguaggio e i tool che usa è rarefatta, la parte del leone la fanno proprio i framework.
La programmazione OOP ci ha insegnato che reinventare la ruota è spesso un modo di introdurre dei nuovi errori: l’esplosione dei framework, sopratutto lato web (dove si concentra tanto interesse ma anche troppa superficialità), ha però portato questo concetto alle masse, semplificando molto il lavoro, diminuendo la frequenza degli errori ma nel contempo creando una fetta significativa di programmatori meno consapevoli di ciò che fanno.

In questo senso i framework sono i nuovi linguaggi di programmazione; è attraverso i framework che spesso siamo spinti ad adottare una certa metodologia di sviluppo: il pattern di separazione MVC (Model View Controller), ormai molto diffuso, neanche dieci anni lo si trovava giusto in Cocoa/OSX; ora è in framework come CodeIgniter (PHP), Node (JS), RoR (Ruby) e così via.
Spesso molti programmi sono una lunga serie di call ad API di un framework: c’è tutta una serie di programmatori che non conosce neanche i puntatori, che non ha idea di come funzioni un computer o di come venga gestita la memoria.
Questi stessi programmatori usano algoritmi già digeriti dentro un framework (quante volte vi è più servito di dover implementare un banale algoritmo di ordinamento?) ed hanno una visione molto corta del mondo che si nasconde dietro il monitor.

Nella maggior parte dei casi questo tradeoff è accettabile e anche incoraggiato; che senso ha perdere tempo a riscrivere la ruota ogni volta?
Se devo implementare un sistema di pagamento mi conviene farlo da zero o utilizzare un servizio già ampiamente rodato e compatibile come può essere PayPal?
D’altronde questo è il motivo che ci ha spinto appena due anni fa ad iniziare l’avventura con Creo, o che ha portato alla nascita di realtà come Stamplay o Mashape.
Quello che stiamo facendo da dieci anni a questa parte è un investimento collettivo nello sviluppo di una base comune (i framework) che ci permetta di astrarci ancora di più dall’hardware; è una evoluzione naturale ed inevitabile (d’altronde simili discussioni ci saranno già state ai gloriosi tempi dei programmatori assembler).

Se ci sono ancora i duri degli editor testuali è anche vero che la maggior parte dei programmatori fa affidamento su IDE che correggono -o quantomeno ci provano- gli errori più grossolani e in molti casi nascondono la progettazione e perfino l’uso del linguaggio dietro interfacce visuali.
Ad esempio una delle caratteristiche principali in Creo è la possibilità di collegare sorgenti diverse (ad esempio un db e un grafico, oppure un servizio REST etc.) dando la possibilità di creare infrastrutture anche complesse trascinando componenti e collegandoli tra loro, limitando fortemente così l’uso del codice.

I framework sono ciò che da realmente forza ai linguaggi: è dove si decide cosa è giusto far fare al programmatore e cosa no; si sceglie cosa esporre e cosa va ignorato, cosa è bene e cosa è male.
Attraverso i framework si creano regole e infrastrutture per la rete e chi la popola.
Lerry Lessing, professore di diritto ad Harvard, ha coniato una bellissima frase che riassume tutto: “Code Is Law”.

(L’articolo è stato pubblicato anche su Medium a questo link, dove se volete potete aggiungere le vostre riflessioni)

All’alba dell’Internet delle Cose

Siamo all’alba di una nuova era; la chiamano IoT, Internet of Things.
Dopo aver accettato e concesso spesso con entusiasmo che le nostre abitudini, i nostri gusti e le nostre vite fossero tracciate, monitorate e studiate per darci in pasto la voglia di desiderare cose di cui ci sembrava di non sentire la necessità (è il marketing baby) stiamo per buttar anche quell’ultimo muro che ci separa dal mondo.
Per il WSJ non è solo normale e inevitabile, ma perfino buono:

“La privacy potrebbe non essere morta nel 2014, ma perlomeno ha già un piede nella fossa. Alla generazione successiva alla nostra, il fatto che avessimo questo concetto di privacy sembrerà antiquato e medievale.”
(Il Post – 15/02/2015)

A dirvi la verità non faccio fatica a crederlo; quello che è successo con i social network sembrava utopia in un mondo che fino ad allora custodiva gelosamente la propria identità dentro e (soprattutto) fuori dalla rete. Eppure ormai ci concediamo al mondo e lasciamo che il mondo conosca di noi fin troppo e con disarmante facilità; quando ci presentiamo per un nuovo impiego è quasi scontato che chi ci è davanti ha già fatto un giro sui nostri account social per scoprire qualcosa di più, qualcosa che magari abbiamo deciso di omettere: oggi sono le foto stupide di noi ubriachi alle feste che forse ci impediranno di avere quel posto, magari domani sarà una patologia da cui siamo affetti a farci scartare ancora prima di mettere piede nella stanza.
Ancora prima di diventare un rischio per l’azienda.

A proposito, la prossima volta che sarete davanti al vostro nuovo Smart TV sarebbe opportuno che evitiate di parlare di questioni delicate: pare che non possa fare a meno di ascoltare, parola della stessa Samsung (a quanto pare qualcuno li legge i contratti di licenza).

Quando penso a tutte queste cose mi torna in mente un celebre romanzo di Philip K. Dick: Ubik (anno 1969).
Come gran parte delle sue opere (che – questo va detto – non guardano al futuro con un occhio benevolo) anche questa è profetica. In un passaggio un uomo cerca di aprire la propria porta di casa ma questa non ne vuole sapere, a meno di essere pagata; l’uomo si rifiuta asserendo che si tratti solo di una mancia non obbligatoria e la porta per tutta risposta gli dice di leggersi il contratto di licenza che ha accettato.
Inutile dirvi che aveva ragione la porta.

Accettiamo i termini di licenza di qualsiasi cosa, in continuazione. Li saltiamo perchè sono boriosi, lunghi e pieni di termini in legalese che possono fare la felicità dei soli avvocati.

Poi però ci troviamo a fare i conti con qualcosa che ci sembra assurdo ma che alla fine abbiamo accettato. La storia di Samsung non è certo nuova, qualche anno addietro LG fu pizzicata a collezionare senza autorizzazione i gusti dei propri utenti.

Il fatto che tecnologicamente diventi difficile garantire una minima privacy non significa che a questo ci si debba necessariamente piegare.
E se invece della porta fosse, che so, il frigorifero?
La grande forza della fantascienza è nell’usare iperboli per descrivere situazioni che nel presente ci appaiono perfino paradossali ma che possono cambiare profondamente il nostro futuro. Se pensate che sia solo un modo di immaginare ciò che ci accompagnerà domani ne avete colto solo il lato più superficiale. Ah, e nel caso ve lo stiate chiedendo, Ubik è un gran libro, che vale la pena di leggere.

Cambiare idea

Viviamo nell’illusione che tutto sia immutabile: la maggior parte di noi cerca di pianificare le giornate e  la propria vita affinché sia più stabile e prevedibile possibile; anche quando cerchiamo l’avventura lo facciamo per brevi momenti e in ambienti controllati. Certo, alcuni di noi non riescono a vivere senza camminare sul filo del rasoio, ma si tratta di una minoranza, spesso da invidiare ma comunque difficilmente da imitare.

E’ un’illusione così forte, una speranza così accecante che, tutte le volte in cui il castello di sabbia crolla e ci troviamo a fare i conti con i cambiamenti, la maggior parte delle volte rimaniamo increduli e spaventati.
E’ difficile convincere noi stessi che il mondo, noi e i nostri pensieri siano in continuo mutamento, che lo vogliamo o no.
Eppure è così che progrediamo, è così che cresciamo ed è così che dovremmo vivere la nostra vita: con la consapevolezza che il cambiamento non sia un dolore inevitabile, ma un’occasione per migliorarci e andare avanti.

Cambiamo casa, lavoro, città, a volte cambiamo vita e anche chi abbiamo scelto per seguirci nella nostra avventura: perchè allora ci ostiniamo a credere che un’opinione debba rimanere immutata negli anni?
Se vi ho dato l’impressione che sarebbe stato un post filosofico me ne scuso: ho scelto questa introduzione per parlarvi di quanto sia importante il bisogno di mettere continuamente in discussione le proprie assunzioni; lo faccio ovviamente trattando la realtà in cui vivo, che è tutt’altro che metafisica.

Non eri quello che…?

Lo scorso autunno ho deciso di comprare un iPhone 6+: uso e lavoro con Apple da una vita – cosa che, agli occhi dei miei amici – mi annovera ancora una volta e senza scampo tra i “fans”, una versione aggiornata ma sempre uguale a se stessa degli estremisti religiosi.
In due parole significa che a prescindere da cosa farà questa società per azioni io devo essere pronto a difenderla.
Ovviamente non è così che funzionano le cose ma a parecchi piace vivere in un mondo stereotipato; sembra risulti più facile (deve essere per questo che nel nostro paese vanno per la maggiore serie tv come Don Matteo & Co).
Ebbene ho comprato un iPhone 6+: ha uno schermo enorme, mi entra comodamente nella tasca dei jeans e non posso usarlo con due mani senza farlo cadere rovinosamente a terra. Lo comprerei altre dieci volte.
Ogni volta però che lo tiro fuori davanti qualcuno l’affermazione è quasi sempre la stessa: “Ma Apple non era quella che gli schermi grandi no-no? C’era anche la pubblicità, te la ricordi?…”.

Sempre uguali a se stessi

Ora uno dei problemi più grandi che hanno fatto fuori Nokia, Palm e RIM dalla corsa dei mobile è stata proprio quella di avere la presunzione che assunzioni fatte all’alba del 2000 potessero essere ancora valide 7-10 anni dopo.
Si sono detti: la gente preferirà avere una batteria e un telefono più performante che non doversi adattare a scomodi e lenti schermi touch. Meglio spingere sulla produttività che non offrire un’esperienza d’uso più ricca se il prezzo è questo.
Erano certamente tutte assunzioni valide nel 2000, ma non altrettanto nel 2007: quando S.Jobs presentò il primo iPhone etichettandolo come “An iPod, a phone and an Internet communicator” doveva essere chiaro per tutti che di lì a breve sarebbe stato necessario rivedere intere strategie, assunzioni e perfino piattaforme. Ma nessuno di loro lo fece: nel 2014 Nokia è un ricordo da GIF meme, RIM boccheggia a largo e Palm neanche esiste più.
E’ stato il prezzo pagato per essere rimasti fermi con le proprie convinzioni mentre il mondo intorno cambiava.

Cambiare le proprie convinzioni

E questo ci porta ad una domanda: quali assunzioni e tradeoff Apple e Google hanno fatto e che potrebbero dar loro rogne nel futuro? D’altronde dal primo Symbian S60 ad iPhone sono passati appena 5 anni, ma da allora ad oggi ne sono trascorsi ben 8.
In effetti molto di quello che abbiamo visto nell’ultimo anno è stato dettato dalle necessità di rivedere queste convinzioni.

Il primo iPhone aveva una bassa risoluzione, non permetteva l’uso di sw di terze parti e non aveva neanche il multitasking. Alcune limitazioni erano strettamente filosofiche (inizialmente Jobs non voleva assolutamente aprire il telefono agli sviluppatori), altre erano esigenze di marketing e altre ancora limitazioni naturali per qualcosa che era poco più di un prototipo di prima generazione (videocamera base, copia&incolla etc.).
Parecchie di queste però erano dettate dalla necessità di ottenere un buon compromesso tra funzionalità/costi e consumi, esattamente gli stessi problemi su cui si erano scontrati Nokia, Palm e RIM anni prima.
Molto di quanto Apple ha fatto negli ultimi 3 anni è stato dettato dalla necessità di bilanciare nuovamente questi compromessi: una nuova generazione di hardware ha permesso di modernizzare pesantemente iOS senza intaccare la durata della batteria, l’esperienza d’uso o la sicurezza. Ha cambiato e rimpiazzato centinaia di cose, ha sostituito il motore in corsa ed ha rivisto sopratutto tante convinzioni, prima tra tutte l’apertura di alcuni elementi chiave dell’esperienza d’uso (multitasking,estensioni,comunicazioni inter-programma).

Una situazione simile è accaduta anche ad Android dove il tradeoff principale è stato in questo caso l’apertura. Google ha creato Android come un OS open source con una UX molto rozza e un controllo centrale molto blando; è stato certamente il miglior compromesso sia per il tempo a disposizione che per raggiungere il supporto dei costruttori che avevano necessità di abbandonare Nokia/Windows.
In questo modo Google ha creato una piattaforma di successo planetario la cui diffusione ha superato quella di Microsoft con Windows; il prezzo pagato per questo tradeoff è stato una costante frammentazione, una disastrosa esperienza d’uso e un continuo attacco di altre società in casa (Amazon, Xiaomi e anche Samsung).
Ne è valsa sicuramente la pena.
Anche questo convinzione però è cambiata nel tempo: la necessità di controllare il prodotto facendolo veicolo dei propri servizi e contemporaneamente attrarre sviluppatori ha portato Google a centralizzare progressivamente core e funzionalità di Android, arginare i problemi derivanti dalla frammentazione e di fatto trasformando l’OS in un punto di accesso per tutto il mondo di servizi che ruota intorno all’azienda di Mountain View.

Se guardiamo quindi i percorsi delle due società possiamo osservare come siano partiti da assunzioni diametralmente opposte per convergere più o meno su un pensiero unico: Apple ha lasciato controllo dove Google  ne ha preso ed entrambe si sono vicendevolmente scambiate funzionalità e ispirazioni prima peculiarità di una sola piattaforma.

Ad ogni modo, benchè apparentemente sedute allo stesso tavolo entrambe queste società perseguono convinzioni molto diverse: se per Apple il device è smart e il cloud è soltanto un hard disk stupido, per Google invece il cloud rimane l’hub centrale per tutti gli stupidi client.
Sarà questa una delle prossime convinzioni che andrà rivista?

 

La copertina è di Duncan Hull (Flickr – CC License)