Newsgroup: it.comp.programmare
Titolo: Linuaggi piu' diffusi ed usati: quali sono?

Ciao,
esiste una classifica affidabile
che indichi i linguaggi di programmazione
effettivamente piu' usati dagli ingegneri,
informatici e dalle aziende specializzate
in applicazioni web e non?
Quali linguaggi tra Java, C, PHP, VB .net,
hanno un futuro?
Lo so, sono domande difficili...

 hanno un futuro?
Direi tutti (.net è una piattaforma, non un linguaggio), come anche parecchi
altri linguaggi, tra cui Python. ;-)
-- 
Nicola Larosa - 
http://www.tekNico.net/
Non è vero che la classe politica è tutta uguale. Ma i pochi galantuomini
che ne fanno parte la legittimano. Non si può votare il meno peggio.
Non si deve perdere la speranza di un meglio. Chi vota il meno peggio
legittima il peggio. -- Beppe Grillo, Febbraio 2008

 altri linguaggi, tra cui Python. ;-)
N.B.: 
VB.NET
 e' un linguaggio. Deriva da Visual Basic, ma essendo molto 
diverso da esso, e' preferibile denotarlo diversamente.
L'utilizzo di un linguaggio in azienda dipende da molti fattori, tra cui:
* Il software esistente che deve essere riutilizzato, dalla manutenzione 
ordinaria (ossia piccoli ritocchi), alla completa ristrutturazione, 
nella quale tuttavia si vuole riutilizzare qualcosa.
* Le conoscenze dei programmatori disponibili all'azienda, e il loro 
costo (un bravo programmatore C++ costa di piu' di un bravo 
programmatore VB).
* Il dominio applicativo. Per esempio, per l'amministrazione aziendale 
si usano linguaggi diversi da quelli usati per il calcolo scientifico.
* La mole del software. Per un progetto che un solo programmatore puo' 
sviluppare in una settimana si usa un linguaggio diverso da quello usato 
per un progetto che una squadra di dieci programmatori impiega cinque 
anni a completare.
Non mi sembra molto interessante chiedersi se sia piu' usato Javascript 
o l'Assembly. Sarebbe piu' interessante chiedersi quale linguaggio e' 
piu' usato per nuovi progetti o per manutenzione di vecchi progetti, per 
un dato ambito applicativo, per una data dimensione dell'applicazione.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 diverso da esso, e' preferibile denotarlo diversamente.
Ah ok, lo spazio in "VB .net" mi aveva fatto capire che si parlasse di due
cose distinte, sorry.
-- 
Nicola Larosa - 
http://www.tekNico.net/
The [European] Parliamentary Assembly therefore urges the member states,
and especially their education authorities: [...] to firmly oppose the
teaching of creationism as a scientific discipline on an equal footing
with the theory of evolution and in general resist presentation of
creationist ideas in any discipline other than religion.
 -- European Parliament, resolution 1580 (2007)


wrote:

Il problema e' un altro, un giovane che vuole, anche in ambito
universitario,
imparare bene un linguaggio *deve* fare una scelta. E' ovvio che
le basi della programmazione ad oggetti, funzionale, ecc. sono sempre
le stesse,
ma *per programmare effettivamente* serve conoscere bene uno o piu'
linguaggi.

Keith ha scritto:

Non ho capito quale e' il problema.
Se l'obiettivo e' solo scegliere un linguaggio *per programmare 
effettivamente*, allora c'e' solo l'imbarazzo della scelta.


 linguaggi.
E' un errore madornale confondere la programmazione con il linguaggio.
Se sai programmare, in senso astratto ed assoluto, del linguaggio ti 
basta solo imparare la sintassi che e' cosa di poche ore.
Se invece ti concentri sul linguaggio, ma trascuri la programmazione in 
senso astratto, non andrai mai da nessuna parte.
Tuttavia, siccome per imparare la programmazione almeno un linguaggio 
serve per farci pratica, esempi e tutto il resto, ti occorrono due tipi 
di linguaggio: uno procedurale e uno ad oggetti, e la scelta di quale 
linguaggio adottare per apprendere la programmazione non deve essere 
dettata dal futuro utilizzo di quel linguaggio in ambito lavorativo, ma 
semmai e' opportuno scegliere un linguaggio piu' finalizzato alla 
didattica e il piu' possibile sganciato dalla piattaforma operativa.

 didattica e il piu' possibile sganciato dalla piattaforma operativa.
Perché non uso che sia procedurale _e_ ad oggetti e magari con qualche
tratto funzionale :P ?
Uno a caso eh <g>
-- 
Lawrence, 
oluyede.org
 - 
neropercaso.it
"It is difficult to get a man to understand 
something when his salary depends on not
understanding it" - Upton Sinclair

 didattica e il piu' possibile sganciato dalla piattaforma operativa.
