Newsgroup: it.comp.java
Titolo: JAVA O ALTRO (lunghetto)

 chiedervi se vale la pena di mettersi a guardare un 'po anche Java.
Non voglio iniziare una guerra tra estimatori di linguaggi di programmazione,
ma dare il mio modesto contributo alla discussione.
(Presentazione: ho 33 anni. Programmo da quando ne avevo 14. Negli anni
ho imparato, usato, (e spesso dimenticato...) diversi linguaggi, tra cui:
FORTRAN, COBOL, BASIC, Pascal, Forth, Lisp, Algol, APL, Prolog, C, e attualmente
per motivi che esulano dal contesto, anche Java e li ho fatti girare
su macchine che vanno dal commodore vic-20 al CRAY T3E)
Dei vari linguaggi che ho usato quello che mi sembra piu' 'universale'
(nel senso che si presta ad un piu' ampio spettro di applicazioni) e' il C.
Se sei interessato e scrivere programmi che usano anche finestre mouse e 
altre interazioni con l'utente probabilmente devi sciropparti anche la
programmazione object oriented e quindi il C++.
Se sai il C e hai piegato la tua mente alle perversioni dell'object oriented
allora il salto verso Java e' relativamente semplice in termini di linguaggio,
nel senso che Java prende in prestito parecchia sintassi dal C e alcuni
concetti dal C++.
Il FORTRAN e' un evergreen. Se ti interessa fare del number crunching,
non te ne importa molto delle interazioni con l'utente, e vuoi sfruttare
i milioni di routines matematiche/ingegneristiche gia' esistenti
allora il FORTRAN puo' essere una buona scelta, magari usando qualche libreria
per la grafica. Tra l'altro se conosci
il C o il Pascal o il Modula credo che tu possa imparare il FORTRAN in non
piu' di 2 o 3 ore (e poi puoi sempre citarlo nel curriculum....)
Il grande vantaggio di FORTRAN e C (e C++) rispetto ad altri linguaggi
e' che e' piu' facile trovare buoni compilatori GRATUITI per molte piattaforme
(e molti sorgenti per risolvere svariati problemi).
Ad esempio, io a casa ho un PC e al lavoro delle workstation UNIX : uso
su entrambe un compilatore C (quello della GNU e il porting DJGPP) 
che sono buoni e non costano nulla. (E siccome i miei programmi sono 
essenzialmente matematici, non devo cambiare una virgola del sorgente passando 
da una piattaforma a un'altra.)
E' un luogo comune che il pascal sia un buon linguaggio 'didattico'.
Effettivamente e' vero. Ma se una persona e' sveglia e' meglio che 
impari subito un linguaggio 'serio' invece di perder tempo con il pascal.
(e ve lo dico io che l'ho usato per 10 anni....)
Il COBOL e' una palla. Penso sia ancora usato, ma sicuramente non in ambiti
scientifici.
Il BASIC e' un linguaggio per bambini, nel senso che anche un bambino puo'
impararlo. Ci si possono fare tante cosette, ma non professionalmente.
Comunque anche il basic si puo' imparare in un paio di ore.
(Nostalgia: il basic sui commodore vic-20 / C64).
Il Visual Basic e' probabilmente qualcosa di piu' evoluto, ma non l'ho
frequentato.
I vari Forth, APL, e Lisp sono linguaggi simpatici ma in ambiti ristretti.
Il Prolog serve essenzialmente agli accademici per scriverci sopra degli
articoli e vincere concorsi qualora in commissione ci siano altri
accademici
che hanno fatto carriera scrivendo articoli sulla semantica del Prolog.
Veniamo a Java. Non sono un esperto nel senso che sto ancora sviscerando
il linguaggio. La cosa piu' divertente e' che viene venduto come linguaggio
semi-interpretato e quindi portabile. Per il momento la portabilita' e'
per molti versi una bufala. Intanto il linguaggio (e la sua caterva di 
classi) mi sembra ancora in evoluzione, vedi differenze tra versione 1.0 e 1.1,
con conseguenti problemi se uno usa un browser non aggiornato (che magari
per certe piattaforme non esiste...).
A parte questi problemi, direi di gioventu', Java puo' avere alcuni pregi.
Il pregio essenziale (sono cattivo!) e' che e' di moda.
Secondariamente ammetto che Java facilita lo sviluppo di applicazioni
distribuite, tipo client-server, ed ha buone potenzialita' per sviluppare
interfacce grafiche, interazioni con l'utente e si integra bene 
con il mondo www http url ecc.ecc.
Se pero' sei interessato a far girare dei programmi per i quali la velocita'
e' essenziale (come molti programmi di calcolo che sicuramente ad
ingegneria avrai incontrato) io ti consiglio di lasciar perdere Java, almeno
per il momento.
Tanto per darti una idea della inefficienza di Java ho scritto due programmini
di poche righe, uno in C e uno in Java.
Entrambi sommano i numeri interi da 1 fino a N in un numero floating point 
(un double).
Su una workstation Sun ho compilato entrambi i programmi, quello in C con
il gcc e quello in java con il compilatore javac del jdk1.1.4.
Per N=10 milioni,  il C ci mette 1.36 secondi, quello in java 12.90 secondi.
Anche togliendo il tempo iniziale di invocazione di java (circa 0.5 sec.)
il programmetto java e' circa 9 volte piu' lento !
Su altri esempi meno patologici, tipo moltiplicazione di matrici ho avuto
un rallentamento di un fattore 4.
Ci sono tanti programmi seri che ci mettono ben piu' di 1.36 secondi a girare.
Pensate ad un programma che in C ci mette mezzora. Chi ha voglia di 
aspettare 2-4 ore l'output del corrispondente programma java ?
Si puo' obiettare che Java ammette l'interfacciamento con programmi nativi
compilati scritti in C. Ma visto che in questo modo perdo probabilmente la
(presunta) portabilita', chi me lo fa fare di complicarmi la vita con 
due linguaggi quando posso fare tutto con uno, cioe' fortran o C o C++, 
piu' un po' di  librerie per la grafica ?
(Per alcune piattaforme ci sono poi anche i 'just in time compilers' che 
sostanzialmente si attaccano all'interprete in modo trasparente e che fanno una 
specie di compilazione on-line, in modo che dopo la prima passata l'esecuzione 
dovrebbe essere molto piu' veloce. Confesso che non li ho ancora sperimentati.)
Quello che volevo suggerirti e' che dovresti utilizzare sempre lo
strumento piu' 
adatto al lavoro che devi fare. Per molte cose Java e' ottimo. Per altre,
almeno per il momento, no. Inoltre e' piu' faticoso da imparare
di molti altri linguaggi. (Il libro sulle classi predefinite di java ha piu' 
di 1600 pagine.... anche se non ti serviranno mai tutte, come fai a conoscere
le potenzialita' del linguaggio se non lo sfogli tutto almeno una volta ?...).
E sta ancora evolvendo, con conseguenti disallineamenti degli interpreti e/o
compilatori sulle varie piattaforme, quindi lo consiglio solo a coloro che
vogliono effettivamente utilizzare le sue caratteristiche peculiari,
non a coloro che sono interessati ad un buon linguaggio di carattere generale.
Questi miei giudizi sono (per motivi di spazio) un po' crudi, semplicistici,
e passibili di futuri cambiamenti. Mi perdonino i fans dei vari linguaggi che 
ho maltrattato.
Saluti a tutti.
Giovanni.

 ho maltrattato.
In una cosa concordo del tutto: essere 'fan' di un linguaggio e' decisamente poco produttivo; e' pero' necessario *esaminare*
pro e contro di ciascun strumento di sviluppo, e poi decidere cosa usare.. e non confondere mai le proprie conoscenze con
le possibilita' dello strumento.
Saluti,
    CS
--
Cristiano Sadun - Software Engineering and Consulting
***********Remove NOSPAM from address to reply***********
*********************************************************
"God is Real - unless declared Integer"

le possibilita' dello strumento.
E' vero... io avevo un professore che ci faceva fare di tutto con
l'assembler... tipo il master mind in grafica come esercitazione
pratica di laboratorio! o un gestore di allocazione della memoria come
compito scritto! io e altri eravamo entusiasti di questo, ci
ritenavamo dei geni, coloro che sapevano scrivere nel linguaggio piu'
potente... l'assembler... fino a quando mi sono scontrato con una
bellissima prof di informatica che mi ha inculcato il senso
dell'"astrazione" (si, lo definisco proprio un "senso", una delle cose
piu' basilari e coinvolgenti dell'informatica e della scienza in
generale...).
Quindi, il fatto di saper scegliere gli strumenti giusti viene come
caratteristica fondamentale per ogni programmatore.
Addirittura, la mia prof diceva che due suoi compagni dell'universita'
avevano scritto due interpreti lisp; uno studente l'aveva realizzato
in assembler, l'altro in lisp (!). Quale era piu' performante? Quello
in lisp! E' un esmpio limite, pero'... ve l'immaginate la rabbia di
quello che si era fatto il mazzo con l'asm??
Io trovo il linguaggio Java, oltre a tutto il polverone che ha
suscitato e ai vari applet stupidi che servono solo per far impallare
il browser e/o rendere decine di volte piu' pesante una pagina, come
un'ottima cosa, se usata nel modo giusto (non certo per il number
crunching!!). Il fatto della portabilita' in se' stessa (la
caratteristica di piu' assoluto rilievo) differisce dal c
semplicemente perche' non occorre ricompilare il codice per farlo
girare sulla tal piattaforma. Con java, e' sufficiente che la tal
piattaforma possieda una jvm e che lo sviluppatore scriva buon codice
(e si, questo e' necessario, non e' mica tutto automatico!!!).
Scommetto che sono purtroppo pochi quelli che danno in giro il codice
delle proprie apps solo per renderle portabili... per fortuna che c'e'
la free software foundation e tutto il sistema gnu.
Ciao
as