Utilità pratica del Python [poll]

fc-dev (16450 points)
12 20 34
asked Nov 6, 2019 in Programmare in Python by fc-dev (16,450 points)

Recentemente mi sono trovato a chiedermi: qual'è la vera utilità del Python?
C'è un ambito nel quale brilla come uno dei migliori linguaggi?
Ci ho pensato un attimo e non riesco a trovargli un ambito in cui è effettivamente migliore, di fatto riesce a fare di tutto, eppure lo fa sempre in modo non brillante.

Programmazione Desktop: Si possono fare applicazioni con GUI su Python?
Certo, e ci sono un sacco di librerie diverse per farlo, però... sono tutte scomode, nessuna ha un designer vero e proprio e bisogna scrivere centinaia e centinaia di righe di codice solo per posizionare i componenti nell'interfaccia.
A questo punto perché non usare il C# o il Java o persino il C++ che a confronto hanno librerie più solide e molto spesso IDE con designer per l'UI?

Programmazione Mobile: Si possono creare app con Python?
Ni... cioè, c'è Kivy, ma... ci sono sempre problemi per ogni minima cosa, e anche in questo caso fare le GUI diventa un'agonia.
A questo punto perché non usare Java o Kotlin?

Backend Web: Si può fare il backend di un sito con Python?
Si, e stavolta davvero si senza complicazioni.
Però... la maggior parte dei provider per hosting non permette l'utilizzo di Python per siti web, ad esempio Aruba lo permette tramite cgi-bin, con una versione di Python che cambia da sito a sito e da server a server (e che non è controllabile).
Sicuramente si può prendere una macchina virtuale in affitto installarci python e settarsi tutto a mano ma... e la differenza di prezzo tra un hosting e una VPS dove la mettiamo?
Non sempre servono le performance di una macchina esclusivamente dedicata al proprio sito.
A questo punto non è più semplice usare qualcosa di più universalmente usato e funzionante come il PHP (per quanto abbia le sue magagne)?

Frontend Web: Si può usare Python per fare il frontend di un sito web?
Tecnicamente non è impossibile, ci sono implementazioni di Python in javascript per quanto limitate, ma... a questo punto perché non usare direttamente javascript?


A conti fatti l'unica utilità che vedo nel Python è l'esagerata quantità di librerie presenti, cosa che rende estremamente facilite e versatile prototipare velocemente app da poi realizzare in altri linguaggi o utilità per la linea di comando.

Però se vogliamo vederlo dal punto di vista della facilità e la versatilità ci sono altri linguaggi altrettanto (se non di più) semplici.
In più se vogliamo vederlo dal punto di vista della portabilità... non tutti i sistemi operativi hanno un interprete python installato, anzi, in pratica solo Linux lo ha, e sempre in una versione inferiore al 3, motivo per cui per distribuire un app python generalmente si crea un pacchetto con l'interprete incluso (ad esempio usando pyinstaller).

Riassumendo... Perché Python? C'è qualcosa in cui Python riesce meglio degli altri linguaggi?

EDIT: ho creato un poll per sbaglio :v

### no choices found for poll!

7 Answers

AndreaGasparini (18730 points)
6 12 118
answered Nov 6, 2019 by AndreaGasparini (18,730 points)
edited Nov 6, 2019 by AndreaGasparini

Mi trovo abbastanza d'accordo con te sul fatto che alla fine con Python si possa fare tutto dato che è molto versatile e magari potrebbe anche essere proprio questo il suo "scopo", ma soprattutto penso sia ottimo anche da un punto di vista scolastico/accademico, io personalmente l'ho trovato tra i linguaggi più semplici a cui approcciarsi.

Per quanto riguarda la domanda, l'ho sempre visto molto citato nel contesto del Machine Learning. Se cerchi online, tra proposte di lavoro e corsi (universitari e non), Python è praticamente sempre la prima scelta in questo settore.

Qui per esempio trovi la pagina del corso di Machine Learning del nostro dipartimento, tenuto dalla professoressa Velardi.

Christian (15220 points)
2 4 77
answered Nov 6, 2019 by Christian (15,220 points)
Da quel che ho potuto osservare sul mercato, c'è stato un incremento di richieste di sviluppatori Python da quando i temi di AI, Machine Learning e Deep Learning hanno cominciato a diffondersi velocemente. E' il linguaggio principale per questo tipo di soluzioni in quanto si hanno a disposizione tantissime librerie e frameworks (spesso opensource), e soprattutto ha una community di supporto molto importante alle spalle.

