Python Tutorial 01: Cos’è Python?
BREVE PRESENTAZIONE
Chi sono
Sono uno studente di Ingegneria appassionato di Informatica. Programmare è un hobby.
Chi non sono
Non sono un programmatore, nè un professionista.
Quanto riportato nei tutorial è frutto di esperienza, ragionamenti e studi personali.
Questi tutorial vogliono dare una base di partenza per apprendere un nuovo linguaggio di programmazione: Python.
Non pretendo di mostrare l’intero panorama, solo quanto sia interessante.
Ma ora iniziamo!
TUTORIAL 01 – Cos’è Python?
Fu ideato da Guido Van Rossum nel 1996, che si ispirò per molti tratti ad un altro linguaggio, l’ ABC, creato circa 20 anni prima.
L’ABC era indirizzato prevalentemente ai novellini della programmazione, con scopi didattici: da ciò deriva una delle principali caratteristiche di Python, la semplicità.
Andiamo con ordine, per capire Python è necessario prima conoscerlo.
Cos’è un linguaggio?
Domanda banale? Credo di no.
In generale è un sistema di comunicazione fra due parti.
Esistono due tipi di linguaggio:
- LINGUAGGI NATURALI: tutti i linguaggi che si sono sviluppati ed evoluti naturalmente. Non sono stati progettati da individui. Esempi sono l’italiano, l’inglese, il francese…
- LINGUAGGI FORMALI: tutti i linguaggi che devono assolvere una determinata funzione, e per questo sono stati progettati Esempi sono la matematica, le formule chimiche…
Cos’è un linguaggio di programmazione?
E’ un linguaggio FORMALE dotato di un lessico, una sintassi, una semantica ben definiti, utilizzato per programmare una macchina: ovvero per spiegare ad una macchina che cosa fare. Ciò avviene attraverso la scrittura di righe di codice, ovvero di un programma.
Dice il mio professore di scienze delle costruzioni : Il computer è un imbecille veloce
Questo cosa significa? Che di per sé i nostri computer non sanno fare nulla! Vanno appunto istruiti: e questo sarà il nostro obbiettivo. Imparare ad istruire il computer, perchè faccia ciò che noi chiediamo a lui.
Ma parlare al computer non è così semplice: bisogna appunto impiegare strumenti appositi: i linguaggi di programmazione.
Vi siete mai domandati cosa differenzia tutti i linguaggi di programmazione esistenti?
Perchè ne esistono TANTI? Per confondere chi si approccia all’informatica? Per masochismo:ci piace dire le stesse cose in modi sempre più complicati? Altre idee?
Beh, una delle risposte che posso darvi è che ogni linguaggio è creato per scopi particolari.
Vediamo di mettere in chiaro alcuni punti. Classifichiamo i linguaggi in base a:
Gestione delle istruzioni:
Abbiamo accennato che scrivere un programma significa “scrivere righe di codice”.
Nulla di strano! Per codice si intende una sequenza di caratteri propri di un linguaggio di programmazione. Delle normali frasi, dunque, ma che abbiano un senso per il computer.
Queste righe di codice si dicono istruzioni,nel senso che “istruiscono” il computer, come abbiamo detto prima. Distinguiamo
- LINGUAGGI IMPERATIVI (o PROCEDURALI): Il computer elabora una riga del programma per volta, dall’alto in basso, ed eventualmeente può saltare da un blocco di istruzioni all’altro. I dati iniziali vengono elaborati tramite operazione eseguite in sequenza, fino ad arrivare al risultato finale. E’ possibile eseguire cicli*, salvare in memoria temporanea dei dati…
- LINGUAGGI FUNZIONALI: I dati iniziali possono solo essere elaborati tramite funzioni* e ricorsione*. Non è possibile assegnare in memoria dei dati, non si possono eseguire cicli* se non ricorsioni. In pratica, tutto va ridotto a funzioni, funzioni che diventano argomento di altre funzioni, e così via. Non ho esperienza in questo campo, comunque capisco quanto sia complicato!
*Ne parleremo, se non capite subito non preoccupatevi.
Traduzione in linguaggio comprensibile al computer:
Le righe di codice che scriviamo si dicono SORGENTE.
Queste non possono essere comprese direttamente dal computer, poichè lui capisce un solo linguaggio: il codice macchina, un insieme di 0 ed 1, per noi con poco senso.
Quindi i casi sono due: o parliamo come lui, quindi scriviamo il codice in linguaggio macchina (potete divertirvi se volete, io non ci provo nemmeno
), o scriviamo come ci è più comodo, cioè usando il linguaggio di programmazione che preferiamo, e usiamo un “traduttore”, per convertire il nostro sorgente il linguaggio macchina.
I linguaggi compresi direttamente dal computer si dicono di BASSO LIVELLO, mentre quelli comprensibili agli umani si dicono di ALTO LIVELLO.
C’è poi un altro problema: il processore di ciascuno dei vostri computer ha un proprio linguaggio macchina! Pensate a quanti tipi di processore esistono. Fatto?
Bene, quello è il numero di linguaggi macchina esistenti. Pensate che casino (si può dire?) impararli tutti…
Personalmente opto per la seconda scelta, come il 99% delle persone che studiano informatica. Immagino ci sia l’1% di masochisti, come in tutte le cose (magari lo fanno per lavoro…)
Apurato ciò distinguiamo, in base al tipo di “Traduttore”
- LINGUAGGI COMPILATI: si avvalgono di un programma, detto “COMPILATORE”, che traduce in linguaggio macchina relativo al processore nel proprio computer l’intero sorgente. Il codice risultante dalla compilazione si dice codice OGGETTO (stiamo sempificando). Interviene poi un ulteriore programma, detto “LINKER” che incolla al file binario in linguaggio macchina, tutte le informazioni necessarie per rendere indipendente il programma appena compilato dal codice sorgente. Terminata l’operazione, si dispone di un bellissimo programma, detto ESEGUIBILE, che sarà dato in pasto al vostro processore, e farà proprio quello che noi avevamo indicato nel sorgente. Ma, cambiando computer, e potenzialmente processore, cosa accade? Beh, semplice. Il programma non funziona più
E’ necessario quindi ricompilare il sorgente direttamente sul nuovo computer, con un compilatore adatto al nuovo processore. Inoltre, è necessario ricompilare il sorgente ogni volta che si apportano modifiche al codice dello stesso. Potete considerare il vostro eseguibile come una istantanea del vostro sorgente:se aggiornate il sorgente, dovete scattare un’altra istantanea se volete mantenere aggiornato il vostro eseguibile. Divertente no? Ci sono però anche aspetti positivi. L’eseguibile è compreso dal processore in modo molto veloce: è scritto nella sua lingua, d’altronde. Inoltre, inviando ad un amico l’eseguibile, egli non avrà a disposizione il sorgente! Cosa significa? Che se scrivete un sorgente e siete gelosi del vostro codice, ma avete necessità di inviare il programma a qualcuno, compilarlo è la soluzione adatta: il vostro amico potrà usare il programma, ignorando quale sia il codice sorgente da voi scritto! Uno dei più blasonati linguaggi compilati è C. - LINGUAGGI INTERPRETATIIndovinate un po’? Perchè il sorgente sia tradotto in linguagggio maccchina, si avvalgono di un… INTERPRETE! Interviene infatti un apposito programma che RIGA PER RIGA traduce in linguaggio macchina il codice sorgente, alternando momenti di lettura/comprensione della riga di codice, traduzione in linguaggio macchina, ed esecuzione della singola riga del sorgente. Il tutto per ogni riga del sorgente… che lentezza! Ma c’è una GRANDE nota positiva: nei linguaggi compilati, il compilatore si occupa solo di tradurre il codice sorgente in linguaggio macchina, ed è il processore che esegue il codice oggetto, restituendo a schermo il risultato. Nei linguaggi interpretati invece è l’interprete che legge/capisce/esegue il codice sorgente: dunque 0 problemi di incompatibilità coi processori! Questa caratteristica garantisce la PORTABILITA’ delle applicazioni, ovvero la possibilità di portare applicazioni su altri computer/sistemi operativi senza dover modificare nulla. Inoltre, possiamo effettuare cambiamenti al codice sorgente senza ricompilare SEMPRE tutto (per programmi complessi può richiedere tempo, ed il tempo è denaro!) Unico problema: per eseguire un programma scritto in un linguaggio interpretato, si deve disporre sul computer, sia del codice sorgente, sia dell’interprete.
- LINGUAGGI IBRIDI: Ad ogni problema c’è una soluzione:molti linguaggi interpretati sono ricorsi ad approcci IBRIDI, per diminuire il gap di velocità rispetto all’esecuzione di linguaggi compilati. Presentano dunque una prima fase di compilazione del codice sorgente, ma il codice oggetto questa volta non è in linguaggio macchina, bensì in un linguaggio intermedio, che ha il pregio di essere molto simile al linguaggio macchina, ma più astratto: esso non dipende dal tipo di processore in uso!Interviene infine un interprete, che… interpreta le istruzioni da linguaggio intermedio a linguaggio macchina: essendo i due molto simili, il tempo di interpretazione è ridottissimo, ed inoltre, grazie all’astrazione del linguaggio intermedio, non ci sono problemi di incompatibilità fra processori. Il meglio del meglio
Quindi, dopo una noiosa introduzione, ora possiamo inquadrare meglio chi è Python.
Python è un linguaggio…
- formale
- imperativo (ma può anche essere funzionale)
- ibrido (ma esistono anche compilatori all’occorrenza, quindi è anche compilato)
Insomma… dire versatile è poco!
Ma ancora non è finita…
Diamo le ultime caratteristiche di Python, non più tecniche (siete salvi
)
- SEMPLICE
La sintassi di python è molto semplice. Ricorda molto uno pseudocodice scritto in inglese.
Per chi non lo sapesse, uno pseudocodice è un insieme di istruzioni, che non segue regole particolari di sintassi. Di solito lo pseudocodice è impiegato in alternativa a diagrammi di flusso, prima di implementare un programma in un qualsiasi linguaggio di programmazione, per “chiarire le idee su come procedere”: una sorta di lista di cose da fare.
Un esempio di pseudocodice è:
Chiedi all’utente un numero
Chiedi all’utente un altro numero
Somma i due numeri
Scrivi su schermo la somma
Questo pseudocodice potrà poi essere tradotto in un linguaggio di programmazione a scelta, usando le opportune istruzioni.
Inoltre, in Python esistono solo una trentina di key-word (parole chiave, ovvero le “parole” usate nel linguaggio di programmazione).
In linea teorica, è possibile costruire un sorgente anche complesso, conoscendo solo diciamo 20 delle trenta parole chiave. Molte di queste parole chiave sono molto complesse. Ad esempio:
Print, or, and, for, while, in, switch…
Ora capite cosa volevo dire sopra col discorso dello pseudocodice in inglese?
Se ci pensate, magari riuscite già a capire cosa ordinano al computer di fare…
Pensate che per c++ esistono più di ottanta keyword
Python è gratuito ed opensource: è possibile distribuire programmi realizzati in Python, usare codice preso da programmi di altri…
Insomma, è possibile condividere ciò che si desidera.
Questa è una caratteristica essenziale: essendo opensource, chiunque è libero di migliorare python, magari scrivendo nuove estensioni, librerie… Questo è il motivo per cui Python viene quotidianamente migliorato da una community molto attiva.
- ESTENSIBILE
E’ possibile implementare nel proprio programma, righe di codice scritte in C/C++.
Lo stesso potranno fare i programmi in C/C++ con Python
- LIBRERIE ESTENSIBILI
Le librerie sono insiemi di moduli. Un paragone nel materiale potrebbe essere una casetta degli attrezzi, mentre i moduli sono il cacciavite, il martello…
Se ci occorre un particolare strumento nel nostro programma, basta dire a Python di prenderlo dalla sua libreria e metterlo a nostra disposizione.
E se lo strumento che richiedianmo non è a disposizione di Python?
Python ha a disposizione una libreria ENORME, che copre moltissime necessità degli utenti: dalla gestione di database, di funzioni matematiche, crittografia, FTP, fino alle GUI (Graphical User Interface), ovvero interfaccie grafiche per i nostri programmi.
Ma ovviamente i moduli a disposizione non sono infiniti.
Se ci manca un modulo, basterà scaricarlo dal web (possibile perchè Python è opensource e libero), oppure crearlo da noi.
- OBJECT ORIENTED
Come molti dei moderni linguaggi di programmazione, Python è un linguaggio orientato agli oggetti.
Per capire cosa significa sono necessarie ulteriori conoscenze di base, ma ci arriveremo presto!
Nel prossimo post ci occuperemo di come installare Python, e del nostro primo programma!
Stay tuned!