2010-08-13 5 views
6

Les gars, j'ai besoin de trouver un bon site comme codingbat pour "réapprendre" C++. Je l'ai appris à l'école mais je ne l'ai jamais utilisé sérieusement. Je ne cherche pas quelque chose comme Project Euler parce qu'il se concentre sur des problèmes de maths. J'ai besoin de quelque chose de vraiment axé sur les principes, les caractéristiques et les outils C++.site de codingbat-like pour C++

+0

merci pour le lien. J'avais appris Python et Java, et ce serait bien d'enlever un peu de poussière et de rouille. –

Répondre

11

Je ne pense pas qu'un tel site existe et j'en doute. La raison en est que C++ est énorme - et je veux dire reeaallllyyy énorme.
Lorsque vous commencez à écrire du code C++ professionnellement (40hrs par semaine) et prenez 1 ou 2 heures pour apprendre de nouvelles choses sur C++ tous les jours (soit 5-10hrs par semaine), lire des livres et des articles, vous aurez besoin de mois, sinon d'années, pour devenir un vrai programmeur professionnel en C++ - en supposant que votre travail ne nécessite pas d'apprendre des API tierces, de nouveaux outils, de nouvelles technologies et autres choses qui vous distrairaient de l'apprentissage C++.
Depuis plusieurs années, j'ai enseigné le C++ à des étudiants qui avaient déjà une année d'exposition à Java. En 4-5 mois, 12-15 conférences, et au moins deux fois cette fois dans le laboratoire, j'ai réussi à les tirer de "Bonjour, monde!" tout le chemin à une courte introduction à la programmation de méta modèle. Tous ceux qui connaissent toute la zone couverte par cette période vous diront qu'après cela, ils seront encore des novices sanglants.
(Heck, j'utilise C++ pour> 15 ans, gagner mon argent en écrivant le code C++> 10 ans, et encore apprendre de nouvelles choses à ce sujet presque hebdomadaire Et ce n'est même pas compte tenu de l'énorme quantité de choses déversées sur nous par la nouvelle norme, qui a été "juste autour du coin" depuis plusieurs années). En raison de la taille du territoire à couvrir pour apprendre le C++, et aussi du fait que C++ est assez vieux pour que ses programmeurs puissent être classés en plusieurs générations quand il s'agit de définir les idiomes standard et "meilleur". "pratiques qu'ils ont apprises, et enfin (encore une fois en raison de son incroyable énormité) de nouvelles techniques sont constamment découvertes et évolutives (modèle méta programmation, maintenant une caractéristique très importante de C++, était accident personne n'avait prévu), la communauté C++ Les opinions sur les idiomes et les pratiques ne sont pas aussi compactes que, disons, celles de la communauté Java et peuvent difficilement être communiquées sous la forme d'un ensemble de quelques dizaines de règles sans susciter de discussions animées.
(je pense que le fait qu'il ya plusieurs différents très bon et recommandé les meilleures pratiques livres liste plusieurs règles douzaine de pouce chacun, et le fait que certains d'entre eux ont réussi à acquérir plus tard un complétant Les meilleures pratiques livre , en dit long sur ce sujet.)

Vous trouverez de nombreux programmeurs C++ professionnels qui n'utilisent que 30% des offres C++. Par exemple, beaucoup l'utilisent comme un langage OO, manquant des modèles (peut-être à l'exception de la STL), des exceptions, et d'autres choses très utiles. Mais C++ est un langage multi-paradigme.Il prend en charge la programmation orientée objet ainsi que la programmation générique, la programmation générative, beaucoup de choses de programmation fonctionnelle et bien d'autres paradigmes. Et il devient plus puissant lorsque ces paradigmes sont combinés.


Alors, quel est mon conseil?

Jetez un oeil à The Definitive C++ Book Guide and List.

Faites d'abord votre choix parmi les livres pour débutants. Puisque vous dites que vous avez déjà eu une exposition au C++, je recommanderais Accelerated C++ par Andrew Koenig et Barbara Moo. C'est une excellente introduction qui ne peut pas être assez louée pour la façon dont elle a changé l'enseignement C++, mais elle s'accompagne d'une courbe d'apprentissage plutôt abrupte. De plus, avec 250 pages, c'est vraiment une courte introduction.
Une alternative à cela serait probablement soit Primer C++ de Stanley Lippman (qui, à 1000 pages, couvre le même terrain en détail) ou de Bruce Eckel Penser à C++ (que je ne sais pas) ou Bjarne Stroustrup classique de Le langage de programmation C++ (aussi 1k pages) ou son livre le plus récent, Programmation - Principes et pratiques en utilisant C++ (que je n'ai pas encore regardé).
Ces livres sont livrés avec suffisamment de tâches pour vous occuper pendant un certain temps. Ajoutez-en quelques-unes et vous pouvez être occupé à apprendre pendant des mois.

Ensuite, faites lentement votre chemin dans la liste.

Le suivant standard C++, maintenant généralement attendue en 2011, ajoutera quelques concepts difficiles à la langue (comme références rvalue) et une bibliothèque standard considérablement élargi. (Le projet actuel a presque deux fois plus de pages que le dernier.) Malheureusement, puisque la norme n'est pas encore terminée, il n'y a pas de livres disponibles pour l'enseigner. Tout est étalé dans les articles et dans les discussions en ligne (bien que Wikipedia a a pretty good article about it), et il est tout prévu pour les programmeurs C++ courants, pas pour les novices C++. Il n'y a malheureusement pas un seul texte pour enseigner aux débutants C++ 1x à C++. J'ai peur que cela prenne des années avant que vous puissiez faire votre choix parmi plusieurs livres recommandés.

Et n'oubliez pas le C++ FAQ, qui est une très bonne collection de bonnes pratiques (et de leurs rationnels) en ligne, bien qu'il ne s'agisse en aucun cas d'un texte d'introduction.

+0

+1 pour C++ FAQ, qui est une excellente mise à jour de gotchas. – Brian

+2

C++ est complexe, oui, mais pourquoi les programmeurs C++ "normaux" devraient être versés dans, par exemple. métaprogrammation de modèle? Pouvez-vous indiquer un exemple où la métaprogrammation de modèles permet aux développeurs de faire quelque chose qui n'est pas possible par d'autres moyens? Pour le développement d'applications régulières, il n'est pas nécessaire de connaître l'intégralité de la norme C++. Il suffit de connaître les pièges de la langue (ce qui, en soi, est assez difficile à comprendre) et les bibliothèques de base actuelles utilisées pour le projet. – Schedler

+0

@Schedler: "Pouvez-vous indiquer un exemple où la métaprogrammation de template permet [...] de faire quelque chose qui n'est pas possible par d'autres moyens?" L'exécution d'algorithmes au moment de la compilation signifie que, si elle n'échoue pas sur la machine du développeur, elle n'échouera pas non plus chez le client. Si vous créez une application qui doit être installée sur plusieurs millions de machines de bureau différentes, cela peut difficilement être évalué assez haut et vaut presque n'importe quel effort. Bien sûr, cela ne signifie pas que tout le monde doit être capable de faire du TMP. Mais si vous traitez C++ comme un langage OO, il vous manque beaucoup. C++ est un ... – sbi

3

Il n'y a pas de substitut à la pratique.

Trouvez un programme que vous voulez sur votre machine (peut-être aussi simple que quelque chose qui compte le nombre de lignes dans un projet), et écrivez-le en C++.

Je voudrais pouvoir vous dire que j'ai une ressource impressionnante qui vous montre chaque astuce C++ dans le livre, mais à vrai dire, vous êtes cette ressource.

Pratique. Apprenez de vos propres erreurs. Tu es ton meilleur professeur.

+0

Et comment ce conseil diffère-t-il du site lié à la question, qui fait exactement cela, seulement il a déjà choisi un ensemble d'exemples qui, vraisemblablement, étaient considérés comme bons pour apprendre une langue? – sbi

+0

@sbi - Comme vous l'avez mentionné dans votre réponse, vous apprenez toujours de nouvelles choses chaque semaine. Y a-t-il un seul site qui vous apprend ce genre de choses ou l'apprenez-vous parce que vous voulez l'apprendre? Votre message illustre mon point de vue - vous êtes votre meilleur professeur. – riwalk

+0

De nos jours, j'apprends principalement à travers des discussions et des réponses d'autres personnes dans des endroits comme SO. – sbi

1

Sphère Online Judge a l'air de fonctionner avec C++ (et une foule d'autres langages). Ce n'est pas aussi simple que CodingBat, mais il aura des problèmes plus complexes.