Io sono convinto che a parte un corso base sulla programmazione
che sia utile, e' assolutamente necessario applicare cio' che
si apprende con un linguaggio davvero diffuso, altrimenti
si perde solo il tempo.
Non mi piace dedicare ore ed ore di studio con un linguaggio
che poi non usero' mai nella pratica lavorativa.
Per farti un esempio, chi studia architettura gia' all'universita'
usa Autocad o altri software che costituisono degli standard di
fatto nel mondo della progettazione. In tal modo, quando
lavoreranno davvero su progetti reali, avranno gia' le conoscenze
per farlo. Immagina un laureato in architettura che non sa usare
Autocad o un altro software diffuso in ambito lavorativo, si
troverebbe
a dover apprendere un nuovo sistema e, quindi, a perdere molto
tempo invece di progettare...

 tempo invece di progettare...
Aspetta... non puoi paragonare uno strumento applicativo con un linguaggio
di programmazione.
Tutti i linguaggi di programmazione alla fine producono un programma, che,
quando e' pronto, e' indipendente dal compilatore che lo ha generato.
Un applicativo e' un applicativo che serve per creare o modificare dei
dati.
Nella fattispecie Autocad produce dei dwg.
Li puoi fare solo con autocad i dwg.
Un altro ipotetico applicativo che produca dei dwg dovra' avere le stesse
funzionalita' di autocad, e quindi si differenziera' da autocad solo
dall'interfaccia, ma il concetto di tracciare una linea che unisce due
punti sara' il medesimo.
Un architetto deve sapere che ha bisogno di tracciare una linea tra due
punti. Che poi lo faccia con autocad, o con una alternativa, o con matita
e righello, la cosa non cambia.
Imparare autocad non fa di te un architetto, mentre puoi essere architetto
senza saper utilizzare autocad (che il Brunelleschi, quando ha progettato
il cupolone a Firenze, autocad mica ce l'aveva, e oggi che autocad ce
l'hanno tutti, di cupole come quella non sono capaci di farne piu').
Torniamo al discorso iniziale: non confondiamo l'arte con lo strumento per
realizzarla.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 disposizione, ma perche' questo dovrebbe comportare casini?
[cut]
Usando non efficientemente oggetti e classi.

 Usando non efficientemente oggetti e classi.
Quindi il problema sta negli oggetti e nelle classi, non nel linguaggio.
L'oggetto esiste indipendentemente dal linguaggio.
Il linguaggio lo istanzia e ne richiama proprieta' e metodi.
L'oggetto non e' il linguaggio.


 significato di classi, oggetti, annessi e connessi.
[cut]
Non voglio generalizzare, forse per qualcuno non e' affatto
ostico, ma ci sono parecchi esperti (vedi B. Eckel)
che lo ritengono difficile ed ostico anche per chi ci programma
da molti anni.

 linguaggio
Dipende dal linguaggio.


in applicazioni web e non?
E' sempre abbastanza rischioso fare classifiche di questo tipo, perché
nessuno ha una visione generale di TUTTO il mondo della programmazione
e si rischia di dire cose inesatte. Si può fare una stima molto buona
del vero dicendo che il linguaggio di gran lunga più utilizzato, oggi
come oggi, è Java su piattaforma J2EE - o JEE che dir si voglia. Il
C++ viene usato per ambiti molto specifici e credo che, con l'avvento
di .NET e C#, sia stato spinto un po' nelle retroguardie. Tieni
presente che molte aziende CREDONO di sviluppare in C++, quando in
realtà fanno solo uso massiccio di C, con qualche classe di mezzo.
Il C++, quello vero, viene usato da poche élite di programmatori in
gamba. Il C è ancora molto usato in campi in cui servono le
performance o gli interfacciamenti a basso livello e laddove si può
prescindere dall'oggettiva complessità del C++. La piattaforma .NET e
il C# stanno avanzando moltissimo e, personalmente, avendo già una
buona esperienza in C/C++ e Java, sto seguendo questa nuova strada.
Esistono poi linguaggi relativamente giovani come Python e Ruby che
hanno applicazioni molto interessanti. Chi ha un po' di anni di
esperienza alle spalle necessariamente conosce più di un linguaggio e
sa scegliere quando applicarlo al proprio lavoro (cliente
permettendo). Concordo assolutamente quando affermi che un linguaggio
o il funzionamento di una piattaforma non si apprendono con uno
schiocco di dita e che gli vogliono anni d'esperienza per dominarle.
E' indubbiamente vero: J2EE è un mondo vastissimo, Java ha miriadi di
framework che gli gravitano attorno, C++ è un linguaggio
oggettivamente ostico e dalla curva d'apprendimento molto ripida.

E' un errore madornale confondere la programmazione con il linguaggio.
L'errore madornale è pensare che basti un manuale e il gioco è fatto.
Programmare non è un'attività astratta o, perlomeno, lo è solo in
parte. Chi programma professionalmente dovrà poi applicare certi
concetti e dovrà farlo in maniera produttiva. E per essere produttivi,
bisogna conoscere approfonditamente linguaggi e tecnologie, attività
che evidentemente non è possibile completare nel giro di poche ore,
come invece affermi. Un linguaggio come Java non si porta dietro solo
una sintassi, esattamente come non è l'unica cosa che si porta dietro
il C++. Ma anche se fosse così, i linguaggi hanno bisogno di studio ed
esperienza per capirne tutti i caveat. Non basta sfogliarsi il manuale
in mezza giornata; a meno, ovviamente, di non voler far piangere
lacrime amare al cliente di turno (non che molte aziende si facciano
problemi per questo). Java è quasi sempre calato in un contesto
specifico, da conoscere bene, per essere realmente produttivi. Per
diventare realmente produttivo in C++ ci vogliono ANNI di
programmazione attiva in questo linguaggio. Leggendo gli interventi di
Keith in questo thread, credo che abbia le idee già MOLTO chiare a
riguardo e non abbia bisogno di ulteriori consigli.

