C o c++?

Domenico94reggio
Ciao a tutti. Premesso che ho delle infarinature di java, conosciuto all università, ed, ahime, odiato, per diversi motivi, da qualche settimana sto pensando di appredere un nuovo linguaggio di programmazione come il c o il c++( le opportunita lavorative sono leggermente inferiori al Java, ma sono sempre linguaggi usati e diffusi. )
Quello che vorrei chiedere é': considerando anche che molte aziende richedono in programmatore (C/c++), tra I due quali darebbe piu opportunita lavorative?È vero, come spesso sento dire, che il C++ sta praticamente soppiantando il C, anche se questo ultimo ha applicazione nei sistemi embedded?Quale consigliereste di imparare meglio?

Risposte
vict85
Io suggerirei C++11/C++14 (assicurati di non studiare uno standard precedente). Più che altro perché sei abituato all'OOP e trovo che i manuali del C siano o piuttosto scadenti oppure vecchi di 25 anni. In ogni caso varie modifiche dello standard C avvenute negli ultimi 15 anni sono ignorate dal 95% dei libri e a volte mal supportate dai compilatori. Per fare un esempio stupido non sono a conoscenza di manuali che trattino il nuovo multithreading del C11 o del suo supporto all'unicode. Al contrario conosco un libro che tratta il multithreading del C++11 (non fare l'errore di supporre che il C sia un subset del C++). Anche se in genere si usano librerie non appartenenti allo standard per il multithreding nel C/C++.

Studiare uno standard del C++ precedente trovo sia una perdita di tempo, a meno che tu non debba lavorare su del codice vecchio. Come manuale io suggerirei C++ Primer di Lippman http://www.amazon.com/Primer-5th-Editio ... 0321714113. Inoltre suggerisco di usare il sito cppreference.com quando non ti ricordi qualcosa.

Domenico94reggio
Grazie mille per l appunto Vict..cerchero di informarmi in caso, riguardo alle ultime versioni :)
Quello che volevo chiedere piu che altro era, quanto diverse ppssono essere le opportunita lavorative di qualcuno che programmable principalmente in C++ rispetto a qualcuno che programma in C? É vero Il fatto che C++ ha sostituito C in molti ambiti?

Cronovirus
Nell'ambito lavorativo il C lo chiedono molto i sistemi embedded e di solito non è sufficiente leggersi qualche libro di C o qualche video corso on line per essere minimamente pronti.
Ti direi C++ per il fatto che è decisamente più semplice e è molto più richiesto.

Potresti anche buttarti su SQL e PHP che in Italia va tanto

vict85
Si è vero, anche se non penso che vi siano modifiche significative in questo da 15 anni a questa parte e non sono abbastanza vecchio per sapere come erano le cose prima. Insomma il C++ è usato di più e il C è comunque molto vicino ad essere un subset del C++ (seppur il C abbia alcune caratteristiche tutte sue e ci siano alcune differenze sottili nella gestione dei tipi). In ogni caso penso che i più affermino di conoscere entrambi.

Domenico94reggio
Oh...era quello che cercavo :) grazie ancora :)
P.s. sei programmatore anche te? Se si , che linguaggio, she posso chiedere :P
Io studio ingegneria delle TLC...ancora la strada é lunga :/

vict85
No, ma so programmare in C/C++ dal 2000. Mio fratello è programmatore C++. Del mercato in Italia ne so poco o nulla.

Domenico94reggio
Capito..e grazie ancora :) Credo che optero per il C++ quindi, magari poi approdondendo anche il C...:)

walter.ruggeri.3
"Cronovirus":

Ti direi C++ per il fatto che è decisamente più semplice e è molto più richiesto.


:shock:

Scusami, ma non capisco come sia possibile definire semplice un linguaggio come il C++, che offre talmente tante possibilità da non essere sufficienti le mille e più pagine della reference guide di Stroustrup per PRESENTARLE (figuriamoci poi per spiegarle a dovere).
Ci sono intere biblioteche sul C++ e su ciò che contiene... ed ogni testo serio va quantomeno sfogliato, per poter anche solo pensare di poter dire di sapere qualcosa del C++.
Esempio: la guida di Stroustrup presenta (supponendo, comunque, che già il lettore ne sappia qualcosa) le caratteristiche principali del linguaggio, e fin qui tutto a posto, ma per ovvi motivi non può sviscerare le possibilità offerte dal linguaggio nell'ambito della programmazione generica (e della metaprogrammazione), nè può soffermarsi sul "design" del codice (argomento che per un programmatore C++, data l'estrema "volubilità" del linguaggio, è fondamentale)... addirittura, il testo di Stroustrup non arriva nemmeno ad analizzare compiutamente l'intera STL, tanto é vasta!!

