Newsgroup: it.comp.lang.c++
Titolo: /me ignorante

Salve sono nuovo del ng e non so proprio cosa sia il c++, cioè so che è un
linguaggio di progr, so che all'università si studia sempre c++, ma quello
che non so è perchè. Un pò come se doveste fare una recensione - critica del
c++, mi sapete dire quali vantaggi si hanno nell'usare il c++, quali sono le
maggiori difficoltà, magari facendo qualche paragone con qualche altro
linguaggio?
Vi chiedo questo perchè sarei interessato a impararlo.
Grazie.

 wrote

Rispondere alla tua domanda in modo appropriato significherebbe non dare
opinioni personali ma limitarsi ad esprimere i fatti.
Putroppo i fatti non saresti forse in grado ne di comprenderli, ne di
apprezzarli.
La risposta al tuo post sarebbe inoltre lunga, e non facile.....
Un libro interessante che risponde a tutte le tue domande e' : "Programming
Languages Pragmatics" di Michael L. Scott.
Il problema sostanzialmente e' quello che ti ho appena detto:
per leggere questo libro devi saper gia' programmare in qualche linguaggio
(ad esempio in C++), altrimenti dubito ti possa aiutare!
Quindi mi limito a rispondere in modo approssimativo e esponendo le mie
opinioni personali.
Se anche altri ti risponderanno allora avrai magari una immagine piu'
completa e chiara.
Prima di tutto molte universita' stanno passando a Java e stanno
abbandonando il C++.
Che io sappia alle universita' hanno insegnato Pascal per tanti anni. Poi
molte sono passate al C.
Molte sono poi passate al C++ per poi cambiare molto rapidamente verso Java.
Ovviamente ogni universita' ha la sua storia..... e la sua scelta di
linguaggi, ma quello descritto e' quello che e' successo nella media dei
casi (almeno secondo la mia opinione).
I motivi principali per il passaggio a Java sono:
- Java e' piu' semplice.
- Java e' piu' "puramente" Object-Oriented (secondo alcuni "puristi" della
OO).
- Java usa un JIT compiler che rende gli eseguibili (e non solo il sorgente)
portabili.
- Java porta a meno bugs nel codice (in genere).
Detto questo ci sono ancora alcuni vantaggi a favore del C++ :
- Se non si "abusa" della standard library e' ancora piu' veloce di Java. *
- E' un linguaggio adatto alla programmazione di sistemi.
- Per certi versi, il paradigma misto (non puro OO), puo' essere un
vantaggio, anche se oggi non e' visto come tale. **
- Overloading degli operatori e *tante altre* caratteristiche che in Java
non sono presenti. (che poi rendono il C++ piu' complesso, ma anche piu'
"potente"!)
* = molti test cercheranno di dimostrare che Java, oggi (con HotSpot ed
altro), e' veloce quanto C++ (ed in alcuni casi piu' veloce), ma questo
avviene, a mio avviso, solo se si "abusa" della standard library. Se si
programma in C++ in modo piu' sensato, il C++ e' ancora piu' veloce.
** = Java tende a far diventare tutte le persone "class-happy", ovvero
"tutto e' una classe", fare una classe per qualsiasi cosa, anche quando sono
serve. Beh, quando si esagera anche la OOP presenta i suoi svantaggi!
Tra le caratteristiche positive di C++ non ho messo i puntatori. Per quanto
mi piaccia moltissimo un linguaggio con i puntatori (e Java non li ha), devo
ammettere che sono:
- fonte di bugs (e' facile sbagliarsi).
- rendono piu' difficile il lavoro del optimiser del compilatore (che spesso
non riesce piu' ad ottimizzare altrettanto bene). ***
Quindi, per quanto io adori i puntatori e quando non ci sono "senta la loro
mancanza", devo ammettere che toglierli e' forse stata una scelta giusta.
(ma ancora una volta: se non sai cosa sono i puntatori capirai solo per
meta' la mia discussione!)
Tra i tanti motivi per cui Java sarebbe piu' veloce del C++ ce ne sono due
che spiccano:
- Java riesce a fare ottimizzazioni dinamiche e non solo statiche (in fase
di compilazione). Questo perche' e' compilato in fase di esecuzione
JIT+HotSpot.
- Java puo' fare uso migliore dei registri visto che non ha i puntatori (che
in molti casi significano che si continua ad usare la memoria non i
registri; il concetto e' ovviamente piu' complicato di cosi', ma mi limito a
dire questo!).
Tra i nuovi linguaggi, devo dire che mi piace molto C# (e la sua .NET). E'
un linguaggio che ho sempre snobbato, credendo non fosse una sciocchezza e
invece, studiandolo, mi pare davvero ben pensato. Molte persone (io lo
conosco poco) parlano molto bene anche di Python.
Conclusione:
Il C++ e' un linguaggio molto difficile, ma e' anche uno dei piu' ricchi e
potenti. La domanda a cui non so risponderti e':
"Per uno che inizia da capo: vale la pena di fare tanta fatica in piu' per
imparare il C++ invece che un altro linguaggio ?!?"
Una risposta non c'e'! Ci possono solo essere tanti consigli.....
Il mio consiglio non te lo dico fino a che non mi dici le seguenti cose:
- per quale motivo vuoi imparare la programmazione
- per quale motivo ti sei orientato sul C++
- che sistema operativo usi
- che cosa sai in ambito di programmazione
- quanta voglia hai di fare fatica ad imparare un linguaggio
- quante ore alla settimana potresti dedicare all'apprendimento di un nuovo
linguaggio
- sei uno che fa fatica ad imparare nuove cose o no
- ti piacerebbe fare fin da subito applicazioni grafiche o ti
accontenteresti di solo testo
- quale e' il tuo budget per comprare libri per imparare.
etc...
Ora non ho abbastanza dati per consigliarti un linguaggio!
Tommy

 I motivi principali per il passaggio a Java sono:
potrei aggiungere il garbage collection, ma oltre ad essere molto comodo ed
evitare tanti problemi, presenta alcuni svantaggi:
- maggior quantita' di memoria utilizzata
- rallenta leggermente l'esecuzione del programma
Ci sono tante altre diversita' tra i due linguaggi, mi viene impossibile
elencarle tutte.....
Tommy

C'č da dire che C++ č a un livello molto piů basso rispetto a Java
(significa che il programmatore ha piů controllo sulla macchina, in due
parole)... -T

 parole)... -T
