Newsgroup: it.comp.java
Titolo: Fare "l'upgrade" da Java a C

Non so chi di voi sia anche un programmatore C.
Io lavoro come programmatore Java da tre anni, e sono più interessato
ad una crescita da un punto di vista tecnico che da un punto di vista
gestionale. Inoltre mi sono stufato delle solite problematiche e ai
soliti ambiti del programmatore per il web. E difficilmente come
programmatore java ti discosti dal web.
Per questa serie di ragioni mi piacerebbe imparare a programmare in C,
o meglio in C++, o forse in C#, se adesso si chiama così.
A chi di voi fosse bilingue chiedo: Che percorso consigliereste ad un
programmatore Java per imparare a programmare in C? Quali risorse,
quali siti, quali newsgroup, quali manuali?
Secondariamente vi chiedo quali ambiti di mercato sono più attivi per
il C, e in quale rapporto sono le tariffe in confronto al Java?
Mi chiedo poi se un trentenne possa inserirsi così, come junior...
Grazie mille a tutti.
Anselmo

Non so chi tra voi sia anche un programmatore C.
Io lavoro da programmatore Java da tre anni, e poiché mi interessa più
la crescita sotto un profilo tecnico che sotto un profilo gestionale,
sto pensando di passare al C, o meglio al C++, e poi c'è quel C# che
nemmeno so cosa sia...
A chi di voi fosse "bilingue" chiedo: Quale percorso consigliereste ad
un javista per diventare un programmatore C? Quali fonti sul web,
inclusi newsgroup, quali libri, etc...
Inoltre, benché non sia l'aspetto più importante al momento, vi chiedo
dal punto di vista professionale come sia il mercato... quanta
richiesta, quali gli ambiti, il rapporto con le tariffe, etc...
Mi chiedo poi quale sia la reale possibilità per un programmatore
trentenne di inserirsi...
Be', grazie a chiunque mi possa e voglia rispondere.
Anselmo

 o meglio in C++, o forse in C#, se adesso si chiama cosě.
sarebbe interessante sentire queste ragioni, cosě ad occhio sembra che 
tu tiri parecchio a caso.
prova a documentarti cinque minuti (non di piů) su questi tre linguaggi 
e poi capirai perchč ti dico ciň.

 Mi chiedo poi se un trentenne possa inserirsi così, come junior...
Si' se ti accontenti di uno stipendio da junior...

 e poi capirai perchè ti dico ciò.
E' bastato leggere il messaggio di Riccardo per sapere cosa fosse C#,
che a questo punto non mi interessa più così tanto, forse può essere
un modo per fare un salto più graduale per arrivare al C++.
La differenza tra C e tra C++ invece dovrei conoscerla, ovvero che il
secondo è la versione object oriented del primo. In effetti è quello
che mi interessa di più, ma magari i contesti di programmazione più
interessanti riguardano il C, non so...
Grazie comunque della tua risposta, ora ti rispondo io. "Queste
ragioni" per cui mi passerebbe passare alla famiglia dei linguaggi C e
che tu trovi interessante sentire erano scritte sopra al periodo che
tu hai riportato.
Anselmo

Non so chi tra voi sia anche un programmatore C.
Io lavoro da programmatore Java da tre anni, e poiché mi interessa più
la crescita sotto un profilo tecnico che sotto un profilo gestionale,
sto pensando di passare al C, o meglio al C++, e poi c'è quel C# che
nemmeno so cosa sia...
A chi di voi fosse "bilingue" chiedo: Quale percorso consigliereste ad
un javista per diventare un programmatore C? Quali fonti sul web,
inclusi newsgroup
Inoltre, benché non sia l'aspetto più importante al momento, vi chiedo
dal punto di vista professionale come sia il mercato... quanta
richiesta, rapporto con le tariffe, etc...




 Si' se ti accontenti di uno stipendio da junior...
Lo stipendio da junior in C è uguale a quello del junior in Java?
Magari è anche meno, eh?
Anselmo

