Accettare i cambiamenti o soccombere all’evoluzione…

Qualche tempo fa stavo discutendo con alcune conoscenze sullo sviluppo e aggiornamento dei vari linguaggi “mainstream”. L’avanzata dei sistemi multicore, si dice, ha portato alla riscoperta di alcune caratteristiche dei linguaggi funzionali.

Così, un po’ per moda, un po’ per necessità, linguaggi come C# e (perfino) C++ ora includono feature come le espressioni lamba/closure. Java 7, il cui standard è stato recentemente votato e ratificato, non le include ancora ma lo farà in futuro. Qui inizia la discussione.

Che impatto può avere su uno sviluppatore un’aggiunta/cambiamento di paradigma nel linguaggio con cui scrive abitualmente?

La “fiumana del progresso

La mia esperienza mi impone di osservare come qualunque novità non sempre viene accettata immediatamente e talvolta non lo sarà mai: un po’ per marketing, un po’ per mostrarsi aggiornati allo standard dell’arte, molti vendor producono ed introducono sul mercato una sfilza di tecnologie di cui solo una parte incontra successo.

Come dire: il fatto che un linguaggio ora supporti una certa caratteristica, qualunque essa sia, non significa che poi il mondo la userà davvero. Di solito ha successo qualcosa che appare agevolare il lavoro, sia esso qualche meccanismo per scrivere meno codice (cfr. LINQ) o che ti permetta di fare qualcosa di impossibile in passato.

Il successo delle lambda in C# 3+ è dovuto al framework stesso, che ora la sfrutta in modo pesante. Basti pensare al citato LINQ, un linguaggio-nel-linguaggio (o per essere precisi, una sorta di DSL) interamente basato su di essa. L’evoluzione, Parallel LINQ, reca così tanti benefici che è impensabile ora come ora farne a meno.

Il risultato è che fra C# 2 ed il 3+ c’è un mezzo abisso: sì, puoi continuare a scrivere ancora “alla maniera del C# 2” anche in Visual Studio 2010 (retrocompatibilità garantita), ma ne vale la pena?

Secondo me no. Una mezza giornata spesa a capire ed imparare ad usare le lambda in C# si concretizza poi nella possibilità di usare tutte le feature del linguaggio che ne fanno uso.

Inoltre, come è normale aspettarsi, l’evoluzione di qualcosa parte sempre dallo stato attuale per cui le nuove feature di un linguaggio di solito si appoggiano ad altre feature recenti (vedi PLINQ, che si appoggia su LINQ).

Perdere il tram dell’evoluzione, significa restare via via sempre più indietro. Non accettare per default il cambiamento, sperando che l’evoluzione sia solo un fuoco di paglia, è pericoloso per la propria carriera professionale.

Un’obiezione interessante

Ogni giorno esce qualcosa di nuovo ed è impensabile seguire ed imparare tutto, anche per uno sviluppatore al limite dell’early adopter seriale. Ne consegue che, citando una mia conoscenza:

“Sul mercato escono in continuazione tecnologie nuove, che spesso rimpiazzano quelle precedenti. Che senso ha imparare una cosa sapendo che nello spazio di poco tempo sarà superata?”

Detta così è difficile controbattere. Tuttavia è un’affermazione un po’ troppo generica, troppo pessimista per così dire. Vero è che tutto evolve e muta, ma se un qualcosa è sul mercato da qualche anno e continuano ad estenderlo, allora forse significa che è abbastanza “stabile” da valere un’occhiata in profondità.

Dopotutto cosa è più rischioso fra rifiutare di imparare qualcosa, trovandosi impreparati nel mercato, e dare un’occhiata a qualcosa per poi scoprire che quella cosa a breve scomparirà?

Personalmente penso sia più rischioso il primo caso sebbene il secondo, senza un minimo di accortezza, significa scommettere (quindi investire) su un cavallo chiaramente destinato a perdere.

Il problema non è solo l’evoluzione

Sono arciconvinto, tuttatavia, che il fulcro del problema non sia solo l’inarrestabile progresso tecnologico ma molto dipenda dalle inclinazioni e dalla “resistenza” del singolo.

Sul lungo periodo uno sviluppatore medio con un bel po’ di anni di esperienza nel campo avrà certamente visto, imparato, usato ed infine dovuto/potuto dimenticare un bel po’ di tecnologie. Si può ben capire perchè, dopo qualche anno, diventi refrattario e si opponga perfino all’ennesima iterazione dell’algoritmo impara-usa-dimentica. Ci sono persone che amano “imparare per l’imparare” ma ce ne sono molte di più che si applicano (o intendono farlo) solo se ricevono una qualche garanzia sul medio-lungo termine. C’è infine un’intera categoria di persone che si fermano a quello che hanno imparato “tanto tempo fa” ed è difficile che, per loro iniziativa, si dedichino ad altro o anche solo provino a “rinfrescare” le loro conoscenze su quello che usano quotidianamente.