Si, io mi ero espresso cosi':
- E' un linguaggio adatto alla programmazione di sistemi.
Tommy

 Ora non ho abbastanza dati per consigliarti un linguaggio!
Ora va meglio?

 solo
Sarà opinabile ma non mi trovo molto d'accordo. La forza di un programmatore
abile sta nel conoscere in modo almeno più che discreto un insieme
comprensivo di linguaggi di programmazione che gli permettano di sviluppare
software imperativi o funzionali, multipiattaforma o specifici per un
sistema, object oriented o non object oriented, compilati o interpretati,
web oriented o non web oriented, server side o client side, con l'accento
sulla semplicità o sull'efficienza, efficiente in termini di memoria o di
tempi di computazione ecc ecc.
Questo ovviamente comporta la conoscenza di molti linguaggi di
programmazione perchè nessuno di questi, neppure il linguaggio C++ che è il
linguaggio multipadigma per eccellenza, permette di programmare in modo
relativamente semplice qualsiasi programma, e comporta anche la necessità
del programmatore di scegliere volta per volta quale è il linguaggio più
adatto per la particolare circostanza a cui si è di fronte.

 solo
Detto così mi sembra un po' troppo categorico. In realtà la conoscenza
di più linguaggi ti permette di vedere le cose da angolazioni diverse e
questo te le fa comprendere meglio.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 adatto per la particolare circostanza a cui si è di fronte.
Sì, ok, quello che dici è vero, ma forse mi sono espresso male io, quello
che intendevo dire è che se sai trovare una soluzione ad un problema, poco
importa quale linguaggio stai usando, per esempio se devi fare una somma
(giusto x dire una cretinata) sai che dovrai leggere a, dovrai leggere b,
dovrai sommare a e b e infine visualizzare il risultato, se uno trova la
soluzione del problema, non sarà difficile scrivere del codice in Pascal,
Cobol, Visual Basic o C++

 questo te le fa comprendere meglio.
Ogni linguaggio affronta un problema in modo diverso, ma penso che la
soluzione sia uguale x tutti.

 1 solo