Direi che C# ha in comune con il C/C++ solo una lettera, per il resto
è una specie di Java un po' diverso; in 5 minuti dovresti trovarti a
tuo agio, insomma.
Per quel che riguarda C e C++...beh io non li uso da almeno cinque
anni, ma mi ricordo giorni e notti di pena e delirio :( Secondo me
programmare bene in C/C++ è molto più difficile che in Java, per i
soliti motivi: puntatori in primis, gestione della memoria, troppe
possibilità di sintassi, struttura del linker, ecc.
A mio parere per diventare programmatori C/C++ seri ci vuole molto,
molto più lavoro che con Java, quindi:
buona fortuna !!!!
www.megadix.it

 limite rimarrà un hobby.
Mi sa che è finito il tempo in cui un singolo programmatore riusciva a
sviluppare un gioco tutto da solo.
Al limite potresti produrre qualcosa di giocabile e divertente, rimanendo
in ambiente Java, su J2ME per cellulari.
Ciao
gl

 tu tiri parecchio a caso.


 > ...mi piacerebbe imparare a programmare
 > in C...
 >
 >
Io ho lavorato in C sette anni, non tornerei mai indietro! Java è un 
mondo troppo affascinante per lasciarlo, e la programmazione Object 
Oriented un requisito irrinunciabile!
 > ...lavoro come programmatore Java da tre anni, e sono più interessato
 > ad una crescita da un punto di vista tecnico che da un punto di vista
 > gestionale. Inoltre mi sono stufato delle solite problematiche e ai
 > soliti ambiti del programmatore per il web. E difficilmente come
 > programmatore java ti discosti dal web.
 >
 >
E' possibile che semplicemente tu debba cambiare posizione, spostandoti 
in un azienda che usi Java per fare applicazioni che possiedano una 
logica di business e non dei semplici sistemi CRUD. Certo, ce ne sono 
poche, come ci sono pochi programatori Java veramente capaci :)
Ciao,
     Bruno
P.S.
Occhio ai meeting del JUG Torino!
http://www.jugtorino.it/meeting
-- 
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
| Coordinatore del JUG Torino - 
http://www.jugtorino.it



Lascia perdere: i programmatori C (io sono un bilingue full) hanno futuro
solo nell'embedded, ormai, e appartengono a una generazione superata.
Questo che vuol dire che sono valutati molto ma anche poco ricercati.
Ciao.

 secondo è la versione object oriented del primo. 
No. C++ è un linguaggio. C è un altro. 
C++ *non* è un soprainsieme di C. È un linguaggio *diverso*, con un
certo grado di retrocompatibilità.
Ma il *modo* di programmare 'buono' in C++ è ben diverso da quello di C.
Tipicamente un buon programmatore C non è necessariamente un buon
programmatore C++ (e viceversa).
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 cambiando linguaggio.
Occhio a non infilarti in un mondo ancora piů preistorico, eh.


 resti un programamtore difficilmente guadagnerai parecchio.
Dipende dalle tecnologie. Comunque hai ragione, il punto chiave è che
hai scritto *in Italia*. Ma già rimanendo in team europei, magari usando
tecnologie non completamente mainstream...


