Python

Introduzione               
 

Python è un linguaggio ideato dall'olandese Guido van Rossum nei primi anni 90, la sua comparsa nellarena degli strumenti dedicati alla programmazione si è avuta per la precisione nel 1991. Si tratta di un linguaggio quindi ormai giunto a piena maturità e che presenta molteplici caratteristiche tra le quali le più importanti e generiche si possono riassumere come segue:

  • è orientato agli oggetti ma permette anche di seguire gli approcci funzionale, imperativo, riflessivo e procedurale
  • ha un tipizzazione dinamica e forte ma è supportato anche il duck typing
  • è interpretato, quindi gira attrverso una macchina virtuale ed è spesso adoperato come linguaggio di scripting
  • è supportato da una vasta comunità, dispone di numerosi tools praticamente per tutti gli impieghi ivi compresi quelli rivolti al mondo Web.
  • gira su tutti i più diffusi sistemi operativi ed il suo codice è altamente portabile tra tutti.

Naturalmente non finisce qui.....
La sua adozione è risultata piuttosto lenta inizialmente ma a partire in particolare dal 2005 in avanti (più o meno quando ha cominciato ad affermarsi anche il linguaggio Ruby tanto che qualcuno afferma che le due cose sono correlate) si è avuta una autentica esplosione nel suo utilizzo in vari ambiti. Contestualmente è cresciuto l'ecosistema intorno ad esso sia in termini di strumenti e di ambiti di utilizzo sia in termini di partecipazione da parte dei professioniti e degli appassionati di programmazione. Il famoso sito Tiobe ha assegnato a Python l'award per il linguaggio maggiormente in crescita in ben due annate, il 2007 ed il 2010. Per quanto possa essere un riconoscimento platonico è comunque indice di un crescente successo.

Le sue origini sono influenzate da un discreto numero di linguaggi, se andate sulla relativa pagina di Wikipedia, quella in inglese è in effetti di buona qualità, ne troverete parecchi. In effetti in precedena abbiamo citato le caratteristiche salienti, diciamo macroscopiche del linguaggio ma è veramente una minuscola parte rispetto a tutto quanto incontreremo nel corso del nostro cammino. Potremmo parlare del garbage collector, dell'ereditarietà multipla, come sapete a me piace molto, ma sarebbe un lungo elenco sterile in questo paragrafo. Vedremo tutto con calma. Più importante è capire il perchè del successo di Python.
Si tratta di uno strumento che garantisce una ottima leggibilità del codice, tanto che questo risulta spesso autoesplicativo; un tale aspetto favorisce la qualità e manutenibilità del codice che si scrive. La semplicità del linguaggio favorisce anche la produttività; rispetto ad esempio a linguaggi come il C/C++ Python è ad un livello molto più alto il che consente al programmatore un maggior livello di astrazione restando quindi al di fuori da problematiche implementative di basso livello che risultano spesso complesse. L'ottimo livello di portabilità, anche a fronte di un ampio ventaglio di problematiche, è senza dubbio un ulteriore plus che ai professionisti è piaciuto molto, soprattutto con l'affermarsi di piattaforme alternative a Windows lato client e ai sistemi *nix lato server. Altro aspetto importante è l'alto grado di interoperatività con altre tecnologlie. Python può lavorare in simbiosi col C così come può operare in congiunzione con le piattaforme Java e .Net piuttosto che comunicare con Silverlight ed adoperare senza problemi interfacce come CORBA, SOAP e chi più ne ha più ne metta.