vict85
Penso che intendesse dire che i lavori che richiedono il C sono generalmente più impegnativi e richiedono più esperienza.

Domenico94reggio
Lo penso anch io, da quanto ho letto...Il c magari richiede una gestione della memoria più accorta do quanto non lo possa fare il C++, non é presente ( da quanto ne so) il paradigma object oriented che magari permette il riutilizzo del codice, per non parlare delle librerie, di cui il c++ sicuramente é piu dotato. Da quello che mi é capitato di leggere molte volte, non credo abbia torto..

walter.ruggeri.3
"Nikola_Tesla":
Il c magari richiede una gestione della memoria più accorta do quanto non lo possa fare il C++, non é presente ( da quanto ne so) il paradigma object oriented che magari permette il riutilizzo del codice, per non parlare delle librerie, di cui il c++ sicuramente é piu dotato.


Che il C sia un linguaggio più spartano è ovvio, considerando anche le esigenze che hanno portato alla sua nascita... ma ciò non lo rende più difficile del C++: semplicemente, rende macchinoso realizzare determinati algoritmi che non di rado in C++, vuoi per il supporto all'OOP, vuoi per la presenza di particolari specificatori - alcuni dei quali comunque (vedesi inline) sono stati intrdotti anche nel C -, vuoi per tanti altri motivi, sono più immediati.
In tal senso, esiste un intero "scaffale" della biblioteca informatica dedicato alle varie modalità di approccio al C in grado di permettere la scrittura di un codice più versatile e moderno (addirittura, ci sono testi che illustrano approcci in grado di avvicinare il C alla mentalità OOP).
Dunque, non voglio dire (non potrei mai voler dire!) che il C è più semplice del C++: per motivi a volte diversi (ma a volte no), i due linguaggi (non intendo assolutamente considerarli come un unicum: a fronte di una sintassi praticamente uguale, percorrono strade decisamente divergenti) sono entrambi molto complessi. Ed in effetti, a questo tendeva il mio discorso: ad affermare che, se è vero (com'è vero) che il C è molto complesso, allora è vero che lo è altrettanto (per motivi, ribadisco, spesso diversi da quelli che rendono complicato il C, ma sicuramente non meno cardinali nello studio del linguaggio) il C++.

apatriarca
Il C è un linguaggio molto più minimale, che è abbastanza facile da imparare profondamente e che in generale non offre particolari sorprese. È tutt'altro che perfetto e ha diversi lati oscuri, ma una volta imparate le basi non è difficile da usare. Da un certo punto di vista si trova ad un perfetto livello di astrazione per quello per cui è stato pensato. È abbastanza a basso livello da essere usato in sistemi embedded e per operazioni di basso livello, ma abbastanza di alto livello da essere incredibilmente portabile (esistono compilatori C per quasi ogni piattaforma hardware) e capace di essere usato per programmi anche molto complessi. Il C è inoltre il linguaggio standard di comunicazione tra i diversi programmi e librerie. Praticamente ogni linguaggio ha modo di interfacciarsi con librerie C, non è necessariamente vero invece per il C++. Il principale svantaggio risiede nella necessità di implementare molte funzionalità che in altri linguaggio di più alto livello sono spesso date per scontate.

Il C++ è molto più ambizioso. Permette di programmare usando paradigmi diversi e ha una quantità di funzionalità che è molto difficile arrivare a conoscere completamente. Dopo anni di utilizzo continuo ad imparare sempre cose nuove (anche perché il linguaggio viene aggiornato abbastanza spesso). Il vantaggio rispetto al C risiede nella maggiore flessibilità e capacità di esprimere concetti complicati in modo più compatto. Ragionare sul comportamento e sulle performance di un programma C++ è spesso più difficile rispetto al corrispondente programma in C, ma si scrive più velocemente ed è a volte più leggibile (ma potrebbe esserlo anche di meno). È molto più usato del C al di fuori dei sistemi embedded e molte librerie ci sono solo in C++. C'è tuttavia una tendenza a tornare ad uno stile di programmazione simile al C in alcuni ambienti (per esempio nei videogiochi). Personalmente condivido questa tendenza.

Se conosci Java è probabilmente più facile passare al C++. Se hai programmato in Java ti è stata insegnata la programmazione ad oggetti ed è più facile applicare quello che hai imparato al C++ rispetto al C. Puoi ovviamente programmare ad oggetti anche in C, ma è più complicato perché le funzionalità a cui ci si abitua programmando in linguaggi come Java non sono presenti e vanno implementati in modo più complicato. È inoltre uno stile di programmazione che non è particolarmente in accordo con la filosofia del C a mio parere. In C++ esistono librerie standard per fare molte cose che in C è necessario realizzare a mano. Ci sono per esempio classi per lavorare con le stringhe o per liste, mappe.. Il passaggio è quindi in qualche modo più graduale.

In generale, non è difficile imparare a scrivere in C conoscendo il C++ o viceversa. È tuttavia importante rendersi conto che sono linguaggi diversi. Cercare di scrivere in C con la mentalità del C++ potrebbe essere frustrante e viceversa, ragionando in C quando si programma in C++, si perderebbero un sacco di occasioni di scrivere le cose più velocemente.

Ma che cosa odi di Java? Esistono molti linguaggi, alcuni molto usati e che ti permetterebbero di trovare lavoro, e il C o il C++ potrebbero non essere la scelta migliore per te.

walter.ruggeri.3
"apatriarca":

Ma che cosa odi di Java? Esistono molti linguaggi, alcuni molto usati e che ti permetterebbero di trovare lavoro, e il C o il C++ potrebbero non essere la scelta migliore per te.


Un linguaggio che potrebbe essergli utile, secondo me, è il C#: sintatticamente è abbastanza simile a Java da non disorientare un "j-programmer", e include alcuni meccanismi (ad esempio, quello di garbage collecting implicito della memoria dinamica) che rendono il suo utilizzo più semplice rispetto al C++. Inoltre, supporta nativamente l'OOP (cosa secondo me fondamentale, nei linguaggi di programmazione moderni) e, nelle ultime versioni (anche se ancora le funzioni e i dati generic non sono standard), anche una qualche forma di programmazione generica :D
Tra l'altro (cosa da non trascurare) è probabilmente uno dei linguaggi a più ampia prospettiva oggi esistenti: essendo basato sul .NET Framework, può essere impiegato sia per applicazioni desktop (soprattutto in ambiente Windows, anche se esistono dei porting - come ad esempio Mono - per altre piattaforme) che per servizi web (i quali, vista la rapida diffusione del cloud computing, credo saranno sempre più importanti nell'informatica del futuro).

