Sono un principiante. Posso iniziare direttamente ad imparare C ++ 11? o devo imparare il vecchio C ++? [chiuso]


36

Sono un principiante e ho poca conoscenza della programmazione.

Sarebbe bello se imparassi direttamente il C ++ dai libri che trattano il nuovo C ++ 11 o dovrei studiare attraverso i vecchi migliori libri C ++?

Dovrei avere poche conoscenze su C ++ prima di imparare C ++ 11? o posso iniziare direttamente da lì?

Provocherebbe un problema se avessi avviato direttamente da C ++ 11? In caso contrario, suggerisci alcuni libri su C ++ 11.


18
Perché quei punti negativi? A queste domande è già stata data una risposta? I neofiti non possono porre domande? Qualcuno fa una ricerca in merito? Penso che uno dei modi migliori sia quello di chiedere a quelli con più esperienza. +1, poiché anche i neofiti meritano di essere guidati
adosaiguas,

12
@Simon mi sembra una domanda concettuale sullo sviluppo del software: da dove comincio? E come fai a sapere che non è un programmatore professionista? ;)
adosaiguas,

4
@MSalters Parlando di libri; Il C ++ accelerato è un libro fantastico, anche se un po 'semplificato. Barbara E. Moo è una scrittrice fantastica e la sua influenza sul libro si nota facilmente. Ma il libro in questione è davvero "vecchio". Tuttavia non tutte le speranze sono perse - c'è un libro molto apprezzato chiamato C ++ Primer di Lippman , Lajoie e Barbara E. Moo , la quinta edizione è stata pubblicata questo mese (agosto 2012) e dai primi capitoli che ho letto dal mio copia, questo è un libro eccellente su C ++ 11. L'influenza di Moo è di nuovo presente. È una dea quando si tratta di scrittura tecnica.
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...In tal caso, ti dispiacerebbe guidarmi sul sito per i programmatori principianti? Sono anche un principiante della programmazione e avrò alcune domande di base ...
Jeyekomon,

2
Penso che questa domanda sia chiaramente fuori tema a causa delle FAQ (forse non era al momento in cui è stata posta per prima). Chiede "quale lingua (versione) dovrei imparare dopo", si tratta di consigli per l'istruzione e richiede risorse fuori misura - tre dei motivi standard di chiusura.
Doc Brown,

Risposte:


38

Esistono molti miglioramenti dell'usabilità che rendono il C ++ 11 più comprensibile per un principiante, in particolare uno che ha esperienza in altre lingue con queste funzionalità. Altre modifiche in C ++ 11 sono di interesse solo per gli utenti esperti, quindi è probabile che tu venga sopraffatto se raccogli un libro progettato principalmente per insegnare le differenze. Assicurati che ogni libro che ricevi sia progettato per i principianti completi in C ++.

Detto questo, probabilmente dovrai imparare alla vecchia maniera alla fine, poiché c'è molto codice esistente là fuori, e anche il nuovo codice C ++ 11 conterrà il vecchio modo di fare le cose se il programmatore lo sceglie. Scrivo C ++ per vivere, e la mia azienda non si è ancora nemmeno impegnata a valutare compilatori compatibili con C ++ 11, e tanto meno usarne uno in produzione.


sto imparando da c ++ primer 4a edizione. buon libro per cominciare ??
Dhananjay,

1
Ottiene buone recensioni e sembra essere al livello giusto, ma non guardo libri C ++ di livello principiante da molto tempo, quindi non sono la persona migliore da chiedere. Penso che avrai bisogno della 5a edizione se vuoi C ++ 11 coperto.
Karl Bielefeldt,

va bene e so che la quinta edizione copre c ++ 11.
Dhananjay,

10

Non è necessario utilizzare il vecchio C ++ per iniziare a utilizzare C ++ 11, ci sono nuove funzionalità in C ++ 11 ma l'uso è facoltativo. Sapere come usare le funzionalità di C ++ 11 potrebbe essere un vantaggio, non sarebbe certamente uno svantaggio quando si lavora con basi di codice legacy (pre 11) una volta che si conoscono le idiosincrasie delle versioni precedenti.

Impara C ++ sarebbe un buon punto di partenza per l'apprendimento e l' Appendice B ti insegnerà le funzionalità di C ++ 11 dopo aver appreso le basi.

Posso capire perché alcune persone hanno suggerito Java / CSharp ecc. Come linguaggi alternativi più facili ma ho imparato un po 'di C ++ prima di passare a CSharp e non sono un programmatore peggiore per questo, al contrario le capacità di programmazione vanno molto più in profondità del linguaggio sintassi / funzionalità e con solide basi in C ++ puoi imparare facilmente qualsiasi altro linguaggio OOP imperativo.