L'elasticità di questo linguaggio ha permesso poi la nascita di alcuni dialetti, chiamiamoli così, specializzati in altri ambiti ce ne sono parecchi ne cito alcuni come IronPython, specifico per la piattaforma .Net, anche se forse ora questa variante è stata un po' messa da parte in favore dei Visual Studio Tools for Python, Jython, specifica per il mondo Java, Cython, un superset che permette un maggior vicinanza al mondo C/C++. Se invece avete necessità di potenza nel campo numerico potreste rivolgervi a NumPy. Sono disponibili interessanti ed innovativi strumenti dedicati al mondo Internet, cito il consolidato progetto DJango ma anche Turbogear, il leggerissimo Bottle, Pyramid, Flask (ispirato all'innovativo web framework Sinatra per Ruby) e altri ancora. Non manca davvero niente all'ecosistema di questo potente strumento a testimonianza del grande fermento intorno a questo linguaggio. Interessante notare che Python stesso è risultato a sua volta musa ispiratrice per altri interessanti progetti. Ad esempio i linguaggi Cobra , Boo, lo stesso Ruby ammettono la vicinanza con la creatura di van Rossum mentre altri, come il recente Go, oppure Groovy ne riconoscono l'influenza, pur ognuno con le sue differenze e peculiarità. Insomma, Python è stato un progetto di grande successo ancor più in quanto nato dall'ingegno di un programmatore indipendente e non dall'iniziativa di una grande software house. Non per nulla il geniale olandese ora è uno dei pezzi pregiati alle dipendenze di Google.

Il linguaggio, piuttosto curiosamente, presenta un fork evolutivo: abbiamo infatti due branch di sviluppo, uno definito dalla sigla 2.x e l'altro noto come 3.x. Il primo dei due è quello più consolidato, usato e per quale esiste maggior documentazione oltre ad essere il più supportato dai vari tools. Si può dire che sia quello "storico". Il ramo 3.x nasce dalla volontà di van Rossum di dare una ripulita al linguaggio da alcune sovrapposizioni sintattiche e semantiche. Un ammodernamento complessivo che ha in parte rotto la compatibilità con la versione 2.x. Sul sito ufficiale esiste una pagina dedicata alla spiegazione delle incompatibilità tra le due versioni. Attualmente lo sviluppo prosegue su entrambi i branch. In questa sede peraltro ci occuperemo della versione 3.x in quanto per essa è presente senza dubbio meno materiale e comunque rappresenta il futuro di medio termine dal momento che le maggiori innovazioni saranno riservate a questa ramificazione.

Prima di chiudere vediamo ora l'altra faccia della luna... è proprio tutto oro e solo quello? In realtà il primo appunto che un po' tutti fanno a Python è relativo agli aspetti prestazionali. Python, soprattutto in origine nudo e crudo, è piuttosto lento, di parecchie unità di misura se paragonato alla coppia C/C++ ma anche rispetto alla maggioranza degli altri linguaggi. Il problema nasce dalla natura stessa di Python che vede il codice sorgente tradotto in un metalinguaggio, diciamo meglio un codice intermedio, che deve girare sulla sua macchina virtuale. Questi passaggi sono comuni ad altri linguaggi ma sono più pesanti in Python rispetto ad esempio a C#. Esistono dei progetti, come Pypy, che aiutano molto in questo senso ma il problema di fondo rimane. In qualche caso, se dovrete "avvicinarvi al ferro", ovvero se avete bisogno di interfacciarvi con l'hardware ecco che Python non è lo strumento giusto, probabilmente, quanto meno non è il migliore. A proposito di prestazioni e di programmazione di più basso livello si parla di una certa estensibilità di Python intendendo con ciò che il linguaggio può facilmente integrare procedure scritte in C/C++ (io, sinceramente, per estensibilità intendo un'altra cosa). Il fatto di essere interpretato può condure a sorprese a runtime (se fate bene i test le cosa non succede) ed inoltre il fatto che sia pesantemente basato sull'indentazione del codice (una scelta di stile voluta dall'autore e condivisa dalla maggior parte degli sviluppatori) a qualcuno può far storcere il naso  (a me, ad esempio). Abbiamo detto più volte che il linguaggio definitivo non esiste. Non lo è nemmeno Python che resta comunque uno strumento eccellente con il quale vi toglierete molte soddisfazioni in modo sorprendentemente semplice.