> il secondo è la versione object oriented del primo.
E'OF> No. C++ è un linguaggio. C è un altro.  C++ *non* è un
E'OF> soprainsieme di C. È un linguaggio *diverso*, con un certo grado
E'OF> di retrocompatibilità.
C++ e` un insieme di idee potenzialmente buone, ma mal implementate.
Potenziare il C può essere buono, ma preferisco usare qualcosa dopo
che è stata potenziata :).
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software
A Cesare avrei detto di scrivermi a 
fn...@rat.vg

 certo grado di retrocompatibilità.
Mi sa che vuoi fare il saputello attaccandoti a questioni di lana
caprina, dire che il C++ è la versione Object Oriented di C mi sembra
abbastanza corretto, proprio tenendo conto di quello che dici.
Anselmo

 che è stata potenziata :).
Allora usa D. [ e no, non è uno scherzo ]


 abbastanza corretto, proprio tenendo conto di quello che dici.
abbastanza corretto come dire che una pera è la versione "allungata"
di una mela..
Matteo

 di una mela..
Ecco, il paragone regge.


 abbastanza corretto, proprio tenendo conto di quello che dici.
Mi sa che prima di dare giudizi sul sottoscritto, ne devi trottare di
strada.
In primo luogo non è chiaro cosa sia 'la versione object oriented' di un
altro linguaggio. Non è chiaro in assoluto, ma nel caso specifico lo è
ancora meno.
Per esempio pure ObjectiveC puoi vederlo come 'una versione object
oriented di C'. Addirittura quello è un *soprainsieme* proprio di C.
Eppure ti cambia la semantica e il modo di programmare. Introduce la
programmazione dinamica, per dire. 
E si programma in *modo* diverso.
Tipicamente se pensi il C++ come un C con le classi, puoi provare a
giustificare la tua affermazione. Purtroppo questa è una visione che si
ha solo conoscendo molto poco C++.
Se ci badi a moltissimi programmatori C, C++ *non* piace. E viceversa.
Sono due linguaggi per certi versi simili, ma la cosa finisce
sostanzialmente li.


> implementate.
E'OF> Esatto. Molto più carino è Objective C.
Ho vauto la medesima impressione, anche se non lo ho mai usato. 


 Ho vauto la medesima impressione, anche se non lo ho mai usato. 
Pensa, ha anche influenzato parecchio Java, anche se bisogna avere del
buon occhio per capire dove e come.



Scusa una curiosità: perchè dici questo? Purtroppo non conosco bene le 
differenze tra c e c++ in quanto lavoro alle volte con c++ e non con c.
grazie
andrae


Mi fai qualche esempio rapido? Oltre alla presenza di oggetti / classi, 
quali altre grosse differenze citeresti.
grazie
andrea

 quali altre grosse differenze citeresti.
Guarda che già la presenza degli oggetti cambia abbastanza il modo di
progettare il software. 
In C *non* hai le eccezioni. Nonostante questo significa avere una
gestione più complicata degli errori, ti da un maggiore controllo su un
flusso di esecuzione.
In un linguaggio come C++ o come Java dove *hai* le eccezioni, significa
che in ogni riga di codice in pratica può venire lanciata un'eccezione,
che ti cambia il flusso di esecuzione. Per cui scrivere del buon codice
vuole dire essere certo che ogni qual volta allochi una risorsa
(memoria, connessioni a db, a file quant'altro), questa risorsa venga
rilasciata per ogni possibile cammino di computazione.
Java mette a disposizione try/finally. In C++ si tende ad usare un
paradigma RAII. Ma al di la delle differenze fra i due sistemi, questo
significa organizzare il codice in maniera diversa rispetto alle
possibili condizioni di errore.
Questo per dire due cose sulle differenze fra C e C++. In particolare la
tua frase rispondeva a quando parlavo di Objective C vs. C. Ti
interessava quello oppure ho giustamente interpretato la tua richiesta?


 interessava quello oppure ho giustamente interpretato la tua richiesta?
In generale sono incuriosito dalla vostre risposte (nonchè dalla vostra 
saggezza in materia) in quanto, dovendo spiegare a mio nipote la 
differenza tra C e C++ avrei parlato della presenza di classi in C++ e, 
in effetti, anche le try / catch a cui non pensavo tempo fa.
vorrei capire se mi sfugge qualcos'altro di fondamentale. In generale 
poi mi piaceva capire due cose:
1) perchè molti considerano il C++ con buone idee ma mal implementate
2) anche capire cosa c'è di diverso in Objective C, perchè raccoglie la 
vostra stima e che parentela ha con C o C++ (o nessuno dei due).
Se non erro Objective C è il linguaggio usato su Mac OS X.
Tempo fa mi sono imbattuto per caso anche sul linguaggio D. Cosa ne 
pensate.
ciao
andrea.
P.S: Lo so che è off topic ma le conversazioni quando nascono nascono 
:). Che facciamo ci diamo tutti appuntamento su it.comp.c++? :D

> 
a> Scusa una curiosità: perchè dici questo? Purtroppo non conosco bene le
a> differenze tra c e c++ in quanto lavoro alle volte con c++ e non
a> con c.
La sintassi del C venne definita facendo uso (se non erro per la prima
volta)  di  una  teoria su  cui  basare  il  tutto. Il  risultato  fu,
guardacaso, elegante.
Inoltre si  basava sul presupposto  che "il programmatore sa  cosa sta
facendo"  (corollario: il programmatore  che non  sa cosa  sta facendo
stia alla larga).
Sturmtr       Stroustroup volle introdurre "innovazioni" come i
passaggi per riferimento che, da  una parte appaiono inutili (passi il
puntatore), dall'altro rompevano l'eleganza della sintassi.
Poi c'è  l'I/O. Con l'introduzione  degli oggetti venne  introdotto un
I/O  pascaliano, da un  certo punto  di vista  sensato, ma  per quanto
riguarda il testo, un passo indietro verso la preistoria riguardo alla
printf...
Abbastanza per rendermelo antipatico :).
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software
A Cesare avrei detto di scrivermi a 
fn...@rat.vg
P.S.  La  printf mi manca anche  in Java ogni tanto,  quando devo fare
dell'output decente verso la console...

 :). Che facciamo ci diamo tutti appuntamento su it.comp.c++? :D
Saremmo Off-Topic anche li. Temo che l'unico ng su cui saremmo in-topic
sarebbe it.comp.programmare. Se per tutti va bene, direi che ci possiamo
muovere di li.
Io finchè resto di qua tenterò di fare quanti più possibile riferimenti
a Java e alla programmazione ad oggetti 'in genere' in modo tale da
rendere la discussione solo leggermente OT e comunque potenzialmente
interessante per un frequentatore di questo gruppo interessato a Java.


 sostanzialmente li.
infatti. il C++ e' fondamentalmente un linguaggio inutile. se si vuole
usare un linguaggio ad oggetti vale la pena usare qualcosa di piu'
evoluto (Java, ObjC, Smalltalk,...), altrimenti usi il C, e le cose
che il C++ ha in piu' non ti servono.
Il C++ ha aggiunto magagne al C senza risolverne alcuna di quelle
vecchie: ci ha provato con il passaggio per riferimento nella
funzioni, ma e' poco utile, perche' tanto i puntatori li devi saper
usare bene lo stesso, e quindi si fa prima mantenendo la sintassi
"vecchia" del C, rimanendo piu' coerenti col resto.
Ciao Jack
PS: /me programmatore di C (in sistemi embedded)

 writes:
J> PS: /me programmatore di C (in sistemi embedded)
/me che  un po' ti invidia,  dovendo convivere con gente  che usa Java
come il cobol...


 "vecchia" del C, rimanendo piu' coerenti col resto.
Non sono d'accordo: i riferimenti sono *estremamente* comodi. Il fatto
che sia necessario manipolare i puntatori è un problema ortogonale: i
riferimenti non sono un sostituto ai puntatori.
Permettono di introdurre il passaggio per riferimento nel linguaggio (i
puntatori *non* costituiscono passaggio per riferimento, è passggio *per
copia* *del* puntatore, che solo da un punto di vista pratico ha un
comportamento simile).
Se guardi il modo corretto di strutturare le classi in C++, vedrai che i
riferimenti sono usati *spesso* e permettono una discreta comodità.
Sintattica in primo luogo [ per il chiamante passare per riferimento o
per valore non cambia la sintassi ]. Inoltre per quelli cui piace la
programmazione particolarmente 'inchiodata' permettono di *impedire* a
meno di zozzerie che gli oggetti passati siano modificati, anche per
errore. Io non sono un immenso fan di questa cosa, ma una volata che uno
lavora in C++ l'uso della keyword const ai posti giusti aiuta non poco.


 Abbastanza per rendermelo antipatico :).
Grazie per la risposta.. Io personalmente ho sempre trovato un po' 
ostico l'approccio del C, ad esempio, della funzione printf(..) perchè 
mi sembrava una funzione "tuttofare" con così tanti parametri 
opzionali, sequenze escape che mi ci perdevo...
capisco che magari lavorandoci tutti i giorni la si trovi utile e 
comoda. Ovviamente questa è la mia impressione da esterno :)
grazie
andrea

 è un bel linguaggio. 
Mi nasce una curiosità: ora apple darà supporto quindi anche ad altri 
linguaggi quali, ad esempio, Ruby. Su Ruby una cosa che personalmente 
non ho mai capito è: ne avevamo davvero bisogno?
Nel senso, siamo pieni di linguaggi di programmazione e ricordare le 
sfumature / differenze sintattiche e semantiche è comunque non banale: 
perchè aggiungere sempre nuovi linguaggi anzicchè magari potenziare gli 
esistenti (semmai) oppure creare solo soluzioni / framework più agili 
per lo sviluppo? Quale il tuo parere personale?
grazie
andrea

 opzionali, sequenze escape che mi ci perdevo...
Č una funzione terribilmente flessibile, in effetti. Nota che č anche
una fuznione 'copiatissima', sono tanti che in un modo o nell'altro la
hanno clonata.
C'č il comando unix printf, Perl ha una printf, PHP idem, lisp pure
(anche se si chiama in un alto modo), idem Ruby e Matlab. Ho scoperto di
recente che anche OCaml ne ha una.
Python in effetti ne ha una versiuone piů generale e pulita (ovvero non
ha una funzione per fare questo, ma puň applicare direttamente una
interpolazione alla printf su una tupla di argomenti, che
incidentalmente permette di clonare la printf e anche molto di piů --
diciamo che č una specie di snprintf).
Dimenticavo: Java 1.5 ha aggiunto pure lui la printf.


 per lo sviluppo? Quale il tuo parere personale?
Beh, uno ha voglia di scrivere un linguaggio perchè pensa di fare prima,
vuole vedere come è lo diverte. Altri iniziano ad usarlo. È nato un
nuovo linguaggio.
Un nuovo linguaggio (un nuovo *buon* linguaggio) porta con se un nuovo
modo di esprimere el cose e vedere i problemi. Impararlo fa crescere
*tantissimo*.
La cosa che più rimproverò a determinata parte della comunità Java è che
per l'appunto conoscono quasi solo Java (eventualmente VB e Javascript).
Per cui *pensano* solo in Java e non in modo 'astratto'. Ovvero
risolvono il problema in Java: non 'risolvono il problema'. Non sempre
la soluzione migliore ad un dato problema è espressa nel modo tipico di
un dato linguaggio.


 writes:
E'OF> Permettono di introdurre il passaggio per riferimento nel
E'OF> linguaggio (i puntatori *non* costituiscono passaggio per
E'OF> riferimento, è passggio *per copia* *del* puntatore, che solo da
E'OF> un punto di vista pratico ha un comportamento simile).
Dal  punto  di  vista teorico  sono  diversi  (nel  senso che  non  e`
garantito  che siano implementati  come puntatori).  Ma mi  sembra che
solo  Java  faccia  l'esplicito  riferimento  al fatto  che  non  sono
indirizzi di memoria.
Nella pratica non mi pare che ci sia molta differenza tra
foo(bar *baz) { ... }
foo(&somebaz);
e
foo(bar &baz) { ... }
foo(somebaz);
E'OF> permettono di *impedire* a meno di
E'OF> zozzerie che gli oggetti passati siano modificati, anche per
E'OF> errore.
Vuoi dire che in C++ rendi costante TUTTO l'oggetto e non il riferimento ?



