domenica 29 gennaio 2012

La vera forza di Java

Sempre più spesso si trovano articoli che confrontano i vari linguaggi di programmazione e le varie tecnologie tra di loro.
I tecnici discutono, spesso animatamente, come tifosi se sia meglio un linguaggio o un altro, perché nel criterio di scelta della tecnologia si proietta il nostro modo di scegliere, mettiamo in gioco la nostra capacità di valutare e di scegliere. Una bocciatura alla nostra scelta da parte di un collega, si proietta in una bocciatura a noi stessi, alla nostra capacità e, in definitiva, tale atteggiamento va a toccare le corde della nostra insicurezza.
Col tempo ho imparato a guardare con un certo distacco alle discussioni di questo tipo.

Oggi è più significativo confrontare i framework, piuttosto che i linguaggi. Non è più come negli anni 80 dove si imparavano 15 istruzioni e uno credeva di sapere programmare.
Si programma delegando a componenti esterni i dettagli. Il lavoro del programmatore sembra sempre di più quello del regista di teatro, che dirige degli attori, ma non è egli stesso l'attore.

Esistono ancora realtà dove si programma come un tempo, ma spesso spendono soldi e risorse per farsi in casa lavori già disponibili, solo che non ne conoscono l'esistenza. Ognuno coi suoi soldi è libero di fare come crede.

La prima domanda, che uno sviluppatore o meglio un architetto del software si deve porre, è come il lavoro, che deve realizzare, si interfaccia col mondo esterno, non soltanto sul piano della comunicazione, cioè dei messaggi in ingresso e in uscita, ma anche sul piano dell'ecosistema di strumenti e ambienti nel quale il progetto nasce e si sviluppa, cioè convive.
Ho conosciuto realtà che ogni anno riscrivevano da 0 il progetto, perché non erano più in grado di espanderlo o di modificarlo, perché il programmatore principale del progetto se ne era andato (chissà perché) oppure perché mancava documentazione, ma più spesso perché il progetto era stato analizzato male. Si vedono realtà che danno una enorme importanza alla gestione economica del progetto, ma non hanno la cultura e nemmeno l'abitudine all'analisi. L'atteggiamento di fermarsi a pensare prima di agire non è un'ostacolo all'agilità, anzi è una risorsa che col tempo fa risparmiare in rifacimenti inutili.

Come succede nei giochi di strategia a turni, i primi turni sono i più importanti e determinano spesso l'andamento della partita.
In questo scenario, non è significativo determinare se C# è migliore di Java perché ha Linq o se il C++ è meglio di entrambi, perché può usare meno risorse o se conviene o meno sviluppare in casa un framework per la persistenza o usarne uno standard.

Java è a mio avviso ancora la scelta migliore perché Java non è solo un linguaggio o un framework con un ricco ecosistema: Java è una specifica.

Si possono realizzare virtual machine compatibili, librerie compatibili ma di fondo esiste una regola, che è la specifica. La serietà di chi fa le regole e la fiducia di chi le segue è la forza di Java e in questo è superiore alle altre soluzioni, che sono pilotate spesso da una sola azienda, mentre nell'ecosistema di Java sono sempre convissute più realtà importanti.

La regola, la specifica dettata dall'alto, da un valore aggiunto enorme: la sicurezza dell'investimento.

