Je voulais apprendre le C ++ depuis un certain temps et j'ai suivi la programmation informatique AP au lycée (à l'époque où c'était C ++ et non Java). J'apprécie le C et je n'ai tout simplement pas trouvé le temps d'apprendre le C ++ ou je retomberai simplement sur C # où je suis beaucoup plus productif.
Ma question est la suivante: étant donné que C ++ '11 a été approuvé (bien que je ne sache pas entièrement implémenté), cela change-t-il la façon dont je devrais aborder l'apprentissage du C ++? Je possède C ++: la référence complète de Herb Schildt datant de 1998. La nouvelle norme approuvée rend-elle l'apprentissage de ces livres moins important que certains des nouveaux didacticiels / livres qui contiennent des éléments de la norme? Y a-t-il un avantage à apprendre des livres plus anciens?
Réponses:
Absolument. Ces jours-ci, trois choses qui sont généralement dans la leçon 2 devraient bouger beaucoup, beaucoup plus tard:
Ces choses qui sont habituellement dans la leçon 99 devraient bouger beaucoup plus tôt
Chaque pointeur brut devrait être immédiatement donné à un wrapper de pointeur intelligent (je commencerais par partagé et considérerais unique plus tard car il nécessite d'expliquer les références std :: move et rvalue). Faire cela fera que l'apprentissage du C ++ ressemble beaucoup à l'apprentissage de Java ou C #, où vous apprenez la bibliothèque en même temps que le langage. Cela enlèvera également beaucoup de travail de mémoire et laissera les gens moins inquiets à propos des pièges.
Je voudrais également intégrer des lambdas dans l'image la première fois que nous voulions parcourir une collection et faire quelque chose pour chaque élément.
Avertissement: j'écris actuellement un cours C ++ pour Pluralsight et j'utilise cette approche. Le dernier module est «comprendre le code des autres» et c'est là que je mettrai les trucs déroutants comme les chaînes char *, la gestion manuelle de la mémoire, l'arithmétique des pointeurs, etc.
Mise à jour: quelques personnes ont demandé pourquoi l'existence de C ++ 0x inspire l'enseignement de choses qui auraient pu être enseignées avec C ++ 03. Je pense que c'est un certain nombre de choses:
>>
correctement élimine le piège qui serait là lors de la déclaration de certains modèles de modèlesÀ mon avis, il y a des choses que nous aurions pu changer dans la façon dont nous enseignions le C ++ il y a quelque temps, mais certains d'entre nous se sont retenus parce que nous avions encore besoin de la méthode old-school pour un repli ou parce que l'enseigner impliquait juste beaucoup des connaissances arcaniques.
la source
std::for_each()
sera beaucoup plus populaire qu'il ne l'était,auto
sera très important, et la nouvelle syntaxe de déclaration de fonction (en conjonction avecdecltype
) deviendra beaucoup utilisée dans le code du modèle. Ce sont des choses qu'aucun livre C ++ actuel n'enseigne. Mais, oui, en général je suis d'accord avec vous (+1
). Quand j'ai commencé à donner des cours C ++, j'ai commencé avec Accelerated C ++ , et même si mon cours a commencé à en dévier de plus en plus, il reste fidèle au principe sous-jacent.À peu près, oui. Le simple fait est qu'en C ++ 98 et 03, de nombreuses bonnes pratiques étaient fondamentalement inutilisables en raison de la mauvaise qualité du support du langage, par exemple pour la programmation fonctionnelle. Maintenant que les lambdas existent et fonctionnent, les gens ont tendance à accepter les interfaces fonctionnelles beaucoup mieux qu'auparavant, et la programmation générique est encore plus forte qu'auparavant.
En 1998, les gens commençaient à peine à découvrir comment écrire du code de haute qualité, sûr et rapide en utilisant C ++, et beaucoup de code était «C était des classes». En C ++ 11, c'est très différent - des idiomes comme copier et échanger et la règle de trois (maintenant cinq) sont bien connus et définis, et beaucoup plus de types de gestion des ressources sont devenus standard, comme
shared_ptr
etunique_ptr
où les normes précédentes les laissaient simplement comme des trous béants.Vous pouvez consulter cette question pour une excellente liste de documents de référence sur C ++.
la source
+1
de moi.Je ne connais pas le livre spécifique que vous mentionnez. Mais en général, vous pouvez dire que toutes les bases de la syntaxe C ++, des types de données et de la POO sont toujours vraies. Il en va de même pour les bibliothèques STL qui sont mentionnées dans la plupart des livres pour débutants.
Bien qu'un livre aussi vieux que 1998 ait manqué quelques mises à jour et développements dans le style de programmation C ++, qui se sont accumulés dans la communauté au fil des ans. Je chercherais des ressources un peu plus à jour. Il existe plus qu'assez de tutoriels et de documents en ligne gratuits qui devraient vous fournir un bon départ. Certains d'entre eux peuvent même mentionner C ++ 0x.
C ++ 0x va certainement changer beaucoup de choses sur la façon dont les programmeurs verront et utiliseront le langage à l'avenir. Mais cela influencerait des projets plus complexes où les nouvelles fonctionnalités commencent à avoir un sens. Pour un débutant, cela n'a pas d'importance et vous pouvez vous concentrer sur la mise à l'aise avec les concepts existants, c'est déjà suffisant pour apprendre. La plupart des livres pour débutants ne vont pas très loin dans les modèles par exemple, donc les nouveaux modèles variadic ne sont pas ce que vous devez savoir maintenant.
Peut-être jetez un œil à une liste de changements . Au moins quelques concepts comme la plage basée sur les boucles apparaîtront très probablement dans les nouveaux tutoriels même pour les débutants. Il vaut donc la peine d'y jeter un œil.
la source
cprogramming.com
.Bien sûr, en ce qui concerne tout ce qui concerne la technologie, être à jour avec les derniers matériaux est toujours une décision intelligente, cependant, les changements introduits dans C ++ 11 sont conçus pour ne pas secouer le bateau. Si vous êtes nouveau en C ++ (ou en programmation en général), ce n'est pas quelque chose qui m'inquiète.
De plus, si vous êtes un programmeur professionnel, vous pouvez parier que vous travaillerez sur le code de quelqu'un d'autre à l'avenir, il est donc toujours utile de comprendre le fonctionnement des choses, même s'il s'agit d'une technique dépréciée dans la pratique.
la source
auto
et l'exécution d'une fonction asynchrone pourraient-ils faire autre chose que "secouer le bateau"?