[Python] Python vs Java

Alessandro Re ale a ale-re.net
Lun 29 Dic 2014 12:12:05 CET


2014-12-29 10:36 GMT+01:00 Marco Ippolito <ippolito.marco a gmail.com>:
> Ciao a tutti,
> riguardo al "confronto" Java-Python, pur essendo vero che non è mai
> bello fare confronti tra linguaggi di programmazione perchè fanno cose
> diverse, io volevo chiedervi quali sono le cose che Java ti consente
> di fare e che Python invece non può fare.

In linea teorica, nulla: entrambi i linguaggi sono equivalenti. E, in
generale, tutti i linguaggi "Turing completi" sono uguali in termini
di "cosa è possibile fare". Fondamentalmente sono tutti i linguaggi di
programmazione di cui si sente parlare, quindi non porti questo
problema.

Il problema principale, alla fine, si riduce ad essere questo: quanto
è facile risolvere efficientemente un problema con un certo
linguaggio?

E qui si apre un mondo :)

Le questioni sono tante:

1. quanto materiale ho a disposizione già scritto da altri (quanto
codice posso evitare di riscrivere e di debuggare)? Java e Python sono
entrambi estremamente ricchi da questo punto di vista.

2. quanto la sintassi del linguaggio è adatta al problema? Java e
Python, seppure piuttosto diversi in termini di aspetto estetico,
ricadono nella stessa famiglia di linguaggi multi-paradigma
"imperativi/oggetti/funzionali", quindi anche da questo punto di vista
sono fondamentalmente equivalenti... Chi sostiene il contrario, di
solito, è perché confonde questo punto con il punto successivo:

3. quanto un utente si trova bene con un linguaggio? Question molto
personale. C'é chi (come nel link postato dall'OP) si trova a vedere
il mondo in modo java e chi lo fa in modo python. Questo ha un grande
impatto sulla velocità con cui scrivi codice, anche se gli strumenti
che si hanno a disposizione sono spesso simili tra linguaggi.

4. quanto è efficiente l'implementazione del linguaggio? Alcuni
linguaggi, Fortran o C, ad esempio, sono molto efficienti, perché
lasciano "poco" da fare al compilatore, e tanti paletti li deve tenere
in testa il programmatore (che ha vita difficile). Java, a MIO
personalissimo avviso, è più efficiente in esecuzione di CPython 3
(che uso), e il confronto dipende molto da cosa si fa... Se usi bene
Numpy, se usi PyPy, etc, tutto può variare molto.

5. dove dovrà essere eseguito il programma? Se devi farlo andare sul
tuo computer, e solo quello, allora di solito scegli la tecnologia che
vuoi, ma altrimenti scegli la migliore tra quelle che la piattaforma
obiettivo ti consente di usare... A volte, python o java non sono
scelte, e spesso (tipo me, fino ad un paio di mesi fa) eri costretto
ad usare PHP... (Povero me!)

E ci sono molte altre questioni, ma personalmente tengo presente, di
solito, queste.

> Ve lo chiedo perchè per quello che sto facendo, in alcuni casi mi devo
> interfacciare con alcuni applicativi scritti in Java ed in tutti i
> casi mi sembrano piuttosto lenti e farraginosi.
> Per cui mi domandavo in quali casi uno dovrebbe scegliere Java anzichè Python.

Purtroppo, in questo caso, c'é anche il problema di COME è stato
scritto un sistema con cui bisogna interfacciarsi :) Purtroppo gli
incapaci (e io sono presidente del loro club) usano tutti i linguaggi
possibili, python, java, c++ e lisp... E il linguaggio non c'entra
nulla.

Io la vedo così: se non conosci i linguaggi, imparali entrambi, perché
sono importanti. Se sai già programmare, allora non dovresti essere
troppo preoccupato da questo.

Se li conosci, allora dovresti sapere quali strumenti e quali
paradigmi usa uno piuttosto che l'altro. Questo ti permette di
valutare il problema che devi risolvere, e quindi capire quale
linguaggio usare.

