SlideShare une entreprise Scribd logo
1  sur  40
Sviluppare in Python
un passo verso la libertà


                  Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà

Obiettivo

                 Stimolare la curiosità e
       diffondere l'interesse nei confronti di
            Python in ambito professionale!



                                               Matteo Cafarotti - Serafino Beraldi
Agenda
●   Confronto Python vs Java
●   Caratteristiche di Python
●   Campi di applicazione
●   Considerazioni




                                Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà

Storia
    ●    Java nasce nel 1996 ad opera di James Gosling...
    ●    Obiettivo: ambiente software platform-indipendent
    ●    Target: dall'elettronica di consumo al WWW
    ●    Nel 2009 Sun Microsystem viene acquisita da Oracle


                        ●   Python è stato creato da Guido Van Rossum nel 1991...
                        ●   Il nome del linguaggio è stato ispirato da uno show televisivo
                        ●   Semplicità dei linguaggio di scripting + potenza dei linguaggi Object Oriented
                        ●   Nel 2010 vince il “TIOBE Programming Award”




                                                               Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà

Python è free ed Open Source
 ●   Python è FLOSS (Free and Open Source Software)
 ●   È possibile vedere il suo codice sorgente, modificarlo, prelevare segmenti di
     codice e usarli in altri programmi free
 ●   FLOSS si basa sul principio della libera condivisione delle conoscenze
     all'interno di una community
 ●   Fin dalla sua creazione Python è stato aggiornato da una community che lo
     migliora e lo fa crescere costantemente




                                                   Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà

PEP
 ●    Con il termine PEP (Python Enhancement Proposal) si indicano le proposte di
      avanzamento di Python che sono raccolte dalla Python org, valutate ed
      eventualmente adottate negli sviluppi del linguaggio.
 ●    Tali proposte sono avanzate sia dal team di sviluppo di Python che dalla
      community e sono raccolte sul sito python.org.




                                                     Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
PEP20: Zen of Python
  ●   Beautiful is better than ugly.                 ●   In the face of ambiguity, refuse the
  ●   Explicit is better than implicit.                  temptation to guess.
                                                         There should be one-- and preferably only
      Simple is better than complex.
                                                     ●
  ●

  ●   Complex is better than complicated.
                                                         one – obvious way              to do it.
                                                     ●   Although that way may not be obvious at first
  ●   Flat is better than nested.
                                                         unless you're Dutch.
  ●   Sparse is better than dense.                   ●   Now is better than never.
  ●   Readability counts.                            ●   Although never is often better than *right*
                                                         now.
  ●   Special cases aren't special enough to break
      the rules.
                                                     ●   If the implementation is hard to explain, it's a
                                                         bad idea.
  ●   Although practicality beats purity.
                                                     ●   If the implementation is easy to explain, it
  ●   Errors should never pass silently.
                                                         may be a good idea.
  ●   Unless explicitly silenced.                    ●   Namespaces are one honking great idea --
                                                         let's do more of those!


                                                             Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Similitudini tra Java e Python
                                           Java                                    Python
          Object Oriented
            pre compilato            javac compiler                python compiler/interpreter
                               java byte code interpreter          python compiler/interpreter
                 portabile
              tipizzazione           strongly typed                          strongly typed

        gestione memoria     automatic garbage collection          automatic garbage collection

   in Python qualsiasi cosa è un oggetto: moduli, classi, funzioni...
                                                               Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Differenze tra Java e Python
                                      Java                                Python
             tipizzazione            statica                            dinamica

            ereditarietà             singola                            multipla

   overloading operatori
    interprete interattivo
                  sintassi           verbosa                            sintetica




                                                      Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Tipizzazione Statica vs Tipizzazione Dinamica

       Statica ↔ Compile-Time                    Dinamica ↔ Run-Time


      variabile                                          variabile



       valore              tipo                             valore



        tipo                                                  tipo


                                                  Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Cosa ci è piaciuto di Python
 ●   Python consente di scrivere meno codice
 ●   Usare l'interprete Python in modo interattivo
 ●   Pre-compilazione automatica dei sorgenti
 ●   File di configurazione nello stesso linguaggio
 ●   I metodi possono restituire più di un valore
 ●   Valori di default sui parametri di un metodo
 ●   Test e doctest
 ●   ...



                                                      Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Cosa ci è piaciuto di Python
 ●   …
 ●   Una code convention ben formalizzata ( PEP8 )
 ●   Strutture dati built-in ( lists, tuples, sets, dict )
 ●   L’overloading degli operatori
 ●   Keyword arguments




                                                             Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Python consente di scrivere meno codice
              def backup_txt_file(file_name):
                  in_file = open(file_name,"r")
                  out_file = open("backup_file.txt","w")
                  i = 0
                  for line in in_file.readlines():
                      i += 1
                      out_file.write("%s : %s" % (i ,line))
                  in_file.close()
                  out_file.close()




                        meno codice => TTM migliore

                                                Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Usare l'interprete Python in modo interattivo
       Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2
       Type "help", "copyright", "credits" or "license" for more information.
       >>> (2+3)*4
       20
       >>> nome = raw_input('Inserisci il tuo nome: ')
       Inserisci il tuo nome: Matteo
       >>> print nome
       Matteo
       >>> file = open("/home/serafino/ciao.txt")
       >>> file.readline()
       'Ciao Pythonn'




          L'interprete consente di testare le funzioni durante lo sviluppo!
                                                            Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Pre-compilazione automatica dei sorgenti

                        javac                     java

            a.java                 a.class



                       python                    python

             a.py                   a.pyc



          La pre-compilazione automatica fa risparmiare molto tempo!

                                                Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