RAILS sicuramente è un discorso apparte ma quello che, ad esempio non 
capisco: perchè non creare RAILS con PHP o Python ed introdurre di 
fatto un linguaggio "nuovo" (intendo nuovo ai molti)?
Così come non ho mai capito (capisco le ragioni, ma non le giustifico) 
perchè bisogna ragionare con Javascript e VbScript e non un solo 
linguaggio, ecc. ecc.
Sono sicuramente dell'avviso che in realtà sono importanti i concetti 
fondamentali non i costrutti di un linguaggio (puoi imparare un nuovo 
linguaggio in pochissimo, il tempo di capire le variabili, i cicli, le 
funzioni come sono fatte, ecc. ecc..) per cui il linguaggio e la 
sintassi nuova non mi spaventa.
Però bisogna anche considerare che vi sono degli errori che nascono 
proprio dalla confusione dei vari linguaggi.. molte volte passando da 
PHP a Java a VB, poi .NET, capita di dimenticare (non il costrutto) ma 
che quella determinata cosa ha una sementica differente nel linguaggio 
in cui ti trovi adesso :D.
Ciao Enrico, grazie al solito per le tue risposte,
sempre molto piacevoli e interessanti.
andrea

 Vuoi dire che in C++ rendi costante TUTTO l'oggetto e non il riferimento ?
