Je suis un débutant. Puis-je commencer directement à apprendre C ++ 11? ou je dois apprendre le vieux C ++? [fermé]


36

Je suis débutant et n’ai que peu de connaissances en programmation.

Est-ce que ce serait bien si j'apprenais directement le C ++ à partir de livres qui couvrent le nouveau C ++ 11 ou devrais-je étudier à travers les meilleurs vieux livres de C ++?

Devrais-je avoir peu de connaissances sur le C ++ avant d'apprendre le C ++ 11? ou je peux commencer directement à partir de là?

Cela poserait-il un problème si je démarre directement à partir de C ++ 11? Si non, alors suggérez quelques livres sur C ++ 11.


18
Pourquoi ces points négatifs? A-t-on déjà répondu à ces questions? Les débutants ne sont-ils pas autorisés à poser des questions? Comment faire une recherche dans ce domaine? Je pense que l’un des meilleurs moyens est de demander à ceux qui ont plus d’expérience. +1, car les débutants méritent également d'être guidés
adosaiguas

12
@Simon, cela me semble une question conceptuelle sur le développement de logiciels: par où commencer? Et comment savez-vous qu'il n'est pas un programmeur professionnel? ;)
adosaiguas

4
@MSalters Parler de livres; C ++ accéléré est un livre génial, bien qu'un peu simplifié. Barbara E. Moo est un écrivain génial et son influence sur le livre se remarque facilement. Mais le livre en question est en effet "vieux". Cependant, tous les espoirs ne sont pas perdus - il existe un livre très coté intitulé C ++ Primer de Lippman , Lajoie et Barbara E. Moo , la cinquième édition a été publiée ce mois-ci (août 2012) et, parmi les premiers chapitres que j'ai lus de C’est un excellent livre qui couvre C ++ 11. L'influence de Moo est présente à nouveau. Elle est une déesse quand il s'agit d'écriture technique.
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...Dans ce cas, cela vous dérangerait-il de me guider vers le site pour les programmeurs débutants? Je suis aussi un débutant en codage et je vais poser quelques questions élémentaires ...
Jeyekomon

2
Je pense que cette question est clairement hors sujet en raison de la FAQ (peut-être n'était-ce pas à l'époque est-elle posée en premier). Il demande "quelle langue (version) dois-je choisir ensuite", il s'agit de conseils en éducation et il demande des ressources hors format - trois des raisons de fermeture habituelles.
Doc Brown

Réponses:


38

De nombreuses améliorations en matière de convivialité rendent C ++ 11 plus compréhensible pour les débutants, notamment ceux qui ont de l'expérience dans d'autres langages avec ces fonctionnalités. Les autres modifications apportées à C ++ 11 intéressent uniquement les utilisateurs expérimentés. Vous risquez donc de vous sentir dépassé si vous choisissez un livre conçu principalement pour enseigner les différences. Assurez-vous que tous les livres que vous recevez sont conçus pour les débutants en C ++.

Cela étant dit, vous devrez probablement apprendre l'ancienne méthode à la longue, car il y a beaucoup de code existant, et même le nouveau code C ++ 11 contiendra l'ancienne façon de faire les choses si le programmeur le souhaite. J'écris C ++ pour gagner ma vie et mon entreprise n'a toujours pas encore évalué les compilateurs compatibles C ++ 11, et encore moins d'en utiliser un en production.


im apprendre de c ++ amorce 4e édition. bon livre pour commencer ??
Dhananjay

1
Il reçoit de bonnes critiques et semble être au bon niveau, mais je n'ai pas regardé les livres C ++ de niveau débutant depuis longtemps, je ne suis donc pas la meilleure personne à qui demander. Je pense que vous aurez besoin de la 5ème édition si vous voulez que C ++ 11 soit couvert.
Karl Bielefeldt

son ok et yah je sais que la 5ème édition couvrent c ++ 11.
Dhananjay

10

Il n'est pas nécessaire d'utiliser l'ancien C ++ pour commencer à utiliser C ++ 11. C ++ 11 comporte de nouvelles fonctionnalités, mais leur utilisation est facultative. Savoir utiliser les fonctionnalités C ++ 11 peut être un avantage, cela ne serait certainement pas un inconvénient de travailler avec des bases de code héritées (antérieures à 11) une fois que vous avez compris les particularités des versions antérieures.

Apprendre le C ++ serait un bon point de départ pour apprendre et l’ annexe B vous apprendra les fonctionnalités de C ++ 11 une fois que vous aurez appris les bases.

