Come è ovvio pensare, un bioinformatico lavora con il computer e per comunicare al meglio con questo ha bisogno di parlargli, o meglio scrivergli, in modo per lui comprensibile. Possiamo affermare che una buona parte della giornata del bioinformatico viene trascorsa nella scrittura di codici in specifici linguaggi di programmazione per comandare al pc di eseguire determinate azioni sui dati disponibili, al fine di risolvere dei problemi biologici.

Ma cosa vuol dire programmare?

Immaginate di trovarvi davanti ad un braccio robotico e di volerlo usare per versare dell’acqua, presente all’interno di una bottiglia, in un bicchiere. Per prima cosa occorre comunicare al braccio di afferrare la bottiglia presente su di un tavolo, svitare il tappo, inclinare la bottiglia verso il bicchiere e quando sufficiente acqua è entrata nel bicchiere deve, inclinare la bottiglia lontano dal bicchiere, chiudere il tappo e rilasciarla su di un tavolo.

Questa serie di informazioni elementari che ho appena elencato costituisce l’algoritmo di un programma. Infatti, se voglio comunicare queste azioni al braccio robotico non posso parlargli come farei con mio cugino, devo comunicarci scrivendo con un linguaggio per lui comprensibile, detto linguaggio di programmazione. Questo può essere compreso dalla CPU del braccio robotico, che viene dunque programmato al fine di versare dell’acqua in un bicchiere. Non so sé ho bene reso l’idea di cosa vuol dire programmare, ma arrivati a questo punto mi sento di darvi una definizione più rigorosa di cosa vuol dire programmare, possiamo infatti dire che con il termine programmare si intende creare un programma dotato di un apposito algoritmo che viene eseguito dal computer, o più nello specifico dal processore di una macchina, al fine di svolgere uno specifico compito permettendo ad un utente qualsiasi di risolvere un problema. Colui che costruisce e scrive l’algoritmo di un programma viene chiamato programmatore.

Facile no? Bene in realtà è un po’ più complicato di così, infatti noi esseri umani facciamo fatica a scrivere e capire direttamente nel linguaggio della macchina, difatti questo è un linguaggio detto binario (o di basso livello), ovvero costituito da una serie di 1 e di 0. Per noi, è sicuramente più semplice usare un linguaggio di programmazione, che è orientato all’utente, detto di alto livello, ovvero comprensibile da noi umani e che verrà tradotto in un linguaggio macchina.

Volendo essere ancora più precisi possiamo dire che, il programmatore scrive l’algoritmo con un linguaggio di programmazione creando il così detto codice sorgente che verrà tradotto in due possibili modi:

  1. Attraverso una compilazione con un compilatore. Un compilatore è un programma informatico che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (detto codice sorgente) in linguaggio macchina, il cui codice sarà definito codice oggetto.
  2. Attraverso una interpretazione mediante un interprete. Un interprete è un programma in grado di eseguire altri programmi a partire direttamente dal relativo codice sorgente scritto in un linguaggio di programmazione, senza compiere prima la compilazione dello stesso in codice oggetto, eseguendo cioè le istruzioni nel linguaggio usato traducendole di volta in volta in linguaggio macchina comprensibile dal processore.

Scommetto che vi state chiedendo come e dove un programmatore scrive il codice sorgente? Bene, il programmatore può palare al computer con tre mezzi differenti:

  • Il terminale virtuale, ovvero un programma nativo del computer che emula il funzionamento di un terminale testuale, ovvero un dispositivo che permette di inviare dei dati come input ad un computer e riceverne altrettanti come output. Ad esempio, durante i miei progetti, mi ritrovo spesso a scrivere comandi e codici in diversi linguaggi di programmazione sul terminale di Ubuntu, “lanciando” diversi interpreti al fine di avere una traduzione di ciò che scrivo in un linguaggio macchina.
  • Editor di testo. Un editor molto usato è sicuramente gedit. Solitamente gedit si usa associato al terminale, infatti è frequente scrivere un codice su un editor di testo e successivamente eseguirlo dal terminale.
  • Ambiente di sviluppo integrato (Integrated Development Environment, IDE), questo è un programma che mette a disposizione di un utente un’interfaccia grafica in modo da facilitare la scrittura del codice e la correzione degli errori (il cosiddetto debugging). Un esempio in tal senso è R studio.

Ora che avete, almeno spero, un po’ più chiaro cosa si intende per programmare, affrontiamo un altro quesito importante.

Quale tipo di linguaggio di programmazione usa principalmente un bioinformatico?

Da ciò che ho potuto notare, osservando chi ha più esperienza di me nel settore, i linguaggi di programmazione più usati sono sicuramente Python, Perl e soprattutto R. In ogni modo io, fino ad ora, ho usato soprattutto R nei miei studi, pochissimo Perl e quasi per nulla Python, ma come sapete sono solo agli inizi e quindi la mia esperienza è ancora molto limitata. Attenzione però, spesso capita di lanciare comandi o programmi utilizzando bash. Questo non è un linguaggio di programmazione ma una shell testuale, infatti bash sta per bourne again shell, ovvero un interprete dei comandi che permette all’utente di interagire al meglio con i sistemi operativi Unix e Unix-Like come appunto Linux. La shell, infatti, ti permette di lanciare programmi ed eseguite comandi con facilità.

Prima di concludere vorrei presentarvi dei termini e concetti altrettanto utili ma, per non appesantire il discorso, ho pensato di parlarne separatamente:

  • Un programma per funzionare ha bisogno di un input, ovvero un’informazione iniziale, e grazie all’esecuzione del programma da parte del processore si ottiene come risultato un output.
  • Uno script è un piccolo programma scritto in un linguaggio di scripting, ovvero un linguaggio di programmazione che viene interpretato in linguaggio macchina e che è utile per automatizzare delle routine di sistema. In bioinformatica è molto frequente usare degli script al fine di rendere automatiche e rapide delle azioni ripetute, come ricercare specifiche sequenze in diversi genomi. Quindi attenti agli script, sono sempre dietro l’angolo.
  • Per debugging si intende l’attività di correzione degli errori, detti bug, che possono essere rilevati in un programma in fase di programmazione o durante l’utilizzo di questo.

Bene per ora fermiamoci qui, se non volete perdervi i prossimi articoli, iscrivetevi al blog e fatemi sapere se il contenuto del blog è di vostro gradimento lasciando un commento o mettendo un “mi piace”.

Ciao e a presto.