File di configurazione in Python
  DEBUG = True                     DATABASES = {
  TIME_ZONE = 'Europe/Rome'            'default': {
  INSTALLED_APPS = (                       'ENGINE': 'postgresql_psycopg2',
      'djangodevtools',                    'NAME': 'db_name',
      'kiowa',                             'USER': 'db_user',
      'myapp',                             'PASSWORD': 'db_pwd',
  )                                        'HOST': 'localhost',
                                           'PORT': '',
                                       }
                                   }



                              No XML o properties!

                                                 Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Restituire più di un valore

       >>>   def split_lista(lista):
       ...       pari, dispari = [], []
       ...       for i in lista:
       ...           (dispari if bool(i % 2) else pari).append(i)
       ...       return pari, dispari
       ...
       >>>   p, d = split_lista([3,2,6,5,1,8,5,8,2,6,5,1,5,7,3,2,9,0,2,4,7])
       >>>   p
       [2,   6, 8, 8, 2, 6, 2, 0, 2, 4]
       >>>   d
       [3,   5, 1, 5, 5, 1, 5, 7, 3, 9, 7]




                                 Riduce la quantità di codice!

                                                              Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Valori di default sui parametri

       >>>   def split_lista(lista=[]):
   c   ...       pari, dispari = [], []
       ...       for i in lista:
       ...           (dispari if bool(i % 2) else pari).append(i)
       ...       return pari, dispari
       ...
       >>>   p, d = split_lista()
       >>>   p
       []
       >>>   d
       []




                                    Riduce la quantità di codice!

                                                              Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Test
  from django.test import TestCase

  class PersonaTestCase(TestCase):

       fixtures = ['persone.json']

       def test_save(self):
           """
           Test save worst-case: not all mandatory fields are provided => IntegrityError
           """
           data = {
               ‘name' : ‘Mario',
           }
           target_item = Persona(**data)
           self.assertRaises(IntegrityError, target_item.save, force_insert=False)




                           Il metodo assertRaises è molto comodo!

                                                               Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Doctest
  def split_lista(lista=[]):
      '''
      Suddivide una lista di interi in due liste, ...
      Usage:
      >>> p, d = split_lista([3,2,6,5,1,8,5,8,2,6,5,1,5,7,3,2,9,0,2,4,7])
      >>> p
      [2, 6, 8, 8, 2, 6, 2, 0, 2, 4]
      >>> d
      [3, 5, 1, 5, 5, 1, 5, 7, 3, 9, 7]
      '''
      ...
      return pari, dispari




           Aumenta la leggibilità e garantisce il “corretto” funzionamento!

                                                              Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