Questa governance è stata la madre del successo e della diffusione di Java, al di là di alcuni suoi limiti tecnici (l'uso eccessivo di memoria) o di scelte discutibili (Swing che non usa i widget nativi).
La forza di Java è stata la politica di apparire come una regola, più che una tecnica.

Poi ciascuno di noi può proporre una proprio approccio alternativo a quello ufficiale, nel mio piccolo l'ho fatto anche io con EasyDriver ma non si può aspettare che i nomi che contano aderiscano alla sua proposta, se non si trova sotto il cappello del governo delle specifiche di Java.

Sinceramente sono un po' perplesso sulla politica usata ultimamente da Oracle, che vede troppe frizioni, in un ambiente che è diventato forte grazie agli accordi, che rendevano inutili i fork. Prima di tutto viene la specifica, la regola. Litigare con l'impagabile Apache Foundation e con Google non sta aiutando certamente l'immagine della piattaforma, ma il colpo finale sarebbe non potere più contare su una specifica credibile. Questo sarebbe un male per tutta l'industria informatica, cha ha tratto giovamento da questa rivoluzione, chiamata Java, e che farebbe un brutto salto indietro, se dovesse diventare un framework governato come gli altri.

mercoledì 4 gennaio 2012

Come imparare a programmare ?

Un tema spesso dibattuto sul web e fonte di ansia per un giovane appassionato di computer, è come imparare a fare da soli, almeno un po' delle cose che si vedono girare sul computer appena comprato: cioè come imparare a programmare.

Il pensiero comune e il consiglio che ai miei tempi (fine anni 80) mi veniva dato, era di non pensare a cercare una scuola che insegnasse a programmare, perché lo avrei imparato più tardi all'Università.

L'informatica centra con i computer non più di quanto l'astronomia centri con i telescopi (Dijkstra).
Purtroppo l'università pare centrare con la programmazione non più di quanto una scuola alberghiera centri con la scaloppina che mi preparo stasera, leggendo il mio libretto di ricette. (Io, col dovuto rispetto per Dijkstra).

Ai tempi della scelta dell'università, qui in Italia, si vedeva con sospetto, che Informatica era una variazione di Ingegneria, con un biennio quasi uguale. Quindi ore e ore passate non tanto ad apprendere teoria, quando ad immergersi nell'astrazione.

Dopo 5 anni di  liceo scientifico maxisperimentale di Lugo quasi completamente inutile al mio scopo, un ingegnere, che dirigeva una software house, mi consigliò di non rimanere "parcheggiato" per anni all'università, bensì di frequentare un corso professionalizzante, che mi insegnasse cosa mi serviva veramente. Ne trovai uno a Forlì, di un anno, finanziato dalla comunità europea. Seguii il consiglio e ne fui soddisfatto.
Incontro oggi spesso dei laureati in ingegneria e in informatica, i quali lamentano che solo un 10% di ciò che hanno imparato, serve veramente nel mondo del lavoro. Sulla presunta flessibilità mentale poi, anche la settimana enigmistica aiuta il cervello...

Oggi la situazione è migliorata, nel senso che anche all'università si stanno rendendo conto che sapere disegnare una parabola col Pascal, non è proprio ciò, che il mercato cerca.

Il mercato esiste, bisogna che anche gli intellettuali e gli accademici se ne accorgano.

La riforma universitaria della Moratti doveva servire a creare delle scuole professionalizzanti, sulla falsa riga di quelle europee, inglesi e tedesche in primis.
L'obbiettivo, secondo me, è stato mancato prima di tutto perché l'approccio di noi latini, e degli italiani in particolare, è ben lontano dal pragmatismo anglosassone.

Ci piace il bizantinismo al punto tale, che ci sembra necessario. Per andare da un punto A ad un punto B non si cerca la strada più breve, il segmento, bensì la curva che politicamente accontenta più fazioni, come se dei poli magnetici deviassero il percorso...

Le lauree brevi triennali, continuano a dare un'offerta formativa troppo astratta, che non si spende sul mercato, e non fornisce, per ragioni di tempo contingentato, le basi necessarie per affrontare gli argomenti più avanzati, col doppio risultato, che raggiungere la laurea è difficile, perché il percorso non offre ad ogni tappa le basi utili sulle quali poggiare l'apprendimento per gli esami successivi, poi perché l'offerta non è sufficiente affinché il mercato possa assorbire i neolaureati senza costi di formazione specifica.

Se si considera che in azienda di formazione se ne fa pochissima perché "con la crisi bisogna tagliare le spese", figuriamoci come possono aspettare che un neo assunto apprenda ciò che gli serve sul campo.
Il risultato reale è che solo chi si adatta velocemente ad un posto di lavoro poco formativo, sopravvive in azienda, per gli altri è precariato.

Invece che lamentarsi sempre per i fondi troppo scarsi, a ragione, le università dovrebbero rivedere il loro rapporto con le imprese e con il mondo del lavoro, smettendo di guardarlo dall'alto in basso, in attesa che lo Stato, se può, imponga una riforma ancora più radicale, cioè in attesa che l'Europa ce la imponga, come se fosse un tutor che rimedia alla nostra incapacità di reggerci sulle nostre gambe.

Per rispondere alla domanda che si può porre un giovane appassionato di computer di oggi, io direi:
"non aspettare fino all'università, ma comincia da subito a studiare magari in un istituto tecnico ad indirizzo informatico oppure a ragioneria programmatori. Comunque fai quello che ti piace e nessuno ti impedisce di avvicinarti a qualche manuale americano di ingegneria del software. Impara bene l'inglese, ma soprattutto sfoga la tua creatività naturale, magari programmando".

Qualche facoltà, piano piano, prova a cambiare il cliché che vede la programmazione come matematica applicata. Trattandosi di una materia così interdisciplinare, è bello vedere sorgere corsi di studio come Informatica Umanistica a Pisa, che forma un background utile nel mondo della conservazione dei beni culturali (il vero  petrolio italiano), oppure a Trento una facoltà di Interfacce e Tecnologie per la Comunicazione, inserite nella facoltà di Scienze Cognitive, oppure Informatica per il Management a Bologna, con nozioni di economia e diritto.

Avendo fatto il programmatore professionista per 15 anni, ho sempre sentito la mancanza di un background  di economia aziendale, diritto di internet e psicologia (provate a lavorare in team o a entrare in una qualsiasi azienda e vi renderete conto di quanto valga l'intelligenza emotiva...)

Ciao !