quindi sai cose sbagliate (ovviamente IMHO).
L'unico consiglio che ti posso dare: studiati almeno tre-quattro linguaggi
diversi da quello/i che conosci gia`, possibilimente scelti in modo da
imparare paradigmi di programmazione diversi; ovviamente non e` necessario
impararli tutti alla perfezione, magari basta anche una infarinatura per
capire in cosa differiscono e soprattutto *perche`* differiscono.
Quando hai finito vai su google, ricerca questo tuo post e rileggilo, poi
domandati se la pensi ancora in questo modo.
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 Ora va meglio?
Si!
Informati su che linguaggio usa la tua universita' per i primo biennio. Se
usa C++ studia pure il C++, altrimenti forse se piu' adatto a Java.
In C++ fare applicazioni "non solo testo" non e' molto comodo, in questo
Java e' molto piu' comodo. Java e' piu' semplice.
Il C++ e' sicuramente un linguaggio stupendo (Java mi piace meno), ma forse,
almeno all'inizio Java ti darebbe piu' soddisfazioni.
Ma io la scelta finale la baserei a seconda di quale lingaggio usa la tua
futura facolta'!
Tommy

 wrote


Beh, si capisco, ma credo anche che ad un certo punto una si debba
specializzare....
E' bello tenersi aggiornato, conoscere un pochino di tuto ed essere
programmatore della domenica in tutte le altre categorie in cui non ti sei
specializzato.....
ma....
Tommy

 ma....
Sull'infarinatura di cui parla in un altro msg Antonio Cuni invece mi trovo
molto d'accordo.... e' molto importante!
Tommy


Alla fine tutta la materia è fatta (forse) di quarks ma in quali e
quanti modi possono combinarsi dando luogo all'universo che conosciamo!
La stessa cosa è per l'informatica: alla base ci sono sempre le solite
istruzioni macchina dei vari processori ma è il vederle da livelli più
alti che ci consente di creare strutture più complesse.


quindi sai cose sbagliate (ovviamente IMHO).
Dipende da come la si intende, ovviamente.
Non bisogna fossilizzarsi sulla quantità di linguaggi conosciuti.
La cosa più importante, in programmazione, è l'esperienza accumulata e
la qualità delle conoscenze.  Chiaramente è facile arrivare a
conoscere tanti linguaggi, dopo un bel pò di anni di esperienza, ma è,
appunto, una conseguenza, non il punto di partenza.
-- 
Open Delphi Manual
http://groups.yahoo.com/group/delphi_open_manual/

 ma....
Non č proprio cosě. Non devi vedere un programmatore come uno che sa
utilizzare un certo linguaggio ma come uno che sa risolvere un problema.
Lo strumento con il quale risolverlo viene deciso in base al problema
stesso o alla soluzione adottata. Immagina un artigiano che sa
utilizzare benissimo il cacciavite ma non conosce il martello? Come
potrebbe piantare i chiodi? Chiama il collega specializzato? Puň essere
una soluzione. Ma bisogna vedere fino a che punto la troppa
specializzazione sia conveniente.


 specializzazione sia conveniente.
Hai ragione, ma in non sto parlando di specializzazione estrema modello
paraocchi!
Stavo parlandi di qualche cosa di piu' sensato....
Io mi specializzo nella programmazione di compilatori ed interpreti, tu
nella programmazione di siti web (server-side e client-side). Un'altro nella
programmazione di video giochi, ma anche qui non puo' fare tutto: c'e'
bisogno di uno esperto sul 3D, uno sulla AI etc....
Poi all'interno di ogni specializzazione bisogna non avere i paraocchi e
spaziare per non essere legati al solo cacciavite. Ovvio.
Poi io dicevo che all'esterno di questa specializzazione (di solito un campo
ampio), e' bello avere una infarinatura di tutto il resto!
Spero sarai concorde su questo ora che ci siamo chiariti. (lo spero in
quanto mi sento di vederla come te in questo senso).
Tommy

 quanto mi sento di vederla come te in questo senso).
Senz'altro.


 almeno all'inizio Java ti darebbe piu' soddisfazioni.
C'è una cosa che non è ancora emersa in questo thread, ovvero che il C++
rispetto a Java ha la possibilità di "abbassarsi di livello", essendo
appunto C++ un superset del C classico.
In linea puramente teorica sarebbe possibile sviluppare una sorta di sistema
operativo in C++ (anche se ci sarebbero un po' di cose da dire)  mentre la
cosa è differente per Java.
Ma devo confessare che sono di parte, il mio primo e unico amore è rimasto
il C, gli altri linguaggi non sono ancora riusciti a farmi perdere la testa
:))
Ciao,
Paolo PAL

 appunto, una conseguenza, non il punto di partenza.
 
si, forse sono stato un po' troppo categorico. In ogni caso IMHO il punto di
partenza dovrebbe essere "cerco di vedere il problema da piu` angolazioni
possibile". Tanto per fare un esempio, probabilmente nella mia vita non
usero` mai O'Caml, ma l'aver appreso come funziona sara` sicuramente
d'aiuto in altri contesti: ad esempio in Python alcune operazioni mi
risultano piu` semplici e leggibili in forma funzionale piuttosto che
imperativa.