Ti faccio qualche esempio molto pratico (che ho dovuto affrontare)
così capisci cosa intendo.

Ti danno un CSV pieno di dati di un supermercato e ti dicono di
studiartelo. Python o Java? Python: puoi usare una shell interattiva
(ipython) e librerie pronte e comode (pantas, numpy, scikit-learn) per
fare analisi di dati. Non serve scrivere, compilare, distribuire... È
un task che devi far tu, in modo molto dinamico, quindi un linguaggio
dinamico va bene.

Ti trovi a dover esplorare un database per capire com'é fatto. Python:
anche questo è un task dinamico.

Devi tenere una lezione sul machine learning ad una classe di
scioperati. Ok, python o java per loro è uguale, la questione
principale sarà fare il deploy. Java è la scelta migliore, perché è
probabile che abbiano già JRE sul computer, mentre python sarebbe più
macchinoso. La JVM contiene un sacco di belle cose, tipo Swing, quindi
posso fare una GUI senza preoccuparmi di tutte le dipendenze e le
installazioni.

Devi buttare giù un algoritmo sui grafi che ti è venuto in mente, usi
Python, perché è più veloce da scrivere (meno parole) e stai facendo
qualcosa di molto specifico, quindi non ti preoccupi troppo di non
avere controllo sui tipi. Oppure

Devi tenere una lezione sul linguaggio Java. Usi Java, ma consigli
agli studenti di usare Python (quando sono in bagno da soli :D)

Mi è anche capitato di usare python in un progetto e passare i mesi
successivi a maledirmi perché mi serviva un controllo sui tipi, e
python non mi aiutava poi molto... Ma ammetto di aver scelto python
perché volevo usare python, senza sentire alternative.

Insomma, devi conoscere e valutare :) Darti una risposta è difficile,
e a volte una risposta, semplicemente, non c'é.

> Marco

~Ale

>
> Il 28 dicembre 2014 17:29, Roberto De Ioris <roberto a unbit.it> ha scritto:
>>
>>>> Oh, questo mi interessa... ma *davvero* uno che non ha mai programmato
>>>> in
>>>> 10 giorni tira su roba sensata in Django?
>>>> Perche' capisco il sito della fattoria di nonna papera, ma io penso al
>>>> numero di cose elementari che vanno conosciute anche per un sito
>>>> semplice e
>>>> non mi sembra sia roba che si fa in 10 giorni a prescindere dal
>>>> linguaggio
>>>> di programmazione. A me sembra che se su tutto questo inserisci imparare
>>>> un
>>>> linguaggio, imparare a programmare e imparare un framework (con i vari
>>>> annessi, tipo due o tre cose sceme su db e oop) altro che 10 giorni.
>>>> Direi
>>>> che forse si comincia a ragionare con 6 mesi se il tipo e' sveglio.
>>>>
>>>>
>>> Cavolo...
>>> mi ero illuso di riuscire ad usare Django qui sotto le ferie...
>>>
>>>
>>
>> Se gia' programmi e hai un minimo di nozioni base sul web e'
>> possibilissimo. Ma sperare che uno che non ha mai programmato ci riesca e'
>> davvero fantascienza (poi vabbe' se uno e' un genio o e' talentuoso e' un
>> discorso a parte).
>>
>> Forse ci si dimentica che programmare non e' solo "usare uno strumento",
>> ma e' anche una "forma mentis", un approccio alla risoluzione dei problemi
>> che potrebbe non far parte dei processi mentali di una persona (che per
>> carita' puo' acquisire, ma ci vuole tempo, come per qualsiasi nuovo
>> processo mentale artistico o scientifico)
>>
>> Secondo me anche il sito di nonna papera sarebbe chiedere troppo.
>>
>> --
>> Roberto De Ioris
>> http://unbit.com
>> _______________________________________________
>> Python mailing list
>> Python a lists.python.it
>> http://lists.python.it/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python


Maggiori informazioni sulla lista Python