Linguaggio programmazione (lunghetto)

Massimo Masson blug@lists.linux.it
Tue, 19 Feb 2002 23:17:21 +0100


----- Original Message -----
From: "Roberto Cavada" <cavada@irst.itc.it>
To: <blug@lists.linux.it>
Sent: Tuesday, February 19, 2002 11:25 AM
Subject: Re: Linguaggio programmazione


> Tra c++ e java ti suggerisco certamente java:
> 1. java e' molto adatto per chi comincia

Dipende da cosa si intende per chi comincia...

> 2. c++ e' corss-platform solo in teoria. Intendiamoci: tra i due
> linguaggi il c++ e' il piu' ricco (ed il mio preferito) ma ha il
> grosso difetto di essere *molto* esteso e in continua evoluzione.

Beh, anche Java mi pare che sia molto esteso (ha una libreria di classi base
ormai non indifferente) e decisamente in evoluzione. Anzi, forse la release
1.4 del Jdk di un paio di giorni fa da parte di Sun direi che di novità ed
aggiustamenti ne introduce un bel po' in un colpo solo!
L'importante è focalizzare l'attenzione sulle caratteristiche fondamentali,
e quindi approfondire il resto man mano che serve (inquadrarlo si, in modo
da "vedere" dove cercare le soluzioni, ma approfondire ad hoc...

> Questo comporta dei problemi di reale portabilita' tra piattaforme e
> persino tra compilatori (gcc3.x vs gcc2.9x, ad esempio, per non
> parlare di MS Visual Studio, ma di quello non vogliamo parlare.)

Secondo me C++ non è strettamente cross-platform, piuttosto è un linguaggio
di programmazione implementato in molte piattaforme (anche GNU! ;) ) con il
quale si può scrivere codice che "giri", a patto di poche modifiche
(*GRINN*) od opportune direttive di compilazione su molte piattaforme. Da
questo punto di vista, Java è decisamente più cross-platform, in quanto lo
stesso codice gira in effetti su diversi sistemi operativi. Attenzione però,
perchè questo deriva dal modo in cui funziona Java, ovvero appoggiandosi ad
un codice intermedio che viene intepretato da una "virtual machine"
standard. Esistendo questa per molte piattaforme, e fornendo alle classi
java un ambiente omogeneo, si rende il risultato realmente cross-platform.

> Il mio suggerimento e' di cominciare con java (cosi' ti scontri con
> approcci formali, compilatori, ecc.), e poi interessarsi a python,
> che in Itaila purtroppo e' ancora poco utilizzato. Ti sconsiglio
> invece Perl (non me ne vogliano i puristi) per la sua sintassi non
> proprio intuitiva.

Java è a mio parere più "pulito" e coerente come linguaggio ad oggetti.
Quindi per imparare forse è meglio. Ma è decisamente meno efficiente di C++
che produce codice macchina (a volte anche ben ottimizzato!). Inoltre C++
eredita da C la possibilità di scrivere codice decisamente criptico, cosa
alquanto più difficile da fare con Java. Peraltro, Java elimina alcune
caratteristiche di C++ (ereditarietà multipla, aritmetica dei puntatori e
gestione della memoria) che danno alcuni tra gli spunti più "performanti" (e
pericolosi). C++ è al momento più vasto ancora, più efficiente e performante
(a mio parere ancora un poco più evoluto) e, se controllato dal
programmatore (e non viceversa...) in grado di produrre codice elegante
tanto quanto quello prodotto in Java. Inoltre consente ancora delle uscite
"fuori tema" in stile non object oriented (alle volte _sembra_ semplificare
la vita...).
Perl non l'ho mai approfondito (forse perchè lo ho sempre reputato un
linguaggio per sistemisti, o forse perchè non ho mai dovuto fare quelle cose
per cui è particolarmente potente...), python l'ho appena addocchiato (con
la scusa del suo aggancio con la wxWindows library e GNU Enterprise...) ma
mi pare carino, sintetico e semplice.

> [...]
> >  vorrei iniziare a studiare un
> >  linguaggio possibilmente cross platform ( si dice
> >  così?) ma ho un dubbio amletico :Java o C++ ?

In sintesi, credo dipenda molto dal motivo che ti spinge a studiare il
linguaggio e dagli obiettivi che ti sei prefissato.
Io programmo per passione, ed in questo momento sono decisamente infatuato
di Java (scaricati la 1.4, appena uscita. Ha interessanti novità) dopo aver
programmato in C++ (altrettanto splendido linguaggio) e C (uno dei primi
amori), se devi cominciare ti consiglierei Java per la sua maggiore
"pulizia" concettuale (in C++ puoi prendere sentieri oscuri che ti portano
in luoghi di perdizione della codifica) ed anche per il fatto che è il più
cross-platform che conosco, supporta in modo "nativo" una splendida gestione
degli errori e delle eccezioni (try...catch. C++ non ha nulla di simile)
nonchè il multi-threading (anche gli altri lo gestiscono, ma si appoggiano
al S.O. per quanto ne sappia).
Ad ogni modo, sia con Java che con C++ puoi ottenere tutto quello che vuoi.
Se invece lo scopo è manipolare liste o stringhe (magari per compiti di
"sistema" e non orientati alle applicazioni) allora perl/pythonl fanno più
al caso tuo (NON intendo dire che non si possa fare altro, solo che non mi
pare di aver visto progetti grossi sviluppati con questi linguaggi. Anche se
ho visto cose realmente notevoli eseguite con perl).
Se invece vuoi "programmare" pagine web o web applications, allora torna in
scena Java magari in alternativa a php.
Come vedi, dipende molto dagli obiettivi. (Nota: C++ è l'unico compilato,
Java va con bytecode, gli altri (tra quelli citati) sono tutti interpretati)
Se però scegli Java (ma arriva o no il messaggio subliminale di scegliere
proprio quello? :) ) dopo averlo studiato un po' ed averne acquisito la
logica, puoi anche saricarti dei bei front-end (come Forte o NetBeans, che
sono poi circa la stessa cosa) che ti permettono di mettere in piedi
un'applicazione a colpi di mouse e poi condire il tutto con un po' di codice
(in stile Visual Basic, per intendersi...).
Ah, un'altra considerazione, conclusiva. Tutto sommato Java non è poi solo
un linguaggio di programmazione, ma un vero ambiente dotato di una libreria
di classi standard estesa e potente (Database, XML, sicurezza, interfaccia
utente, grafica 2 e 3d, ...) e nel quale si sviluppano anche bei progetti
"free" (parti da Jakarta, ma non fermarti li...).