Si. O meglio, stai garantendo che nessuno lo modifica (e in effetti a
meno di trucchetti e scappatoie č cosě).


 in cui ti trovi adesso :D.
Eh, ma mica si possono castrare tutti i programmatori perchè alcuni non
si riescono ad adattare un nuovo ambiente.


 si riescono ad adattare un nuovo ambiente.
Non intendevo non saperi adattare. Immagina questa giornata tipo: devi 
scrivere un programma PHP poi passi a Java. Dopo avvi e migliori un 
tool in .NET. Poi passi a scrivere un batch della shell Unix...
Solo io faccio confusione alle volte? Se così è quasi quasi mi 
consola... evidentemente sarò il solito distrattone :)
ciao Enrico, al solito grazie per i tuoi POST
andrea

> riferimento ?
E'OF> Si. O meglio, stai garantendo che nessuno lo modifica (e in
E'OF> effetti a meno di trucchetti e scappatoie è così).
Sai che mi appare una cosa di utilità pressochè nulla ?
Ci vedo  solo un senso  quando hai una  figura che progetta  il codice
nelle sue interfaccie  e poi una caterva di  servi che costruiscono il
codice  dietro alle  interfaccie,  ti eviti  che  il "servus  calidus"
faccia la cavolata del secolo.
Ma è  l'unico caso in  cui vedo il  chiamante che deve  difendersi dal
chiamato. Altri al momento non me ne vengono in mente.
Usualmente il chiamato preesiste e deve "difendersi" da usi impropri
da parte del chiamante.
Sinceramente, non vedo  che differenza ci sia tra  fare un riferimento
costante o  meno o  scrivere la cosa  nella documentazione  del metodo
(che _devi_ andarti a vedere).


 consola... evidentemente sarò il solito distrattone :)