L'oggetto esiste indipendentemente dal linguaggio.
Un particolare modello ad oggetto o un particolare sistema di tipi NON
esiste indipendetemente dal linguaggio. Per programmare
efficientemente in un linguaggio non basta sapere che un oggetto, in
C++, è analogo a un oggetto in Java o in Python. Bisogna anche sapere
COME C++ o Java o Python gestiscono quell'oggetto. In C++, tanto per
fare un esempio di linguaggio che richiede un'ampia conoscenza delle
sue caratteristiche, è possibile allocare oggetti sullo stack e
distruggerli in maniera deterministica (al contrario di Java o
Python). Questo significa che è possibile applicare efficientemente,
in C++, l'idioma RAII. C'è una bella discussione di Carlo Pescio (uno
dei più grandi esperti di C++ al mondo) su questo tema. Ti consiglio
di recuperarla. In C++ è possibile usare i template e programmare in
maniera generica. E' un'attività estremamente potente, estranea ad
altri linguaggi (i nuovi generics di Java sono un pallido tentativo
d'imitazione) e perlopiù sconosciuta a molti che si professano
programmatori C++. Per farla breve, la tua idea che la conoscenza di
un linguaggio sia tutto sommato marginale rispetto ai concetti
generali validi in programmazione è, a mio avviso, errata.

da molti anni.
Il C++ è un linguaggio ostico a prescindere. Il fatto stesso che non
esista ancora un'implementazione dello standard ISO 100% compliant, la
dice lunga.

 generali validi in programmazione è, a mio avviso, errata.
E' la tua rispettabile opinione.
Io ribadisco che sono i concetti generali di programmazione ad essere 
prevalenti. La buona conoscenza di un linguaggio puo' permettere di 
programare in modo piu' veloce, ma non mette certo al riparo da errori 
concettuali, o da codice mal scritto.
Io so di non avere alcun problema a passare da un linguaggio all'altro.
Mi e' capitato di scrivere e modificare codice scritto in C, in pascal, 
in perl, in Python, in java, in Rexx, in VBscript, in shell script, in 
PL/SQL e in un'altra dozzina di linguaggi proprietari di altrettanti 
applicativi senza avere mai avuto difficolta' proprie del linguaggio.

 riguardo e non abbia bisogno di ulteriori consigli.
Speriamo.

applicativi senza avere mai avuto difficolta' proprie del linguaggio.
La maggior parte dei linguaggi che citi sono procedurali e Java, per
tua stessa ammissione, l'hai usato pochissimo. Io temo che tu non
abbia avuto difficoltà ad applicare il paradigma procedurale da un
linguaggio all'altro. Il modello di programmazione ad oggetti è
profondamente diverso, introduce questioni nuove e più complesse.

invece che 5, allora io non sono produttivo.
Chiunque programmi seriamente sa bene cosa sono dei vincoli di
produttività.

 ad aprire un file, leggere una riga e chiuderlo.
Buon per te. Io non ho mai perso piu' tempo del necessario dietro ai
linguaggi. Quando mi serve vado a cercare come si scrive.


 linguaggi. 
Difatti non sei mai diventato esperto di nessuno di essi.
L'hai detto tu.


 linguaggio.
Ora io non voglio scendere nel merito e permettermi di giudicarti 
(specie non avendo visto il tuo codice). Non necessariamente un 
programma 'che funziona' è un *buon* programma. Il fatto di avere 
scritto un programma in un linguaggio non vuole dire avere scritto un 
*buon* programma, ne sapere scrivere un programma decente in quel 
linguaggio.
Parlando per me, fatico a enumerare i linguaggi diversi che più o meno 
conosco. Tuttavia la mia professionalità mi *costringe* ad ammettere 
che in un numero non trascurabile di questi *non* potrei affrontare un 
progetto complesso senza avere preventivamente studiato come si deve 
(ovviamente dopo avere studiato posso lavorare anche in un linguaggio 
che al momento non conosco; ne ho viste un po' di tutti i colori, credo 
che poco possa sorprendermi). Ho visto troppi programmi scritti in modo 
dozzinale per fare l'errore di pensare di potermi improvvisare (o forse 
ho standard qualitativi piuttosto elevati).
Ho visto programmi Python scritti come fossero Java. Brutti, 
inefficienti, ineleganti. Metà della comodità che si avrebbe usando 
python è sparita, si prende una botta prestazionale doppia (per averlo 
fatto in Python e e per averlo scritto con in culo).
-- 
Software development is technical activity conducted by human beings.
Niklaus Wirth