Je peux comprendre pourquoi certaines personnes ont suggéré Java / CSharp, etc. comme langages alternatifs plus faciles, mais j’ai appris un peu le C ++ avant de passer à CSharp et je ne suis pas un programmeur pire à cause de cela, au contraire, les compétences en programmation sont bien plus profondes que le langage. syntaxe / fonctionnalité et avec une base solide en C ++, vous pouvez apprendre facilement n’importe quel autre langage OOP impératif.


8

C'est difficile à dire.

L'ancien C ++ est plus un champ de mines et c'est agréable d'apprendre à naviguer dans une telle bête. Cela vous fera également comprendre pourquoi les choses sont faites comme elles sont et quelles sont les implications de différents concepts.

Là encore, l'ancien C ++ n'est pas ce que vous voulez lorsque vous écrivez du code.

Mais là encore, l’ancien C ++ est ce que beaucoup d’industries vont bouger pendant encore 20 ans.

J'adore le C ++ 11, mais il n'est utilisable que dans les startups pour le moment. Pas dans les grandes bases de code héritées. Et passer directement au C ++ 11 peut vous laisser avec des compétences non développées dans des parties méchantes en C ++. Ce qui va se retourner une fois que certaines constructions avancées de C ++ 11 auront des fuites, ou se bloqueront, car elles sont utilisées de manière syntaxiquement correcte, mais logiquement incorrecte.


Pourquoi les principaux secteurs de l'industrie ne mettraient-ils pas à jour leurs compilateurs, mis à part le domaine des systèmes intégrés de niche? Risque (même avec les tests unitaires)? Conservatisme?
TheLQ

1
@TheLQ: J'imagine ... Mais quand je pense à ce que je ferais si j'étais chef, il est fort probable que je ferais la même chose. Sauf en cas d'économies notables par rapport aux coûts de migration.
Coder

1
@TheLQ: Il faut une base de code pour passer à une version plus récente du compilateur. Il est rare qu'un projet adapte volontiers une nouvelle version du compilateur. Un nouveau projet est plus susceptible d'utiliser un nouveau compilateur (tant qu'il n'interagit pas avec l'ancien code).
Martin York

1
@Coder: Qu'est-ce qui différencie le C ++ 11 du C ++ 03 du fait qu'il ne sera pas traduit directement en C ++ 03? Quelques nouvelles fonctionnalités facilitent l’écriture, mais rien ne vous empêche de pénétrer dans ces champs de mines.
Martin York

1
@TheLQ: oui, ce sont essentiellement les processus, mais vous avez oublié les tests d'intégration (la partie la plus complexe. Toutes les applications ne sont pas autonomes (en fait, je dirais que c'est la minorité)). Vous devez vérifier que tout votre code fonctionne et interagit correctement (non seulement avec votre code mais avec le code client). Il s’agit d’un processus de plusieurs mois sinon d’essais de tests et de validation. Si certains de vos clients ne passent pas à C ++ 11, vous devrez peut-être conserver les deux versions sur certains systèmes (heureusement, gcc est très performant avec une compatibilité ascendante, mais tous les fournisseurs de compilateurs C ++ ne le sont pas).
Martin York

8

Malgré de nombreuses améliorations C++11, le C++langage n’est toujours pas simple. Java, bien que pas aussi facile que certains peuvent le penser, reste un langage plus facile avec de très bonnes performances (souvent presque aussi rapide que C++) et offre de meilleurs IDE (peut Visual C++- être aussi bon que les IDE Java actuels mais pas de chance ici sous Linux), beaucoup bibliothèque standard plus complète (le JDK), plusieurs bibliothèques (par exemple, Hibernate , Spring , JEE , Lucene , etc.) et aucune fuite de mémoire (enfin, presque aucune - vous pouvez toujours créer une fuite de mémoire en Java, mais il est plus difficile de le faire que dans C++). Pour être juste, avec moderne C++11, il est beaucoup plus facile d'éviter les poireaux à mémoire.

C ++ 11 a de nombreuses fonctionnalités intéressantes telles que lambdas, mot clé automatique, sémantique de déplacement et bien plus encore. C'est certainement une bien meilleure langue que ce C++98n'était. Voir cette présentation de Herb Sutter sur les nouvelles fonctionnalités de C++11: Éléments de C++style moderne .

En résumé, je pense que tout le monde devrait en apprendre au moins certains C++. Si vous avez été la programmation en Java, Scala,Ruby ou Pythonpour la dernière décennie et n'a jamais touché Cou C++, maintenant avec C++11je pense qu'il est temps d'apprendre C++11et d' améliorer vos compétences en programmation en le faisant.

Je n'utiliserai probablement pas C++beaucoup de travail au travail dans les années à venir et si j'ai besoin d'un langage plus puissant que Java, j'opterai probablement pour Scala, mais j'examinerai de plus près C++11et essayerai d'apprendre et de comprendre les nouvelles fonctionnalités, en particulier ceux sur le multithreading et la concurrence.