Salvo C# e Java che sono abbastanza simili da potere IMHO generare
confusione, non credo che ci sia pericolo fra PHP e Java. Sono troppo
diversi. Riguardo agli script di shell, le rare volte che mi capita di
farne (normalmente uso per l'appunto Python o Ruby, preferisco avere
regex integrate e un linguaggio completo e integrato rispetto a chiamare
awk -- di cui mi scordo continuamente la sintassi -- e sed), beh, è un
continuo scordarsi qualcosa.
Ma per fortuna non è il mio 'mestiere'.
E per il resto, salto spesso di tecnologia, ci sono abituato. Al momento
ho roba in Prolog e Ruby, per dire. 


 viceversa *rompi* il codice.
Io questo lo vederi come un difetto molto ma molto grosso e non come un 
pregio.
Io scrivo un pezzo di codice in cui chiamo un metodo (magari di una 
libreria) passando una parametro per valore e mi aspetto che il 
parametro che ho passato non cambi in conseguenza di questa chiamata.
Tutto funziona alla perfezione fino a quando qualcun altro non decide di 
cambiare il metodo che ho chiamato trasformado il parametro in un 
passaggio per riferimento.
Conseguenza: risultati impredicibili e notti insonni alla ricerca del baco.
Il fatto che un passaggio è per riferimento anziché per valore non è 
affatto un "piccolo dettaglio dell'interfaccia" ma un'informazione 
estremamente importante che cambia la semantica del metodo.
L'unica cosa che potresti definire "dettaglio" è cambiare il passaggio 
per valore in un passaggio per riferimento costante (se i miei ricordi 
di c++ sono corretti). Nel primo caso viene passata una copia e quindi 
qualunque modifica non avrà effetto sull'oggetto originale, nel secondo 
si dichiara che non si faranno modifiche sull'oggetto che viene passato.
Tornando a Java preferisco decisamente la sua impostazione molto 
"uniforme" anche se bisogna capire che non esistono variabili di tipo 
oggetto ma solo riferimenti ad oggetti (e che questi vengono passati per 
valore).
Una cosa che potrei invidiare al c++ è la possibilità di definire metodi 
const che sono gli unici che si possono invocare su un oggetto const (o 
un riferimento const).
In realtà lo stesso risultato sarebbe ottenibile strutturando bene la 
gerarchia delle interfacce e delle classi, anche se porterebbe ad un 
proliferare delle stesse (cosa che nella libreria di Java non è stata 
fatta).
Andrea

 fatta).
Tra l'altro la proliferazione di classi e interfacce solo per fare
digerire al compilatore cose abbastanza ovvie è uno dei problemi
principali che vedo in Java.



Ultima parentesi OT in questa direzione: tra Rails e Django cosa mi 
consiglieresti?
grazie
andrea

 consiglieresti?
Questa è una domanda complessa. Non saprei rispondere facilmente.
Ruby e Python sono eccellenti linguaggi e i framework sono entrambi
ottimi.
Forse Rails è più supportato allo stato attuale e ha una base di utenti
maggiori. 
Ma davvero, va più a gusti che questioni effettive.