Cronovirus
"wrugg25":
[quote="Cronovirus"]
Ti direi C++ per il fatto che è decisamente più semplice e è molto più richiesto.




:shock:

Scusami, ma non capisco come sia possibile definire semplice un linguaggio come il C++, che offre talmente tante possibilità da non essere sufficienti le mille e più pagine della reference guide di Stroustrup per PRESENTARLE (figuriamoci poi per spiegarle a dovere).
Ci sono intere biblioteche sul C++ e su ciò che contiene... ed ogni testo serio va quantomeno sfogliato, per poter anche solo pensare di poter dire di sapere qualcosa del C++.
Esempio: la guida di Stroustrup presenta (supponendo, comunque, che già il lettore ne sappia qualcosa) le caratteristiche principali del linguaggio, e fin qui tutto a posto, ma per ovvi motivi non può sviscerare le possibilità offerte dal linguaggio nell'ambito della programmazione generica (e della metaprogrammazione), nè può soffermarsi sul "design" del codice (argomento che per un programmatore C++, data l'estrema "volubilità" del linguaggio, è fondamentale)... addirittura, il testo di Stroustrup non arriva nemmeno ad analizzare compiutamente l'intera STL, tanto é vasta!![/quote]

Scusami non volevo offenderti c++ :) ma non ho capito: non sei d'accordo sul fatto che c++ sia "più semplice" di C?
Personalmente ad un ragazzo che ha una "infarinatura" di java (e vuole un linguaggio per andare a lavorare) non lo consiglierei mai il C. È richiesto in ambiti in cui le conoscenze vanno ben oltre quelle di programmazione.