Indipendentemente dal comportamento del singolo, tuttavia, il mondo va avanti. Imparare è rischiare ma senza rischiare difficilmente si può migliorare.

Non siamo tutti fatti allo stesso modo ed il Mercato, incluso quello del lavoro, nè è ben consapevole.

Che ne pensate?

Contrassegnato da tag , ,

5 thoughts on “Accettare i cambiamenti o soccombere all’evoluzione…

  1. Luigi scrive:

    Per me, le nuove features di un linguaggio (o addirittura un altro linguaggio) che genera un certo appetito nella mia testolina da programmatore, prima o poi hanno il sopravvento. Sopratutto se nella fase di studio scopro che molte cose che facevo in n+10 passi ora le faccio in n+5. Certo, prima di applicare faccio un test trita e ritrita (a casa, fuori dal lavoro) ma se scopro che questa è la soluzione migliore e ho la possibilità di garantire il funzionamento con vers. precedenti….
    (
    es. java:

    try {
        String filename = “C:\\MyClass.class”;
        DataInputStream in = new DataInputStream(new FileInputStream(filename));
        int magic = in.readInt();
        if (magic != 0xcafebabe) {
            log.info(filename + ” is not a valid class!”);
        }
        int minor = in.readUnsignedShort();
        int major = in.readUnsignedShort();
        log.info(filename + “: “ + major + ” . “ + minor);
        in.close();
    } catch (IOException e) {
        log.info(“Exception: “ + e.getMessage(), e);
    }
    )

    lo faccio…

    Conclusione. La nostra natura (di chi scrive e spero di chi legge, io) è quella di studiare per imparare a fare meglio le cose, sia per nostra soddisfazione sia per colui che ha fiducia nel nostro lavoro. Quindi potremmo parlarci su per tanto tempo ma l’istinto di conservazione alla lunga, non dura…

  2. Luigi scrive:

    p.s. Ma Infomedia? E’ da tanto che non aggiornano…
    ;)

  3. jp scrive:

    @Luigi: beh, visto il codice che hai scritto, allora apprezzerai di certo il try-with-resources del nuovo Java 7 (simile all’istruzione using applicata alle risorse del C#). :D

    L’esempio che trovi seguendo il link rende benissimo l’uso (nonchè la gestione delle risorse, con tanto di chiusura automatica):

    static String readFirstLineFromFile(String path) throws IOException {
      try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        return br.readLine();
      }
    }

    Scherzi a parte, i linguaggi tendono col tempo a diventare ingombranti e non tutte le novità semplificano davvero la vita al programmatore. Imparare ad usare un nuovo paradigma in un linguaggio (es: LINQ in C#) richiede tempo e non è detto che davvero serva a tutti, per cui capisco chi se la prende comoda, meno chi osteggia a priori le novità. Però se non impari le novità o quantomeno non le conosci, rischi di perdere il treno. Questo era il senso del post. :)

    Ciao & grazie di essere passato! ^^

    PS #1: Infomedia resiste, pur con qualche rallentamento… :)
    PS #2: ho come l’impressione che il filtro antispam abbia tagliato parte del tuo commento. Mi sbaglio?

  4. Luigi scrive:

    Veramente quel codice l’ho copiato da Stackoverflow. ;) Mentre leggevo il tuo articolo mi son domandato se fosse possibile individuare la versione del JDK a runtime. Cercando ho trovato… e alla fine ho dedotto. Grazie al tuo articolo oggi ho imparato che si può… :)

    ps2: se parli della parentesi.. è stato un mio errore (nel cut’n'paste :) )

    ps3: E dato che ringrazi sempre chi “passa”.. Permettimi di ringraziare te. Il tuo blog, il tuo modo di pensare e le tue conoscenze. Sono un punto di riferimento per me. Grazie ancora!

  5. jp scrive:

    @Luigi: lieto che i miei post ti piacciano e ri-grazie di essere passato. ^^

    Quanto al “taglio”, pensavo che Akismet si fosse mangiato qualcosa perchè il tuo commento risultava “cleared”. Poi, dopo un caffè, ho capito che intendeva che non l’aveva marcato come spam.. :P

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 259 other followers