Ad oggi anche alcune società stanno provando a tirare fuori frameworks ad hoc in ambito AI (mi viene in mente ML.NET di Microsoft) ma difficilmente Python perderà fette di mercato :)

Da non sottovalutare poi la semplicità del linguaggio, che lo rende utile anche ai fini accademici.
plm (18850 points)
7 15 118
answered Nov 6, 2019 by plm (18,850 points)
La sua utilità nel mondo del lavoro è sicuramente il Machine Learning, ma sul piano didattico è sicuramente uno di quei linguaggi facili da comprendere per qualcuno che non ha mai visto la programmazione.
andrea.sterbini (172780 points)
513 935 1789
answered Nov 6, 2019 by andrea.sterbini (172,780 points)
Insegnare a programmare
andrea.sterbini (172780 points)
513 935 1789
commented Nov 6, 2019 by andrea.sterbini (172,780 points)
edited Nov 7, 2019 by andrea.sterbini

(poi ... se è sufficientemente buono per Google che lo usa dappertutto, per me è buono)
Le feature che a me piacciono di più sono:

  • sintassi semplice e leggibile
  • generatori facili da creare
  • stile funzionale e funzioni anonime
  • stile OOP con eredità multipla
  • duck typing e applicabilità di algoritmi su dati che rispondono al pattern
  • decoratori!!!!
  • contesti
  • un mucchio di librerie potenti
  • test based development
  • non creo GUI ma mi dicono che con Kivy si fanno app con GUI sofisticate multi-OS https://kivy.org/#gallery
  • ... to be continued
m
m.santoru (390 points)
0 0 4
answered Nov 7, 2019 by m.santoru (390 points)
Se ti può essere d' aiuto, prova a cercare su Linkedin offerte di lavoro utilizzando come parola chiave "python developer", così ti rendi conto più facilmente della grande richiesta sul mercato a livello internazionale per questo linguaggio
Christian (15220 points)
2 4 77
answered Nov 10, 2019 by Christian (15,220 points)
Aggiungo una notizia (relativamente) collegata all'argomento: https://octoverse.github.com/

Nell'ultimo report di GitHub viene evidenziato come Python abbia superato Java e sia diventato il secondo linguaggio di programmazione più utilizzato nei repository dei contributors.
a
a.pietroluongo (11250 points)
15 38 131
answered Nov 10, 2019 by a.pietroluongo (11,250 points)
Come gui c'è anche Tkinter..
fc-dev (16450 points)
12 20 34
commented Nov 11, 2019 by fc-dev (16,450 points)

L'ho provato, e sinceramente... mi sembra di essere tornato nel 2010 con javax.swing e con il suo folle sistema di layout, fra l'altro TKinter con i suoi soli due sistemi a grid e pack diventa ancora più incasinato di javax.swing.
Ho anche abbozzato un designer per TKinter fatto in python (non completato perché era troppo lavoro per un tool che poi non si sarebbe filato nessuno);
Ma nel 2019 è assurdo dover scrivere a mano centinaia e centinaia di righe di codice per fare un interfaccia grafica quando la maggior parte degli IDE degli altri linguaggi hanno designer integrati che scrivono il codice della GUI al posto tuo (che puoi comunque sempre modificare a mano se necessario).

Esempio a caso:

Questa è un interfaccia grafica orrenda e minimalissima creata per un downloader di immagini da un imageboard.
Questo sgorbio sono 100 righe di codice.

Ora, se volessi definire controlli miei estendendo le classi dei controlli esistenti, e fare un sistema a tab per rendere il programma più carino e a download paralleli... probabilmente mi partirebbero 1500 righe di codice solo per quello.
Se devo fare UI in questo modo seriamente preferisco fare solo tool CLI, così è follia.

fc-dev (16450 points)
12 20 34
commented Nov 11, 2019 by fc-dev (16,450 points)
Ah, per fare un paragone, in C# (winform o anche wpf) trasformare un interfaccia del genere in un interfaccia a tab e con controlli custom sono si e no 20 minuti di drag and drop e una 50ina di righe di codice massimo (ma credo anche 25 bastino)