[Python] Python vs Java

Simone Federici s.federici a gmail.com
Ven 2 Gen 2015 16:49:43 CET


Enrico Bianchi:

> Il punto e` questo: cosa e` lento? Il tempo di esecuzione? La velocita` di
> programmazione? Altro? Inoltre, tutto questo su che macchina si e` provato?
> Per riprendere quello che hai detto piu` sotto, e` dire che Java e` lento
> senza portare motivazioni pratiche e non sensazioni che lo fa sembrare un
> discorso da volpe e uva (e tutto questo senza toccare il concetto di
> farragionoso, che anche quello meriterebbe una spiegazione che vada al di
> la delle sensazioni)


Sia Java che Python sono linguaggi pre compilati con bytecode.
Entrambi hanno una virtual machine. L'interprete python è un VM come lo è
il comando "java". L'unica differenza è che python compila i file e java
no, ha bisogno di di un comando esplicito javac.

Detta sta ovvietà...

La velocità/qualità di un programmatore non dipende dal linguaggio che usa.
Vorrei sfatare un mito, ci sono programmatori java molto produttivi.

La mia opinione sulla curva di apprendimento di python rispetto a java è
che python è più semplice, il che lo rendo più veloce da imparare. Ma è una
opinione e tale rimarrà. Anche perché ho imparato prima java di python e il
libro: "Java Complete Guide" lo lessi in 3 giorni.

Il runtime, java carica le classi allo startup, tutte, e le mette in
memoria nel perm gen heap. Il che rende "oggettivamente" più lento l'avvio
di un programma java. Più librerie include, più memoria occupa, più è lento
a caricare. Ma in effetti è parecchi rapido anche a caricare le classi.

Se con python hai dei processi da 50 MB, con java un processo ne ha minimo
minimo 256M, e con javaEE 2 GB.

Lo sviluppo di applicativi java usano framework che caricano le
configurazioni da XML e fanno parecchi uso di Dependency Injection, ossia
tirano su un container che guarda configurazioni e annotazioni sul sorgente
(il bytecode) e esegue delle inizializazioni degli oggetti.
Ossia se usi spring la tua applicazione ci metterà parecchi secondi per
partire rispetto ad una che non ha un container.

Python invece carica le classi solo quando viene importato un modulo.
Se il modulo è presente nel python path ma non viene usato, non ce ne sarà
traccia nella memoria.
E' sicuramente più rapido a partire, è sicuramente meno costoo in termini
di memoria. Contro però ha che servono il 100% della copertura del codice
per sapere quanto il processo occuperà di memoria per le classi. Con java è
più facile fare i dimensionamenti.

Detto questo che cavolo fa l'applicativo?
E' un sito web?
E' un portale?
E' un applicativo web?
E' un server di stampa?
Un BPM?
Uno storage?
Un database?

Che architettura è stata usata?
multithread?
asyncrono?
multiprocesso?

Non sempre java vince "in velocità" su python,
non sempre java perde...

Pensate anche alla scalabilità, magari un applicativo è velocissimo ma non
scala... il che lo rende peggio che mai, arrivano più utenti, devi
aumentare il carico e fallisci... e in quella fase chiudi l'azienda...
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150102/3b770ceb/attachment-0001.html>


Maggiori informazioni sulla lista Python