PEP8
                                                   class Classe1(object):
                                                       def __init__(self):
                                                           # ...
       2 righe bianche tra un classe e l'altra →
                                                   class Classe2(object):
                                                       def metodo1(self):
                                                                                  1 spazio bianco
                                                           # ...
        1 riga bianca tra un metodo e l'altro →
                                                       def metodo2(self, a, b):
                                                           self.X = a + b
                                                           # ...


                                                                       1 spazio bianco


                                        Aumenta la leggibilità del codice!

                                                                             Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Strutture dati built-in
             >>> # liste
             >>> l = [7, 19 ,14, 5, 11]
             >>> l[1]
             19
             >>> l[2:]
             [14, 5, 11]
             >>> l.append(16)
             >>> l
             [7, 19, 14, 5, 11, 16]
             >>> # insiemi
             >>> s1 = set([1, 23, 5, 6, 11, 23, 5, 4])
             >>> s1
             set([1, 4, 5, 6, 11, 23])
             >>> s2 = set([23, 15, 6, 15])
             >>> s2
             set([15, 6, 23])
             >>> s1 | s2                     # unione tra due insiemi
             set([1, 4, 5, 6, 23, 11, 15])
             >>> s1 & s2                     # intersezione tra due insiemi
             Set([6, 23])




                                                          Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Overloading degli operatori
  class Complex(object):
      def __init__(self, real, imag):
          self.real = real
          self.imag = imag
      def __repr__(self):
         return '(%s,%si%s)' % (self.real, '-' if self.imag<0 else '', abs(self.imag))
      def __add__(self, c):
         return Complex(self.real+c.real, self.imag+c.imag)
      def __mul__(self, c):
         return Complex(self.real*c.real-self.imag*c.imag, self.real*c.real+self.imag*c.imag)




                                                         >>> a = Complex(1,1)
                                                         >>> b = Complex(1,-1)
                                                         >>> b = Complex(-1,-1)
                                                         >>> a+b*c

          Aumenta la leggibilità!                        u'(1,i3)'




                                                              Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Keyword arguments
 class Persona(object):
     def __init__(self, nome="", cognome="", **kwargs):
         self.nome = nome
         self.cognome = cognome
         for k, v in kwargs.items():
             setattr(self, k, v)

     def __repr__(self):
         return '%s %s' % (self.cognome, self.nome)



                                         >>> Persona(nome='Marco')
                                          Marco
                                         >>> p = Persona(nome='Marco', cognome='Rossi', citta='Roma')
                                         >>> p
                                         Rossi Marco
         Riduce la quantità di           >>> p.citta
                                         'Roma'

         codice!
                                         >>> p.email = "marco.rossi@email.com"
                                         >>> p.email
                                         'marco.rossi@email.com'


                                                            Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Industria cinematografica
  ●   Python è stato adottato dalla Dreamworks nell'ambito della produzione
      delle animazioni 3D in sostituzione di Perl per la maggiore facilità di
      utilizzo e per la capacità di integrazione con le librerie C++
  ●   La Industrial Light & Magic (LucasFilm), l'azienda di effetti speciali che ha
      creato Star Wars, utilizza Python per amalgamare insieme le centinaia di
      computers e componenti software utilizzati in ambito di computer grafica.




                                                     Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Industria aerospaziale
  ●   La Nasa utilizza Python per implementare i sistemi di controllo delle
      proprie missioni




                                                     Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Monitoraggio traffico aereo
  ●   Frequentis, uno dei leader a livello mondiale per le soluzioni di gestione
      del traffico aereo e la sicurezza pubblica, utilizza software scritto in Python
      per il monitoraggio del traffico aereo




                                                      Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Metereologia
  ●   ForecastWatch.com usa Python per aiutare meteorologi a produrre
      previsioni meteo più accurate




                                                  Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Biologia
  ●   AstraZeneca, una delle aziende leader nel mondo della farmaceutica,
      utilizza Python nel processo di identificazione delle droghe.
  ●   Molecular Modeling Toolkit, una libreria per la modellazione e la
      simulazione delle molecole.




                                                   Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Amministrazione
  ●   Devis utilizza Python e Zope (server per applicazioni) per la produzione di
      un CMS (content management system) utilizzato nel settore dell'
      eGovernment.
  ●   K-tech utilizza Python e Django (web framework) per lo sviluppo del CRM
      aziendale e web application per i propri clienti.




                                                     Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Campi di applicazione
 Sistemi Operativi
 Molte delle applicazioni scritte per il Desktop Manager di Linux "Gnome" sono
 scritte in linguaggio Python tramite utilizzo delle librerie PyGTK:
  ●   Computer Temperature Monitor
  ●   Bittorrent
  ●   Exaile
  ●   Pitivi
  ●   Pycasa


                                                       Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà



Big G, il gigante di Mountain View, ha avviato già da tempo una marcata
politica di investimenti su Python iniziata con l'assunzione di Guido Van
Rossum tra le sue fila e che ha portato alla nascita di Google App Engine
(piattaforma di sviluppo e hosting di web application scritta al 100% in
Python)




                                                  Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà



Altri
●   Red Hat ha implementato in python il proprio tool di installazione
    Anaconda.
●   Infoseek usa python nei propri prodotti per la ricerca sul web.
●   Yahoo! ha sviluppato in python alcuni servizi di internet.




                                                  Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Primo impatto
 Il primo impatto con Python può disorientare:
  ●   Eclipse non risponde più ai comandi :-(
  ●   Si ritorna alla shell
  ●   Rispolverare i pattern di programmazione ed i principi Object Oriented


            La prima impressione è che programmare in queste condizioni
                           sarà maledettamente faticoso!

                                                    Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Siamo programmatori o specialisti di prodotto?
 Sviluppare software in un linguaggio come Java che è supportato da
 strumenti (IDE e Frameworks) sempre più avanzati ha reso il processo di
 sviluppo più facile.

 Scrivere codice che superi la fase di compilazione senza errori è ormai un
 obiettivo alla portata di tutti.



                       Gli strumenti sono i veri protagonisti!


                                                   Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Python può rappresentare un passo verso la libertà?
                   Il mercato dei programmatori è saturo di javisti



                       surplus di offerta rispetto alla domanda



                crollo del valore di mercato di quella tipologia di skill


 Chi ne gioverà saranno le aziende che avranno a disposizione
 forza lavoro a costo irrisorio e facilmente sostituibile.
 Quali saranno le conseguenze?

                                                       Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Conseguenze
  ●   Stipendi sempre più bassi per i programmatori java
  ●   Qualità del codice e del prodotto software sempre più scadente
  ●   Perdita di competitività delle aziende nei confronti dei competitors
      internazionali




                                                   Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà


Abbracciare un linguaggio che pone come conditio sine qua non una preparazione
consistente ed “effettiva” è una garanzia
●   per la nostra professione
●   per le aziende che decidono di investirvi




                          Siamo ritornati protagonisti!


                                                 Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà
Riferimenti
  www.python.org



  m.cafarotti@gmail.com

  serafino.beraldi@gmail.com




                                                 Matteo Cafarotti - Serafino Beraldi
Sviluppare in Python: un passo verso la libertà




                 Estrazione!!!



                                  Matteo Cafarotti - Serafino Beraldi

Contenu connexe

Plus de Codemotion

Plus de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Sviluppare in Python, un passo verso la libertà

  • 1. Sviluppare in Python un passo verso la libertà Matteo Cafarotti - Serafino Beraldi
  • 2. Sviluppare in Python: un passo verso la libertà Obiettivo Stimolare la curiosità e diffondere l'interesse nei confronti di Python in ambito professionale! Matteo Cafarotti - Serafino Beraldi
  • 3. Agenda ● Confronto Python vs Java ● Caratteristiche di Python ● Campi di applicazione ● Considerazioni Matteo Cafarotti - Serafino Beraldi
  • 4. Sviluppare in Python: un passo verso la libertà Storia ● Java nasce nel 1996 ad opera di James Gosling... ● Obiettivo: ambiente software platform-indipendent ● Target: dall'elettronica di consumo al WWW ● Nel 2009 Sun Microsystem viene acquisita da Oracle ● Python è stato creato da Guido Van Rossum nel 1991... ● Il nome del linguaggio è stato ispirato da uno show televisivo ● Semplicità dei linguaggio di scripting + potenza dei linguaggi Object Oriented ● Nel 2010 vince il “TIOBE Programming Award” Matteo Cafarotti - Serafino Beraldi
  • 5. Sviluppare in Python: un passo verso la libertà Python è free ed Open Source ● Python è FLOSS (Free and Open Source Software) ● È possibile vedere il suo codice sorgente, modificarlo, prelevare segmenti di codice e usarli in altri programmi free ● FLOSS si basa sul principio della libera condivisione delle conoscenze all'interno di una community ● Fin dalla sua creazione Python è stato aggiornato da una community che lo migliora e lo fa crescere costantemente Matteo Cafarotti - Serafino Beraldi
  • 6. Sviluppare in Python: un passo verso la libertà PEP ● Con il termine PEP (Python Enhancement Proposal) si indicano le proposte di avanzamento di Python che sono raccolte dalla Python org, valutate ed eventualmente adottate negli sviluppi del linguaggio. ● Tali proposte sono avanzate sia dal team di sviluppo di Python che dalla community e sono raccolte sul sito python.org. Matteo Cafarotti - Serafino Beraldi
  • 7. Sviluppare in Python: un passo verso la libertà PEP20: Zen of Python ● Beautiful is better than ugly. ● In the face of ambiguity, refuse the ● Explicit is better than implicit. temptation to guess. There should be one-- and preferably only Simple is better than complex. ● ● ● Complex is better than complicated. one – obvious way to do it. ● Although that way may not be obvious at first ● Flat is better than nested. unless you're Dutch. ● Sparse is better than dense. ● Now is better than never. ● Readability counts. ● Although never is often better than *right* now. ● Special cases aren't special enough to break the rules. ● If the implementation is hard to explain, it's a bad idea. ● Although practicality beats purity. ● If the implementation is easy to explain, it ● Errors should never pass silently. may be a good idea. ● Unless explicitly silenced. ● Namespaces are one honking great idea -- let's do more of those! Matteo Cafarotti - Serafino Beraldi
  • 8. Sviluppare in Python: un passo verso la libertà Similitudini tra Java e Python Java Python Object Oriented pre compilato javac compiler python compiler/interpreter java byte code interpreter python compiler/interpreter portabile tipizzazione strongly typed strongly typed gestione memoria automatic garbage collection automatic garbage collection in Python qualsiasi cosa è un oggetto: moduli, classi, funzioni... Matteo Cafarotti - Serafino Beraldi
  • 9. Sviluppare in Python: un passo verso la libertà Differenze tra Java e Python Java Python tipizzazione statica dinamica ereditarietà singola multipla overloading operatori interprete interattivo sintassi verbosa sintetica Matteo Cafarotti - Serafino Beraldi
  • 10. Sviluppare in Python: un passo verso la libertà Tipizzazione Statica vs Tipizzazione Dinamica Statica ↔ Compile-Time Dinamica ↔ Run-Time variabile variabile valore tipo valore tipo tipo Matteo Cafarotti - Serafino Beraldi
  • 11. Sviluppare in Python: un passo verso la libertà Cosa ci è piaciuto di Python ● Python consente di scrivere meno codice ● Usare l'interprete Python in modo interattivo ● Pre-compilazione automatica dei sorgenti ● File di configurazione nello stesso linguaggio ● I metodi possono restituire più di un valore ● Valori di default sui parametri di un metodo ● Test e doctest ● ... Matteo Cafarotti - Serafino Beraldi
  • 12. Sviluppare in Python: un passo verso la libertà Cosa ci è piaciuto di Python ● … ● Una code convention ben formalizzata ( PEP8 ) ● Strutture dati built-in ( lists, tuples, sets, dict ) ● L’overloading degli operatori ● Keyword arguments Matteo Cafarotti - Serafino Beraldi
  • 13. Sviluppare in Python: un passo verso la libertà Python consente di scrivere meno codice def backup_txt_file(file_name): in_file = open(file_name,"r") out_file = open("backup_file.txt","w") i = 0 for line in in_file.readlines(): i += 1 out_file.write("%s : %s" % (i ,line)) in_file.close() out_file.close() meno codice => TTM migliore Matteo Cafarotti - Serafino Beraldi
  • 14. Sviluppare in Python: un passo verso la libertà Usare l'interprete Python in modo interattivo Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> (2+3)*4 20 >>> nome = raw_input('Inserisci il tuo nome: ') Inserisci il tuo nome: Matteo >>> print nome Matteo >>> file = open("/home/serafino/ciao.txt") >>> file.readline() 'Ciao Pythonn' L'interprete consente di testare le funzioni durante lo sviluppo! Matteo Cafarotti - Serafino Beraldi
  • 15. Sviluppare in Python: un passo verso la libertà Pre-compilazione automatica dei sorgenti javac java a.java a.class python python a.py a.pyc La pre-compilazione automatica fa risparmiare molto tempo! Matteo Cafarotti - Serafino Beraldi
  • 16. Sviluppare in Python: un passo verso la libertà File di configurazione in Python DEBUG = True DATABASES = { TIME_ZONE = 'Europe/Rome' 'default': { INSTALLED_APPS = ( 'ENGINE': 'postgresql_psycopg2', 'djangodevtools', 'NAME': 'db_name', 'kiowa', 'USER': 'db_user', 'myapp', 'PASSWORD': 'db_pwd', ) 'HOST': 'localhost', 'PORT': '', } } No XML o properties! Matteo Cafarotti - Serafino Beraldi
  • 17. Sviluppare in Python: un passo verso la libertà Restituire più di un valore >>> def split_lista(lista): ... pari, dispari = [], [] ... for i in lista: ... (dispari if bool(i % 2) else pari).append(i) ... return pari, dispari ... >>> p, d = split_lista([3,2,6,5,1,8,5,8,2,6,5,1,5,7,3,2,9,0,2,4,7]) >>> p [2, 6, 8, 8, 2, 6, 2, 0, 2, 4] >>> d [3, 5, 1, 5, 5, 1, 5, 7, 3, 9, 7] Riduce la quantità di codice! Matteo Cafarotti - Serafino Beraldi
  • 18. Sviluppare in Python: un passo verso la libertà Valori di default sui parametri >>> def split_lista(lista=[]): c ... pari, dispari = [], [] ... for i in lista: ... (dispari if bool(i % 2) else pari).append(i) ... return pari, dispari ... >>> p, d = split_lista() >>> p [] >>> d [] Riduce la quantità di codice! Matteo Cafarotti - Serafino Beraldi
  • 19. Sviluppare in Python: un passo verso la libertà Test from django.test import TestCase class PersonaTestCase(TestCase): fixtures = ['persone.json'] def test_save(self): """ Test save worst-case: not all mandatory fields are provided => IntegrityError """ data = { ‘name' : ‘Mario', } target_item = Persona(**data) self.assertRaises(IntegrityError, target_item.save, force_insert=False) Il metodo assertRaises è molto comodo! Matteo Cafarotti - Serafino Beraldi
  • 20. Sviluppare in Python: un passo verso la libertà Doctest def split_lista(lista=[]): ''' Suddivide una lista di interi in due liste, ... Usage: >>> p, d = split_lista([3,2,6,5,1,8,5,8,2,6,5,1,5,7,3,2,9,0,2,4,7]) >>> p [2, 6, 8, 8, 2, 6, 2, 0, 2, 4] >>> d [3, 5, 1, 5, 5, 1, 5, 7, 3, 9, 7] ''' ... return pari, dispari Aumenta la leggibilità e garantisce il “corretto” funzionamento! Matteo Cafarotti - Serafino Beraldi
  • 21. Sviluppare in Python: un passo verso la libertà PEP8 class Classe1(object): def __init__(self): # ... 2 righe bianche tra un classe e l'altra → class Classe2(object): def metodo1(self): 1 spazio bianco # ... 1 riga bianca tra un metodo e l'altro → def metodo2(self, a, b): self.X = a + b # ... 1 spazio bianco Aumenta la leggibilità del codice! Matteo Cafarotti - Serafino Beraldi
  • 22. Sviluppare in Python: un passo verso la libertà Strutture dati built-in >>> # liste >>> l = [7, 19 ,14, 5, 11] >>> l[1] 19 >>> l[2:] [14, 5, 11] >>> l.append(16) >>> l [7, 19, 14, 5, 11, 16] >>> # insiemi >>> s1 = set([1, 23, 5, 6, 11, 23, 5, 4]) >>> s1 set([1, 4, 5, 6, 11, 23]) >>> s2 = set([23, 15, 6, 15]) >>> s2 set([15, 6, 23]) >>> s1 | s2 # unione tra due insiemi set([1, 4, 5, 6, 23, 11, 15]) >>> s1 & s2 # intersezione tra due insiemi Set([6, 23]) Matteo Cafarotti - Serafino Beraldi
  • 23. Sviluppare in Python: un passo verso la libertà Overloading degli operatori class Complex(object): def __init__(self, real, imag): self.real = real self.imag = imag def __repr__(self): return '(%s,%si%s)' % (self.real, '-' if self.imag<0 else '', abs(self.imag)) def __add__(self, c): return Complex(self.real+c.real, self.imag+c.imag) def __mul__(self, c): return Complex(self.real*c.real-self.imag*c.imag, self.real*c.real+self.imag*c.imag) >>> a = Complex(1,1) >>> b = Complex(1,-1) >>> b = Complex(-1,-1) >>> a+b*c Aumenta la leggibilità! u'(1,i3)' Matteo Cafarotti - Serafino Beraldi
  • 24. Sviluppare in Python: un passo verso la libertà Keyword arguments class Persona(object): def __init__(self, nome="", cognome="", **kwargs): self.nome = nome self.cognome = cognome for k, v in kwargs.items(): setattr(self, k, v) def __repr__(self): return '%s %s' % (self.cognome, self.nome) >>> Persona(nome='Marco') Marco >>> p = Persona(nome='Marco', cognome='Rossi', citta='Roma') >>> p Rossi Marco Riduce la quantità di >>> p.citta 'Roma' codice! >>> p.email = "marco.rossi@email.com" >>> p.email 'marco.rossi@email.com' Matteo Cafarotti - Serafino Beraldi
  • 25. Sviluppare in Python: un passo verso la libertà Campi di applicazione Industria cinematografica ● Python è stato adottato dalla Dreamworks nell'ambito della produzione delle animazioni 3D in sostituzione di Perl per la maggiore facilità di utilizzo e per la capacità di integrazione con le librerie C++ ● La Industrial Light & Magic (LucasFilm), l'azienda di effetti speciali che ha creato Star Wars, utilizza Python per amalgamare insieme le centinaia di computers e componenti software utilizzati in ambito di computer grafica. Matteo Cafarotti - Serafino Beraldi
  • 26. Sviluppare in Python: un passo verso la libertà Campi di applicazione Industria aerospaziale ● La Nasa utilizza Python per implementare i sistemi di controllo delle proprie missioni Matteo Cafarotti - Serafino Beraldi
  • 27. Sviluppare in Python: un passo verso la libertà Campi di applicazione Monitoraggio traffico aereo ● Frequentis, uno dei leader a livello mondiale per le soluzioni di gestione del traffico aereo e la sicurezza pubblica, utilizza software scritto in Python per il monitoraggio del traffico aereo Matteo Cafarotti - Serafino Beraldi
  • 28. Sviluppare in Python: un passo verso la libertà Campi di applicazione Metereologia ● ForecastWatch.com usa Python per aiutare meteorologi a produrre previsioni meteo più accurate Matteo Cafarotti - Serafino Beraldi
  • 29. Sviluppare in Python: un passo verso la libertà Campi di applicazione Biologia ● AstraZeneca, una delle aziende leader nel mondo della farmaceutica, utilizza Python nel processo di identificazione delle droghe. ● Molecular Modeling Toolkit, una libreria per la modellazione e la simulazione delle molecole. Matteo Cafarotti - Serafino Beraldi
  • 30. Sviluppare in Python: un passo verso la libertà Campi di applicazione Amministrazione ● Devis utilizza Python e Zope (server per applicazioni) per la produzione di un CMS (content management system) utilizzato nel settore dell' eGovernment. ● K-tech utilizza Python e Django (web framework) per lo sviluppo del CRM aziendale e web application per i propri clienti. Matteo Cafarotti - Serafino Beraldi
  • 31. Sviluppare in Python: un passo verso la libertà Campi di applicazione Sistemi Operativi Molte delle applicazioni scritte per il Desktop Manager di Linux "Gnome" sono scritte in linguaggio Python tramite utilizzo delle librerie PyGTK: ● Computer Temperature Monitor ● Bittorrent ● Exaile ● Pitivi ● Pycasa Matteo Cafarotti - Serafino Beraldi
  • 32. Sviluppare in Python: un passo verso la libertà Big G, il gigante di Mountain View, ha avviato già da tempo una marcata politica di investimenti su Python iniziata con l'assunzione di Guido Van Rossum tra le sue fila e che ha portato alla nascita di Google App Engine (piattaforma di sviluppo e hosting di web application scritta al 100% in Python) Matteo Cafarotti - Serafino Beraldi
  • 33. Sviluppare in Python: un passo verso la libertà Altri ● Red Hat ha implementato in python il proprio tool di installazione Anaconda. ● Infoseek usa python nei propri prodotti per la ricerca sul web. ● Yahoo! ha sviluppato in python alcuni servizi di internet. Matteo Cafarotti - Serafino Beraldi
  • 34. Sviluppare in Python: un passo verso la libertà Primo impatto Il primo impatto con Python può disorientare: ● Eclipse non risponde più ai comandi :-( ● Si ritorna alla shell ● Rispolverare i pattern di programmazione ed i principi Object Oriented La prima impressione è che programmare in queste condizioni sarà maledettamente faticoso! Matteo Cafarotti - Serafino Beraldi
  • 35. Sviluppare in Python: un passo verso la libertà Siamo programmatori o specialisti di prodotto? Sviluppare software in un linguaggio come Java che è supportato da strumenti (IDE e Frameworks) sempre più avanzati ha reso il processo di sviluppo più facile. Scrivere codice che superi la fase di compilazione senza errori è ormai un obiettivo alla portata di tutti. Gli strumenti sono i veri protagonisti! Matteo Cafarotti - Serafino Beraldi
  • 36. Sviluppare in Python: un passo verso la libertà Python può rappresentare un passo verso la libertà? Il mercato dei programmatori è saturo di javisti surplus di offerta rispetto alla domanda crollo del valore di mercato di quella tipologia di skill Chi ne gioverà saranno le aziende che avranno a disposizione forza lavoro a costo irrisorio e facilmente sostituibile. Quali saranno le conseguenze? Matteo Cafarotti - Serafino Beraldi
  • 37. Sviluppare in Python: un passo verso la libertà Conseguenze ● Stipendi sempre più bassi per i programmatori java ● Qualità del codice e del prodotto software sempre più scadente ● Perdita di competitività delle aziende nei confronti dei competitors internazionali Matteo Cafarotti - Serafino Beraldi
  • 38. Sviluppare in Python: un passo verso la libertà Abbracciare un linguaggio che pone come conditio sine qua non una preparazione consistente ed “effettiva” è una garanzia ● per la nostra professione ● per le aziende che decidono di investirvi Siamo ritornati protagonisti! Matteo Cafarotti - Serafino Beraldi
  • 39. Sviluppare in Python: un passo verso la libertà Riferimenti www.python.org m.cafarotti@gmail.com serafino.beraldi@gmail.com Matteo Cafarotti - Serafino Beraldi
  • 40. Sviluppare in Python: un passo verso la libertà Estrazione!!! Matteo Cafarotti - Serafino Beraldi