Scrivere programmi o programmare è un’attività molto creativa e soprattutto gratificante se risolve problemi automatizzando attività ripetitive e noiose se svolte manualmente. L’ETL è una di queste. Nella maggior parte dei casi le procedure di estrazione, trasformazione e caricamento (load) sono processi ripetitivi che devono andare avanti nel tempo e funzionare in una macchina (fisica o in cloud) senza intoppi. Di seguito propongo una lista non esaustiva delle fattispecie risolte costruendo un sistema robusto e completamente automatizzato. Per costruire questi automatismi si deve necessariamente interagire con le macchine (fisiche o virtuali) imparando a “colloquiare” amichevolmente con la CPU indicandole cosa fare esattamente e come utilizzare in maniera ottimizzata le varie componenti di cui dispone. Se si smonta una di queste macchine (un personal computer, un server, un tablet, uno smartphone, arduino, ecc.) ritroviamo nel tavolo generalmente questi tipi di componenti: Per far funzionare tutto questo “ferro” affinché risolva i nostri problemi dobbiamo dire alla CPU cosa deve fare “passo dopo passo”. Non potremo mai comunicarglielo in tempo reale (è troppo più veloce di noi), gli lasceremo una lista delle “cose da fare” scrivendo in anticipo delle istruzioni memorizzate in un file che diventano un programma. La programmazione è l’arte di scrivere queste istruzioni che, ottimizzando il funzionamento di tutte le componenti del computer, ci permette di velocizzare un’attività o un intero processo. Il problema è che la CPU non è poi così “amichevole” dato che capisce solo il cosiddetto “linguaggio macchina” ovvero una serie finita di 0 e 1 (000110010.….0000010101010). Dover programmare in linguaggio macchina sarebbe scoraggiante per chiunque (pochi esclusi) per questo sono nati nel tempo linguaggi che consentono di scrivere programmi con una grammatica ed una sintassi più “umana” che vengono poi “tradotti” in linguaggio macchina. In base alla modalità di traduzione questi linguaggi di programmazione si dividono in due categorie: interpretati e compilati. La differenza è semplice, la descrivo con un esempio. Immagina di essere una CPU e di voler preparare una pizza seguendo una ricetta (il programma) che ti hanno fornito (in un file) in dialetto napoletano (linguaggio di programmazione). Ovviamente non conosci il dialetto napoletano e capisci solo il dialetto aretino (il linguaggio macchina). Puoi sbloccare la situazione in due modi. Il primo è che qualcuno (il compilatore del linguaggio di programmazione) traduca interamente la ricetta della pizza in aretino e te la fornisca (in un file eseguibile). A questo punto sarai in grado di leggere da solo la ricetta scritta in aretino e preparare la pizza. Farai molto velocemente! Il secondo modo è che tu abbia un amico napoletano (l’interprete del linguaggio di programmazione) che conosce i dialetti. Quando ti chiedono di preparare la pizza, il tuo amico si siede accanto a te e ti traduce la ricetta in aretino fornendotela passo dopo passo mentre stai preparando il piatto. Arriverai allo stesso risultato ma ti ci vorrà più tempo. I linguaggi compilati sono quelli più veloci, alcuni esempi: C, C++, Rust e Go. I linguaggi interpretati sono più lenti dei linguaggi compilati (tuttavia con l’affermarsi della compilazione just-in-time il divario sta diminuendo), alcuni esempi: PHP, Java (semi-interpretato), JavaScript e Python. Il compilatore just-in-time è l’amico napoletano che ti si siede accanto con già dei fascicoletti tradotti in aretino dei vari passaggi della ricetta. Ti fa comunque perdere del tempo, ma sei in buona compagnia e il lavoro lo porti a termine felicemente. ETLX tratta di ETL professionale fatto con Python. Perché alla data del presente contributo è preferibile Python?