8

È difficile da dire.

Il vecchio C ++ è più un campo minato ed è bello imparare a navigare in una tale bestia. Ti farà anche capire perché le cose vengono fatte come sono e quali sono le implicazioni di diversi costrutti.

Inoltre, il vecchio C ++ non è quello che vuoi quando scrivi il codice.

Ma poi, ancora una volta, il vecchio C ++ è ciò che molta industria continuerà a sfornare per altri 20 anni.

Adoro il C ++ 11, ma per ora è utilizzabile solo nelle startup. Non in basi di codice legacy di grandi dimensioni. E saltare direttamente a C ++ 11 potrebbe lasciarti con abilità non sviluppate in parti C ++ cattive. Ciò si ritorcerà contro una perdita di costrutto C ++ 11 avanzata o si arresta in modo anomalo perché viene utilizzato in modo sintatticamente corretto, ma logicamente errato.


Perché le principali parti del settore non dovrebbero aggiornare lì i compilatori, oltre al campo dei sistemi embedded di nicchia? Rischio (anche con test unitari)? Conservatorismo?
TheLQ

1
@TheLQ: Immagino ... Ma quando penso a cosa farei se fossi un capo, è molto probabile che farei la stessa cosa. A meno che non ci siano alcuni notevoli risparmi sui costi rispetto ai costi di migrazione.
Coder

1
@TheLQ: ci vogliono yeas per le basi di codice per passare a una versione più recente del compilatore. È raro che un progetto adatterà una nuova versione del compilatore, volenti o nolenti. È più probabile che un nuovo progetto utilizzi un nuovo compilatore (purché non interagisca con il vecchio codice).
Martin York,

1
@Coder: Ciò che rende C ++ 11 così diverso da C ++ 03 che l'apprendimento non si tradurrà direttamente in C ++ 03. Ci sono un paio di nuove funzionalità che rendono le cose più facili da scrivere ma nulla che ti impedisce di entrare in quei campi minati.
Martin York,

1
@TheLQ: sì, questo è fondamentalmente il processo, ma hai dimenticato i test di integrazione (la parte più complessa. Non tutte le applicazioni sono indipendenti (direi che questa è la minoranza)). È necessario verificare che tutto il codice funzioni e interagisca correttamente (non solo con il codice ma con il codice cliente). Questo è un processo di mesi se non di test e validazione. Se alcuni dei tuoi clienti non si spostano su C ++ 11, potrebbe essere necessario mantenere entrambe le versioni su alcuni sistemi (per fortuna gcc è molto buono con la compatibilità con le versioni precedenti, ma non tutti i fornitori di compilatori C ++ lo sono).
Martin York,

8

Nonostante molti miglioramenti C++11, non C++è ancora un linguaggio facile. Java, sebbene non così facile come alcuni potrebbero pensare, è ancora un linguaggio più semplice con prestazioni molto buone (spesso quasi altrettanto veloci C++) e offre IDE migliori (forse Visual C++è buono come gli IDE Java attuali ma nessuna fortuna qui su Linux), molto libreria standard più completa (JDK), più librerie (ad es. Hibernate , Spring , JEE , Lucene , ecc.) e nessuna perdita di memoria (beh, quasi nessuna - è ancora possibile creare una perdita di memoria in Java ma è più difficile farlo che in C++). Ad essere onesti, con il moderno C++11, è molto più facile evitare i porri della memoria.

C ++ 11 ha molte funzioni interessanti come lambda, parola chiave automatica, semantica di spostamento e molto altro. È sicuramente un linguaggio molto migliore di quello che C++98era. Guarda questa panoramica di Herb Sutter sulle nuove funzionalità di C++11: Elements of Modern C++Style.

Per riassumere, penso che tutti dovrebbero imparare almeno alcuni C++. Se siete stati programmando in Java, Scala, Rubyo Pythonper l'ultimo decennio e mai toccato Co C++, ora con C++11penso che sia il momento di imparare C++11e migliorare le vostre abilità di programmazione, mentre farlo.

Probabilmente non userò C++molto al lavoro nei prossimi anni e quando avrò bisogno di un linguaggio più potente di Java, probabilmente andrò per Scala, ma darò un'occhiata più da vicino C++11e cercherò di apprendere e comprendere le nuove funzionalità, in particolare quelli su multithreading e concorrenza.

