Perché il linguaggio R risulta difficile da imparare?

Perché il linguaggio R risulta difficile da imparare?

Tempo addietro pubblicai un post sull'argomento ripromettendomi di tornarci su in un momento più tranquillo. Quel momento è arrivato.

Cosa è R

R è un ambiente e un linguaggio pensato per l'analisi statistica e la manipolazione dei dati a fini statistici. Ha una storia lunga oltre 25 anni che potrebbe essere estesa anche a mezzo secolo se si tiene conto anche della storia di S.

I suoi sviluppatori e la comunità che gli si è riunita intorno hanno concepito un linguaggio di programmazione piuttosto particolare, con caratteristiche e strutture dati peculiari.

Gli sviluppi più recenti stimolati dall'avvento di big data, data science e calcolo ad alte prestazioni hanno aggiunto ulteriori fattori di complessità o, meglio, di diversità.

Le difficoltà oggettive di apprendimento

Per iniziare R è un linguaggio di programmazione a tipizzazione debole che può compiere implicitamente conversioni di tipo durante la manipolazione dei dati. Le conversioni implicite di tipo possono causare problemi e risultati inattesi e, in generale, sono indice di disattenzione o superficialità. Nella maggior parte dei corsi introduttivi su R, tuttavia, sia la questione della tipizzazione debole (che in realtà è più un vantaggio che un problema nei linguaggi interpretati), sia il problema delle conversioni di tipo sono trattati molto superficialmente o non lo sono affatto.

In secondo luogo, R ha una sintassi piuttosto libera, soprattutto rispetto all’uso degli spazi, ed esistono varie linee guida stilistiche per la redazione degli script, ad esempio quella del {tidyverse}.

Poi R ha un grave problema con i messaggi di errore che origina principalmente dall'assenza di una sezione specificamente dedicata a questi messaggi nelle pagine del pur ottimo sistema di documentazione in linea. Naturalmente a questo problema contribuiscono molte altre caratteristiche del linguaggio e dell'ecosistema che gli si è creato intorno.

R è quanto di meno monolitico io conosca nei linguaggi di programmazione. Cito dalla voce del dizionario Treccani:

monolìtico agg. [der. di monolito] (pl. m. -ci). – 1. Che è formato da un solo blocco di pietra: statua m.; colonna m.; obelisco monolitico. Per estens., nella tecnica, di strutture complesse fatte di parti unite assieme e non distaccabili: per es., ala m., negli aeroplani, in contrapp. all’ala in tre pezzi. In elettronica, circuito m. (o circuito integrato m.), circuito realizzato su un’unica piastrina di semiconduttore tramite una successione di operazioni fotochimiche che permettono di lavorare con molta precisione i successivi strati (di silicio, alluminio, ecc.) che costituiscono il singolo elemento circuitale, e di ottenere quindi un’elevata densità di componenti. 2. In senso fig., che manifesta compattezza di volontà, decisione, unità e talora anche rigidezza d’azione, riferito in partic. a gruppi di persone: un partito m.; un’organizzazione m. o anche, che forma un blocco monolitico.

Cercherò di seguito di approfondire alcuni punti traendo spunto dalla parola ecosistema utilizzata poco sopra. In realtà attorno a R sono sorti nel corso degli anni tanti ecosistemi, nel senso figurato di «associazione di elementi in un complesso organico e funzionale».

  • In R esistono almeno tre implementazioni del concetto di data frame, ovvero la struttura degli oggetti che contengono dati da analizzare, con i relativi ecosistemi di riferimento: quella nativa realizzata attraverso la funzione data.frame(), quella propria del pacchetto {data.table} e quella propria del Tidyverse presente nel pacchetto {tibble};
  • In R esistono due sistemi grafici distinti quello di base (pacchetti {graphics} e {grDevices}) e il pacchetto {grid} su quale sono basati sia il pacchetto {lattice}, ormai piuttosto desueto, sia {ggplot2} di cui oggi non si può fare a meno.
  • In R convivono vari paradigmi di programmazione ed esistono almeno tre modelli di programmazione ad oggetti: S3, S4 e R6.
  • Esistono vari repository in cui reperire pacchetti aggiuntivi per R. Il CRAN è il principale.
  • Esiste una vastissima collezione di pacchetti aggiuntivi per R di qualità variabile con frequenti duplicazioni di funzionalità. Solo sul CRAN sono più di 20mila. Molti pacchetti sono organizzati in veri e propri ecosistemi, come a esempio {tidyverse}, {fastverse}. Notevole per la navigazione fra i vari ecosistemidi pacchetti l'iniziativa R-universe e il sito web collegato https://r-universe.dev/.
  • R può interfacciarsi facilmente con codice sorgente scritto in C, C++, Fortran, Java, Python e, quindi, con le migliori librerie computazionali esistenti.
  • Sono disponibili varie interfacce grafiche per R (Rattle, R-Commander, Rkward), vari IDE (Posit’s RStudio, Tinn-R, Stat-Et plugin per Eclipse e estensioni per Microsoft Visual Studio Code) e vari software che utilizzano R come motore di elaborazione (JASP, Jamovi, BlueSky). Sicuramente ho dimenticato qualche altro software, ma quello che conta è che ognuno di questi prodotti ha una propria filosofia e un proprio ecosistema.
  • Infine, R è un interprete multi piattaforma e sussistono ovvie differenze nell'installazione, nelle modalità di utilizzo e aggiornamento fra i vari sistemi operativi.