N'oubliez pas: il est toujours utile d'apprendre un nouveau langage de programmation, même si vous n'envisagez pas de l'utiliser en production.


1

Prenez une profonde respiration et lisez cet article de Peter Norvig.

Avez-vous lu ça? Ok, si vous êtes débutant, vous devez commencer par petites étapes. -inser la langue ici- peut venir plus tard, consultez Coursera ou Udacity pour des cours d'initiation à l'informatique pour débutants.

Après avoir terminé cela, je vous conseillerais de travailler lentement le langage de programmation C de K & R si vous utilisez un langage «C».

Travailler sur les bases, le reste viendra à temps.


10
Je ne vois pas en quoi cela répond à la question posée. C n'est même pas le même langage que C ++.
vartec

1
Mais C ++ est basé sur le C et est largement compatible avec les versions antérieures: la grande majorité de la syntaxe C moderne est directement applicable au C ++. Puisque C est plus simple que toute version de C ++, l’apprentissage de C vous donne d’abord un bon enseignement cohérent de la syntaxe et de la sémantique C ++ de base - et aide à expliquer certaines des verrues autrement incompréhensibles du langage plus large ...
comingstorm

2
@comingstorm La première chose qu'un programmeur C devrait faire est de désapprendre presque tout ce qu'il sait sur le C, puis de commencer à apprendre le C ++. Il y a des différences subtiles qui pourraient vous mordre.
Membre

1
De plus, le code C ++ moderne et idiomatique n’emprunte pas grand chose au C en dehors de la syntaxe. Ce n'est plus comme si nous utilisions encore les cordes de C et Malloc / free. En tant que débutant du langage, vous feriez mieux de choisir un livre comme C ++ Primer 5th édition, Accelerated C ++, etc. au lieu de vous concentrer sur C.
bstamour

1

Les livres d'introduction récents sur le C ++ couvrent également de plus en plus le C ++ 11. J'ai lu Teach Yourself C ++ de Sam après avoir travaillé avec des langages de script, mais pas C / C ++ pendant près de dix ans et je l'ai trouvé vraiment utile. Je me suis très vite familiarisé avec les idées centrales du C ++ (y compris beaucoup de STL) et conscient de nombreux détails qui sont différents en C ++ 11.

Comme d'autres affiches l'ont mentionné, C ++ 11 est à bien des égards plus facile que les normes plus anciennes avec des ajouts de style script auto, comme , for(int &i : m_vector){}etc. Si votre "peu de connaissances" provient de langages comme Python ou Matlab, vous trouverez C ++ 11 un peu plus "naturel" que les normes antérieures.

Je tiens également à souligner que la compatibilité du compilateur pour C ++ 11 est ( presque ) complète. Par conséquent, le code "trop ​​à jour pour être compilé" n'est plus un problème.

Bref, fais-le.


-1

À l'époque, le C était considéré comme une condition préalable du C ++, en particulier pour les débutants en programmation. Parce que vous devez comprendre ce que fait une langue et pourquoi elle a été conçue comme ça. C a eu beaucoup d’idées géniales et suffisantes sur le langage de programmation, qui ne sera jamais démodé. Ainsi, je crois que c'est le meilleur début.

Et après avoir eu un point de vue fondamental sur la programmation, vous devrez peut-être choisir la prochaine étape, ce qui signifie choisir une langue pour apprendre aussi profondément que possible. Peu importe la profondeur que vous obtenez, il peut généralement décider de la profondeur que vous pouvez obtenir pour toute autre langue. Autrement dit, peu importe le nombre de langues que vous avez apprises, la plus profonde sera toujours la première que vous avez découverte. Pour ma part, j'ai effectué des recherches sur Java et créé quelques modèles de Java pour mieux comprendre les fonctionnalités de son noyau.

Après cela, vous pourrez peut-être apprendre ce que vous voulez, car vous maîtrisez parfaitement la technologie du langage de programmation. J'ai commencé à apprendre le C #, Go, Python et même Scala et j'ai réalisé de nombreux projets pour le plaisir et le travail. Le record personnel est de 3 mois à compter du début de l’apprentissage d’une langue pour devenir 1.0 à la tête d’un projet en développement.

Dans mon cas, mon premier programme a plus de 15 ans et je ne me souviens même plus de quoi il s'agit. Je crois que si vous travaillez assez dur, vous irez certainement mieux et plus vite que moi.


cela ne répond pas à la question posée
moucher le