Ricorda: aiuta sempre ad imparare un nuovo linguaggio di programmazione anche quando non prevedi di usarlo in produzione.


1

Fai un respiro profondo e leggi questo articolo di Peter Norvig.

L'hai letto? Ok, se sei un principiante, devi iniziare a piccoli passi. -inserire la lingua qui- può venire più tardi, controlla Coursera o Udacity per alcuni corsi di introduzione di informatica per principianti.

Avendolo completato, consiglierei di farti strada lentamente nel linguaggio di programmazione The C di K&R se sei impostato su un linguaggio 'C'.

Lavora sulle basi, il resto arriverà in tempo.


10
Non vedo come questa sia la risposta alla domanda posta. C non è nemmeno la stessa lingua di C ++.
vartec,

1
Ma C ++ si basa su C ed è ampiamente compatibile con le versioni precedenti: la stragrande maggioranza della sintassi C moderna è direttamente applicabile al C ++. Dato che C è più semplice di qualsiasi versione di C ++, l'apprendimento di C ti dà innanzitutto una buona educazione coerente nella sintassi e nella semantica C ++ di base - e aiuta a spiegare alcune delle verruche altrimenti incomprensibili sul linguaggio più grande ...
comingstorm

2
@comingstorm La prima cosa che un programmatore C dovrebbe fare è disimparare quasi tutto ciò che sa su C e quindi iniziare a imparare C ++. Ci sono sottili differenze che potrebbero morderti.
BЈовић,

1
Inoltre, il moderno codice C ++ idiomatico non prende molto in prestito dalla C oltre alla sintassi. Non è che stiamo ancora usando C-stringhe e malloc / free. Come principiante assoluto della lingua, è meglio prendere un libro come C ++ Primer 5th edition, Accelerated C ++, ecc. Invece di concentrarti su C.
bstamour

1

I recenti libri introduttivi sul C ++ coprono sempre più anche il C ++ 11. Ho letto Sam's Teach Yourself C ++ dopo aver lavorato con linguaggi di script ma non con C / C ++ per quasi dieci anni e l'ho trovato davvero utile. Mi sono subito avvicinato alle idee centrali di C ++ (incluso un sacco di STL) e sono consapevole di molti dettagli diversi in C ++ 11.

Come alcuni altri poster hanno menzionato, C ++ 11 è in molti modi più semplice rispetto agli standard precedenti con aggiunte in stile script come auto, for(int &i : m_vector){}ecc. Quindi, se la tua "poca conoscenza" proviene da lingue come Python o Matlab, troverai C ++ 11 un po 'più "naturale" rispetto agli standard precedenti.

Vorrei anche sottolineare che ormai la compatibilità del compilatore per C ++ 11 è ( quasi ) completa, quindi avere un codice "troppo aggiornato per essere compilato" non è più un problema.

In breve, fallo.


-1

Quando il mio tempo, C era considerato un prerequisito di C ++, specialmente per quei principianti della programmazione. Perché devi capire cosa fa una lingua e perché è stata progettata in questo modo. C ha avuto un sacco di idee grandiose e sufficienti sul linguaggio di programmazione, che non saranno mai obsolete. Quindi, credo che questo sia l'inizio migliore.

E dopo aver avuto un punto di vista di base sulle cose di programmazione, potresti dover scegliere cosa fare come la prossima mossa, il che significa che scegliere una lingua da apprendere il più profondamente possibile. Indipendentemente dalla profondità acquisita, in genere può decidere la profondità raggiunta da qualsiasi altra lingua, il che significa che, indipendentemente da quante lingue hai imparato, la più profonda sarà sempre la prima che hai scavato. Per quanto mi riguarda, ho svolto ricerche su Java e realizzato alcuni modelli di Java da solo per comprendere meglio le funzionalità del kernel.

Dopodiché, potresti essere in grado di imparare quello che vuoi, perché hai una comprensione totale della tecnologia del linguaggio di programmazione. Ho iniziato a studiare C #, Go, Python anche Scala e ho realizzato molti progetti per divertimento / lavoro. Il record personale è di 3 mesi dall'inizio dell'apprendimento di una lingua fino a diventare 1.0 capo di un progetto in via di sviluppo.

Nel mio caso, sono passati più di 15 anni dal mio primo programma e non riesco nemmeno a ricordare di cosa si tratta. Credo che se lavori abbastanza duramente, diventerai sicuramente migliore e più veloce di me.


questo non risponde alla domanda posta
moscerino del