In questa sede non voglio parlare delle varie comunità di sviluppatori e ricercatori che si sono sviluppate attorno a R. Aggiungo solo che la varietà di esperienze e punti di vista addensati attorno a R è vera ricchezza, pur causando qualche problema agli utenti meno esperti. D'altra parte la statistica e le sue sorelle (Data Science, Data Mining, Machine Learning...) sono scienze un po' bastarde, di dubbia origine, in cui di norma ogni problema risolto ha avuto origine in un dominio scientifico e in una comunità di ricercatori diversi dalla statistica.

Le difficoltà soggettive di apprendimento

Finora abbiamo elencato dei fattori che possono costituire una difficoltà oggettiva per un utente alle prime armi.

A queste difficoltà oggettive si vanno a sommare le caratteristiche soggettive di coloro a cui spesso viene proposto R come strumento per l'analisi dei dati e come linguaggio utile ad apprendere i primi rudimenti di programmazione.

La maggior parte degli utenti italiani che si avvicinano a R lo fanno nell'ambito di corsi universitari che, nel loro percorso, affrontano per la prima e spesso anche unica volta statistica e programmazione, talvolta anche con l'obiettivo di concentrare in un unico corso tutte le possibili tecniche di analisi statistica e di modellazione.

A questo si deve aggiungere la tendenza di molti docenti a riproporre "ricette" reperite nei libri o in rete senza mai guardare e invitare a studiare la documentazione a corredo.

La documentazione in R è fondamentale. È l'unico faticosissimo modo per districarsi fra errori e risultati inattesi, per sviluppare un minimo di consapevolezza in ciò che si fa con R.

Se non si è disposti a studiare la documentazione e a sperimentare per sviluppare consapevolezza dei meccanismi peculiari in questo linguaggio, l'esperienza dell'utente con R potrà essere solo un frustrante insuccesso, annoverato nelle cronache come una sorta di maledizione.

Andrebbe, a mio avviso, evitato l'insegnamento di questo linguaggio a quanti abbiano a che fare con la statistica (e con il calcolo e la rappresentazione grafica in generale) per la prima volta; soprattutto se essa fosse anche l'unica volta.

I concetti statistici di base possono anche essere insegnati con un foglio elettronico (che andrebbe evitato nella professione e nel lavoro dello statistico). Modelli e tecniche di analisi multivariata potrebbero essere spiegate in modo più efficace con un software punta&clicca, al limite evidenziando come di solito sia possibile organizzare i singoli comandi impartiti utilizzando menù e finestre di dialogo in script.

R dovrebbe essere introdotto più avanti nel corso degli studi o dovrebbe essere studiato più a lungo in più corsi, possibilmente organizzati in livelli crescenti di competenze e abilità.



Davide Massidda

Data Scientist at Kode | Ruling the chaos using data

1 anno

C'è un altro aspetto che varrebbe la pena sottolineare e che, all'opposto, rende R un linguaggio facilissimo da imparare: propone delle funzioni che sono di solito nativamente vettorizzate, e se non lo sono possono essere facilmente vettorizzate tramite i paradigmi della famiglia apply. È come avere Python con numpy già perfettamente integrato nell'ambiente; si tratta di un aspetto da non sottovalutare, perché permette di mettere da parte dettagli "marginali" di pura programmazione, per puntare dritto verso le analisi dei dati. Meno distrazioni, più focus sulle procedure, e questo lo rende particolarmente adatto sia a fare, sia a imparare la statistica.

Per visualizzare o aggiungere un commento, accedi

Altri articoli di Marco Biffino

Altre pagine consultate