Totalement, désolé. Je veux juste dire, ni. Peu importe ce que vous voulez apprendre finalement, seule la base du langage de programmation peut décider de la profondeur à laquelle vous pouvez vous plonger dans ce domaine. En même temps, vous devez y consacrer plus de temps que d’essayer rapidement.
WinstonWu

-2

En tant que débutant, je pense qu’il faut d’abord passer par les concepts C ++, car C ++ 11 et tout ressemble à une nouvelle version, mais C et C ++ sont la base de tout type de développement. Une fois que vous avez appris le C ++, la plupart des concepts seront automatiquement effacés.


1
Bienvenue aux programmeurs! Je ne suis pas sûr que votre réponse ajoute beaucoup à cette question; et parlant grammaticalement un peu en désordre. J'ai du mal à suivre ce que vous essayez de dire. Pourriez-vous développer votre réponse, peut-être ajouter des exemples sur les raisons pour lesquelles C ++ 11 diffère tellement que l'apprentissage de C et des versions antérieures de la norme C ++ est préférable?
Martijn Pieters

-3

C ++ est un langage vraiment génial et puissant. Cependant, cela place également beaucoup de responsabilités sur le programmeur.

Si vous êtes complètement nouveau en programmation, simplifiez-vous la vie et commencez avec C #. Sa syntaxe est basée sur C ++, mais la gestion des erreurs est beaucoup plus facile à utiliser pour les débutants pour vous aider lorsque les choses tournent mal.

Si vous êtes à l'aise avec les méthodes, les classes, l'héritage et que vous souhaitez vous développer dans un environnement où la gestion de la mémoire et des ressources système est plus importante que la productivité, le C ++ est un bon choix et je commencerais par apprendre le standard actuel. Gardez à l'esprit que le C ++ nécessite que vous compreniez la mémoire et la gériez de manière active. Faites des erreurs ici, et tout ce que vous obtenez est un noyau vidé ou vos données contiennent des octets qui n’ont pas de sens. Et souvent, le point où vous trouvez le problème n’est pas lié à la cause réelle.


1
Si on commence par C #, il s'habituera à programmer à un niveau élevé (POO, gestion automatique de la mémoire) sans savoir réellement ce qui se passe "en coulisses". Si cette personne passe ensuite au C ++, il lui manquera des connaissances importantes sur le C / C ++ (je pense surtout à la gestion de la mémoire, mais il y a plus). Cela pourrait être encore plus trompeur du fait que C ++ et C # partagent une syntaxe très similaire, mais ce que le code compile en réalité est totalement différent. Gardez à l'esprit que l'OP a clairement indiqué son intérêt pour C ++.
Eti

Le PO a également indiqué qu'il connaissait peu la programmation. apprendre votre langue maternelle en C ++ est un énorme défi. Mieux vaut choisir vos batailles et choisir une série de plus petites, car vous avez beaucoup plus de chances de réussir.
Michael Shaw

-6

Pourquoi voulez-vous commencer avec C ++?

Personnellement, je recommande contre C ++ en tant que première langue. C'est délicat, complexe, difficile ... simplement un niveau beaucoup plus bas et plus "dangereux" que la plupart des autres langages de programmation.

Je conseille de choisir c #, java, python ou javascript ... et un bon livre en cours de route. Vous passerez un moment beaucoup plus agréable avec ceux-ci.


3
Je ne suis pas d'accord sur cela comme une généralisation. Passer de la vie facile de java / C # / python, etc. à un monde plus complexe de C et C ++ n’est pas si facile. Si vous êtes vraiment déterminé à apprendre un langage de programmation, apprendre le C et le C ++ est difficile, mais vous en donnera beaucoup. Si vous souhaitez par la suite programmer en java, en c #, en python, etc., il est beaucoup plus facile de changer que de passer de C à C ++. Résumé: C / C ++ sera plus difficile à démarrer, mais facilitera le passage à n’importe quel autre langage OO.
martiert

2
C ++ est la meilleure base pour commencer. La programmation est complexe et vous devez travailler avec un matériel. C ++ est un moyen étonnant de commencer à apprendre cela sans faux sentiment de sécurité.
Coder

La question de l'op repose entièrement sur son but avec le développement.
Independent

1
Je ne suis pas d'accord avec ça. L'apprentissage de C ++ présente plusieurs avantages et facilite l'apprentissage d'autres langages tels que Java et C #, pour n'en nommer que quelques-uns.
Anthony

2
@Dhananjay: C ++ est bien plus difficile que Java ... Java est comme un bébé vélo, une version extrêmement simplifiée du C ++. Ce dernier serait un vélo sans fioritures sans freins. Si vous trouvez déjà difficile java, C ++ sera une douleur. Mes 2 centimes
dagnelies
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.