Io se fossi nella sua situazione mi butterei su PHP e SQL come ho già detto, ne cercano a bizzeffe e soprattutto non richiedono niente di speciale.

apatriarca
Anche io non sono d'accordo nel dire che il C++ sia più semplice del C.. Il C può essere più difficile da usare per realizzare alcune cose, ma di certo è un linguaggio MOLTO più semplice del C++. Il fatto che normalmente il C sia usato in ambiti in cui la conoscenza del linguaggio non sia sufficiente ha poco a che fare con la sua semplicità. Le uniche cose un po' complicate da imparare in C sono i puntatori e il suo modo di vedere le stringhe e sono entrambe cose che ha in comune con il C++.

Comunque, considerando che Nikola_Tesla ha affermato che ha odiato Java, non sono sicuro che consigliargli qualcosa di simile sia la cosa giusta. Forse il C è invece più vicino al suo gusto. O forse conviene consigliargli linguaggi completamente diversi.

Domenico94reggio
No..per quanto riguarda altri linguaggi, sono interessato principalmente a questi due, anche perche sono molto utilizzati nel settore dell imaging biomedico, e trattamento dei segnali dove vorrei provare a lavorare in futuro( studio ingegneria delle tlc).
In ogni caso, sto provando a far girare "hello world"in C++, su due compilatori diversi, Il risultato é che non funziona nulla, mi crea problmo con le librerie e dice che manca Il compilatore, che peraltro ho installato. Tempo fa avevo iniziato a programmare in c, amche se l ho abbandonato per motivi personali, e funzionava ( i programmi erano dei semplici esercizi, come hello world, fare le equazioni do secondo grado, stabilire se una stringa e palindroma usando i puntatori, ma funzionavano), ma in C++ ho come l impressione che sia MOOLTO più facile commettere errori gravi. Alla luce di questo, quello che vorrei chiedere e: meglio rischiare ( in termini di opportunità lavorative) dedicandomi di più al C, che pero dovrebbe essere più "user- friendly",e magari più semplice da usare, oppure usare il c++ direttamente, che probabilmente da più opportunità rispetto al c, ma da l impressione di essere molto difficile da imparare?
Come disse già qualcuno: in c,it s easier to shoot your foot. C++ makes it harder, but can blow your whole leg...

vict85
Usi per caso Clang? Perché il supporto al C++ su windows ha/aveva qualche problema e l'installazione richiede un po' di attenzione. Comunque nel caso disinstalla tutto e installati code::blocks con mingw già contenuto oppure Visual Studio https://www.visualstudio.com/products/v ... mmunity-vs . È inutile complicarsi la vita se stai imparando. Per il C puoi anche andare su pelles C .

Penso che nell'imaging e nel trattamento dei segnali si usino anche tanto matlab e python comunque.

Domenico94reggio
Avevo provato veramente con code blocks e quincy( anche se quando scrivevo qualcosa in c su quincy, generaente funzionava

.). Per quanto riguarda se sto imparando...oggi stavo solo provando in po I compilatori niente di piu, e mi sono ritrovato questa sorpresa :D

Cronovirus
Sono abbastanza sorpreso che il mio amato C sia così ben voluto :) in bocca al lupo se scegli questo bellissimo linguaggio :):)

Domenico94reggio
Cronivirus, a me piacerebbe tantissomo apprendere Il c, pero ho qualche problema esistenziale :D
Le opportunità di lavoro, da quanto ho capito, sono maggiori per il c++, pero questo ultimo, da quello che sto vedendo, mi da l impressione di creare facilmente errori e divenire un inferno in fase di debug( non sono riuscito a scrivere neanche "nello world", mentre quando iniziavo a studiare il c, gli esercizi andavano senza problemi...).
Come ho scritto prima:in c, it s easy to shoot your foot. In c++ it s more rare, but when it happens you blow your whole leg..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.