Totalmente, scusa. Voglio solo dire, nessuno dei due. Non importa cosa vuoi imparare finalmente, solo le basi del linguaggio di programmazione possono decidere quanto puoi approfondire in questo campo. Allo stesso tempo, devi dedicare più tempo a questo piuttosto che a uno scatto veloce.
WinstonWu,

-2

Come principiante, penso prima di tutto di dover esaminare i concetti di C ++ perché C ++ 11 e tutto è come una nuova versione, ma C e C ++ sono la base per qualsiasi tipo di sviluppo. Una volta appreso il C ++, la maggior parte dei concetti verrà cancellata automaticamente.


1
Benvenuti ai programmatori! Non sono sicuro che la tua risposta aggiunga molto a questa domanda; e grammaticalmente parlando un po 'di confusione. Ho problemi a seguire ciò che stai cercando di dire. Potresti ampliare la tua risposta, forse aggiungere esempi sul perché C ++ 11 differisce così tanto da imparare meglio C e le versioni precedenti dello standard C ++?
Martijn Pieters,

-3

C ++ è un linguaggio davvero eccezionale e potente. Tuttavia pone anche molte responsabilità al programmatore.

Se sei completamente nuovo nella programmazione, renditi la vita più semplice e inizia con C #. La sua sintassi si basa su C ++, ma la gestione degli errori è molto più semplice per i principianti nell'assisterti quando le cose vanno male.

Se ti senti a tuo agio con metodi, classi, ereditarietà e vuoi sviluppare un ambiente in cui la gestione della memoria e delle risorse di sistema è più importante della produttività, allora C ++ è una buona scelta e inizierei imparando lo standard attuale. Tenete presente che C ++ richiede di comprendere la memoria e di gestirla attivamente. Fai degli errori qui e tutto ciò che ottieni è un core scaricato o i tuoi dati contengono byte che non hanno senso. E spesso il punto in cui si trova il problema non è correlato a dove si trova effettivamente la causa.


1
Se uno inizia con C #, si abituerà a programmare ad alto livello (OOP, gestione automatica della memoria) senza sapere realmente cosa succede "dietro le quinte". Se quella persona passa a C ++, gli mancherà una conoscenza importante di C / C ++ (sto pensando principalmente alla gestione della memoria, ma c'è di più). Potrebbe essere ancora più fuorviante a causa del fatto che C ++ e C # condividono una sintassi molto simile, ma ciò che il codice effettivamente compila, è totalmente diverso. Tieni presente che l'OP ha chiaramente dichiarato il suo interesse per il C ++.
Eti,

L'OP ha inoltre affermato di avere una scarsa conoscenza della programmazione. imparare la tua prima lingua come C ++ è un'enorme sfida. Molto meglio scegliere le tue battaglie e scegliere una serie di battaglie più piccole, poiché hai molte più probabilità di avere successo.
Michael Shaw,

-6

Perché vuoi iniziare con C ++?

Personalmente raccomando contro C ++ come prima lingua. È complicato, complesso, difficile ... semplicemente di livello molto più basso e più "pericoloso" della maggior parte degli altri linguaggi di programmazione.

Consiglio di scegliere c #, java, python o javascript ... e un buon libro lungo la strada. Ti divertirai molto di più con questi.


3
Non sono d'accordo su questo come generalizzazione. Passare dalla vita facile di java / C # / python ecc. A un mondo più complesso di C e C ++ non è così facile. Se sei davvero impegnato nell'apprendimento di un linguaggio di programmazione, imparare C e C ++ è difficile, ma ti darà molto. Se in seguito desideri programmare in Java, C #, Python ecc., Cambiare è molto più semplice che passare da loro a C o C ++. Riepilogo: C / C ++ sarà più difficile da iniziare, ma renderà più semplice il passaggio a qualsiasi altro linguaggio OO.
martiert,

2
C ++ è la migliore base da cui partire. La programmazione è complessa e alla fine devi lavorare con un hardware. Il C ++ è un modo straordinario per iniziare ad apprenderlo senza un falso senso di sicurezza.
Coder

La domanda dell'op si basa completamente sul suo scopo con lo sviluppo.
Indipendente,

1
Non sono d'accordo con questo. L'apprendimento del C ++ presenta numerosi vantaggi e semplifica l'apprendimento di altre lingue come Java e C # per citarne alcuni.
Anthony,

2
@Dhananjay: C ++ è molte volte più difficile di Java ... Java è come una bici da bambino, una versione estremamente semplificata di C ++. Quest'ultima sarebbe una bici senza fronzoli senza freni. Se trovi già difficile Java, il C ++ sarà un dolore. I miei 2 centesimi.
Dagnelies,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.