Je vais encadrer une équipe d'élèves du secondaire pour le concours de robotique FIRST. La plupart des équipes développent ici leur logiciel de robot utilisant le langage C ++. Pour beaucoup d’élèves de l’équipe, ce sera leur première introduction à la programmation. Je n'aurais pas choisi le C ++ pour enseigner la programmation aux lycéens (par exemple, Python ou Javascript aurait été plus facile, je pense), mais le choix est défini.
Je veux leur apprendre le bon C ++ (c'est-à-dire éviter un dialecte mixte C / C ++, c'est-à-dire C +), mais je ne veux pas les effrayer avec une complexité inutile. D'ailleurs:
- Devrais-je commencer à utiliser STL dès le premier jour, en particulier?
vector
ou juste coller avec des tableaux standard? Les tableaux sont plus faciles à introduire, mais les erreurs de pointeur peuvent être plus difficiles à détecter. - Pour les E / S, devrais-je m'en tenir à
cout
, etc. ou pensez-vous qu'ilprintf
serait plus facile à apprendre? - Existe-t-il des ressources en ligne pour le C ++ qui conviennent aux jeunes apprenants?
Merci!
EDIT : Merci pour toutes ces excellentes réponses. En plus du C ++ accéléré , suggéré par de nombreuses personnes, j'ai découvert que C ++ For Everyone est un excellent texte.
Réponses:
Je pense que vous devriez commencer par les types de données que le langage a intégrés, tels que les tableaux et les pointeurs, et lorsque vos étudiants les comprennent, passez aux classes et à OO, puis au STL.
La raison en est que vous pouvez apprendre aux gens à comprendre les tableaux sans comprendre beaucoup de choses autres que les variables et l'architecture informatique sous-jacente, mais vous ne pouvez pas leur apprendre à comprendre
vector
sans leur enseigner les cours au préalable. Si vous utilisez la STL dès le départ, vos étudiants devront vivre sans savoir commentvector
fonctionne exactement. Et puis, lorsque vous en arriverez là, ils ne maîtriseront pas suffisamment les pointeurs, les tableaux et les éléments que vous obtiendrez en écrivant votre propre classe de vecteurs, en écrivant votre propre classe de liste chaînée, etc. qui seront nécessaires. pour apprécier et exploiter ses fonctionnalités. Ça m'énerve quand les étudiants disent "qu'est-ce que c'est?" et les enseignants disent "juste l'ignorer, tu l'apprendras plus tard."Et comme Demian l'a souligné dans les commentaires, déchiffrer les messages relativement cryptés que vous recevez des erreurs de modèle est beaucoup plus difficile que de comprendre les erreurs que vous pouvez obtenir avec des constructions de tableaux / non-modèles.
Je ne ressens pas la même chose à propos de
cout
etprintf
. Ni l'un ni l'autre n'est de niveau inférieur à l'autre, sauf que lacout
surcharge de l'opérateur est utilisée.Cela peut sembler stupide, mais je suis absolument fanatique de faire comprendre aux gens les éléments de base de toute chose avant de passer aux abstractions. Vous ne devriez pas utiliser de pointeurs intelligents avant de maîtriser les pointeurs bruts, aucun vecteur avant les tableaux, ce genre de chose.
Je le dis souvent, mais je le répète: il vaut mieux enseigner d'abord aux élèves la division longue, puis les laisser utiliser une calculatrice, plutôt que de les laisser utiliser une calculatrice, puis leur enseigner la division longue.
Pour ce qui est des livres à enseigner aux débutants, consultez la liste de référence des bons livres C ++ .
la source
vector
tableaux superposés . Je suis déchiré.std::string
etstd::vector
?! Est-ce que les programmeurs 32 C votent à la hausse? J'enseigne le C ++ depuis une décennie, aux débutants en programmation, aux étudiants qui ont passé une année en Java et aux professionnels de la programmation. Je l'utilisestd::string
etstd::vector
depuis le premier jour. Ils sont faciles à utiliser, peu importe leurs entrailles. (Vous ne voudriez pas apprendre la chaîne de VB parce que c'est trop complexe à l'intérieur?)std::vector
pour pouvoir l'utiliser. Et les classes sont une partie extrêmement basique de C ++. Ce qui n’est pas fondamental, c’est le débogage de toutes ces erreurs qu’ils obtiendront en utilisant des tableaux et des pointeurs natifs.new
mot clé, vous êtes de retour dans la mémoire de gestion. Et souvent, les bibliothèques demandent des pointeurs et vous devez vous demander: "est-ce que cela va en devenir la propriété? Ou dois-je encore le nettoyer?". Fonder mon pied. Plus comme un clou ou un calfeutrage ou quelque chose.Ceci est ma propre expérience. Prends-le pour ce que ça vaut.
En regardant en arrière quand j'ai commencé à programmer, j'aurais vraiment aimé apprendre d' abord sur la mémoire . Non, ce n'est pas excitant. Ça va vous rendre luisant. Mais c'est un concept ridiculement facile à enseigner. Il suffit de montrer une table à une dimension et de leur faire subir quelques exercices mentaux:
etc. Une fois que vous avez la mémoire de base, tout le reste est du gâteau. Ce sont les pauvres étudiants qui supposent que le compilateur fait quelque chose de magique (ou qu’ils n’ont jamais à penser à la gestion de la mémoire) qui ont tendance à lutter le plus. Et C ++ perturbe les choses parce que certaines choses sont automatiquement nettoyées (un vecteur normal) alors que d'autres ne le sont pas (un vecteur alloué en utilisant "nouveau"). Et ne me lancez même pas sur les chaînes (char * vs. std :: string - essayez de l'expliquer sans connaître le pointeur).
Je ne sais pas quelle plate-forme votre concurrence de robots ciblera, mais s'il s'agit d'un environnement à mémoire limitée, les compétences en gestion de la mémoire sont cruciales.
MODIFIER
Une fois que vous leur avez enseigné les principes de base, alors oui, je dis d'aller au C ++. Techniquement, ce ne sont que des bibliothèques différentes, mais oui, il ne sert à rien de les confondre avec plus d'un paradigme. Donnez-leur des outils C ++ (qui incluent des pointeurs et des tableaux).
la source
certainement aller droit dans l'utilisation des types de bibliothèque standard. a
std::string
oustd::vector
est ce qu'ils doivent souvent utiliser et (la grande majorité des implémentations de) ces types offrent une certaine forme de détection et de traitement des erreurs, tout en soustrayant bon nombre des complexités aux étudiants.vous pouvez passer beaucoup de temps à enseigner aux étudiants comment la mémoire est structurée et comment gérer la mémoire (style C), ou vous pouvez vous mettre au travail en utilisant les types idiomatiques du langage, puis expliquer les détails de mise en œuvre si nécessaire (et quand ils ont meilleure compréhension de ce qu’est un tableau et de son utilisation).
la syntaxe de
std::vector
(créer / lire / écrire) n'est pas beaucoup plus compliquée que celle d'un tableau C. En comparaison, la gestion manuelle de la mémoire et toutes les erreurs courantes commises par les nouveaux apprenants avec les tableaux C sont beaucoup plus difficiles à apprendre, à enseigner et à utiliser.cout
. Personnellement, je pense que c'estcout
plus facile à apprendre. peut-être plus important encore, vous devriez choisircout
car il est plus sûr, plus polyvalent et vous permet de définir le mode d’impression d’un objet, ce qui signifie que vous avez déjà des fonctionnalités intégrées et une sécurité typographique en utilisant certains types de bibliothèques standard. Enfin, vous obtiendrez des programmes mixtes lorsque vous réaliserez qu'ils peuvent également avoir besoin d'apprendrecout
en plusprintf
.En fait, je pense que vous devriez lire C ++ accéléré, de Koenig et Moo, et l’utiliser éventuellement pour les instructions (en répondant à la question 3 indirectement). dans le livre, ils introduisent
std::cout
juste avantreturn
(page 3), et sauvegardent les pointeurs et les tableaux jusqu'au chapitre 10. Si je pouvais copier et coller la préface de ce livre comme réponse à votre question, je le ferais. (note: je vous recommande de le lire dans la perspective d’enseigner le c ++).Modifier voici la préface
si vous ne souhaitez pas utiliser le C ++ accéléré (qui suppose une certaine connaissance de la programmation en général), alors peut-être aimeriez-vous penser à Eckel en C ++ . Je ne l'ai pas lu, mais il s'agit d'un texte d'introduction C ++ librement distribué.
la source
std::cout
de » l'introduction, les accolades sont introduits =) (il est une dissection simple de l'omniprésent « Bonjour, monde »)Une chose à considérer est que, dans le code FIRST typique, les structures de données de toute forme (structures, classes, tableaux, vecteurs, listes) jouent un très petit rôle. Vous gérez généralement une très petite quantité de données de capteur et vous l'utilisez pour décider d'un très petit nombre de mouvements d'actionneur.
Mais ce qui joue un rôle énorme et peut être très difficile à comprendre, ce sont toutes les différentes formes de contrôle qui continuent.
Je mettrais donc beaucoup l'accent sur le contrôle. Commencez par les bases:
if
,for
,while
. Demandez-leur de les pratiquer beaucoup. Faites-les bien connaître ....... mais ensuite cela devient plus difficile. Tout code de robot de taille modérée aboutit éventuellement à des schémas de contrôle plus difficiles:
Big "principale" boucle, qui appelle tout
Machines d'état (elles apparaissent beaucoup)
Sauvegarde des valeurs précédentes / compteur en cours (comme pour le PID)
Ce sont difficiles à comprendre pour les débutants. Penser à la façon dont un programme se déplace dans un code comme celui-ci prête à confusion, vous ne le réalisez peut-être pas maintenant, mais c'est le cas. Cela va causer beaucoup plus de problèmes à vos étudiants que la langue elle-même.
Bonne chance aussi! J'espère que la saison se passe bien.
la source
Le problème avec les tableaux est que, sauf de simples exemples de manuels, il faut des tableaux de taille dynamique, et le moment où vous avez besoin de tableaux de taille dynamique
std::vector
est bien plus facile. En outre, le seul moyen de gérer en toute sécurité des tableaux de taille dynamique consiste à les envelopper dans votre propre classe, ce qui constituerait une mauvaisestd::vector
arnaque.Contrairement à la croyance inexplicablement populaire, les étudiants peuvent utiliser des fonctionnalités nécessitant la mise en œuvre de mécanismes complexes sans savoir comment les implémenter elles-mêmes. Comme je l'ai dit dans un commentaire: Vous ne penseriez même pas à ne pas enseigner les chaînes dans d'autres langues, simplement parce que leur mise en œuvre est complexe, n'est-ce pas?
Pourquoi un ensemble de conventions de chaînes de format archaïques qui font exploser votre programme au moment où vous obtenez quelque chose de mal (ce qui se produit lorsque vous modifiez un
typedef
en-tête apparemment sans lien) serait préférable au type de sécuritéstd::cout
?La plupart des ressources C ++, en ligne ou non, sont mauvaises. Et je ne parle pas d'utiliser des polices ou un langage difficiles à lire. Je parle d'erreurs factuelles flagrantes. Il existe très peu de bonnes ressources C ++, principalement un ou deux douzaines de livres . Le seul que je connaisse en ligne est Pensée en C ++ de Bruce Eckel .
Pendant une décennie, j'ai enseigné le C ++ à des étudiants de formation très différente en utilisant le C ++ accéléré de Koenig / Moo . Mon parcours a beaucoup changé au cours de cette décennie, il n’est maintenant plus du tout au livre, à part le principe sous-jacent: utilisez dès le début les idiomes modernes, corrects et sans danger. N'enseignez pas à vos élèves la manipulation manuelle de la mémoire, mais seulement de les faire désapprendre plus tard en faveur de la sécurité des idiomes. Comme vous pouvez le constater dans certaines des réponses fournies ici, cela ne fonctionne pas: ceux qui ont déjà appris à manier les méthodes manuelles comprendront rarement l'avantage d'utiliser des idiomes modernes et sûrs.
la source
Si vous voulez enseigner le C ++, je commencerais directement par les constructions C ++ en tant que vecteur et cout au lieu du sous-ensemble C comme printf.
la source
Oui. L'utilisation de tableaux natifs en C ++ est sujette aux erreurs et est simplement une mauvaise pratique 99% du temps.
Oui.
Ils ne sont pas si jeunes. Apprendre à programmer ne nécessite pas de sagesse, juste de la motivation et un esprit ouvert. Je ne vois rien d'enseigné au cours des deux dernières années du secondaire qui permettrait de mieux préparer un élève à apprendre à programmer. Avez-vous examiné la pensée de Bruce Eckel en C ++ ? Il est disponible en téléchargement gratuit et très bien commenté. Veuillez éviter le très populaire mais horrible C ++: Comment programmer et tous les livres de Teach Yourself de Sam ... de Sam .
la source
On m'a enseigné C ++ dans le lycée comme premier langage de programmation, mais il était plus comme « C + », maintenant que vous le dites; nous avions l'habitude
cout
d'écrire du texte dans la console et les fichiers, mais aussi dans quelques fonctions C (getch()
c'était ma préférée).Je pense que la manière la plus efficace (et peut-être même la plus amusante) d’enseigner les bases consiste à utiliser un programme orienté vers un objectif: commencer par montrer comment sortir des éléments, puis saisir au clavier, puis un simple fichier d’E / S, etc. jeu basé (ou l’équivalent robotique). Ensuite, quand ils demandent: "Comment puis-je faire X?", Vous pouvez décomposer X en termes d’exemples déjà vus, par exemple: "Vous devez d’abord obtenir les informations de l’utilisateur, comme nous l’avons fait dans Z, puis ... »(évidemment il est pas facile dans la pratique puisque X sera probablement quelque chose qu'ils ont besoin de connaissances supplémentaires afin de faire, par exemple « graphiques 3D », mais vous pouvez encore expliquer comment il serait travailler dans un haut niveau façon).
Les exemples que vous leur montrez commenceront par de la magie copiée-collée dans une boîte noire, dont les mystères se dévoilent à mesure que des morceaux du puzzle de la programmation sont lentement compris. Par exemple, vos étudiants apprendront les bases de
if
s assez rapidement, mais ils ne comprendront probablement pas qu’une expression booléenne n’est pas exclusivement limitée à une utilisation dans unif
état (conduisant auif (blah) return true; else return false;
code classique ).Les subtilités de savoir si vous choisissez un tableau ou un vecteur en tant que conteneur ne sembleront pas pertinentes pour les étudiants au début. Un vecteur / tableau sera simplement un moyen d'avoir beaucoup de variables comme une seule variable, accessible via un index. S'en tenir à celui où vous pouvez. Les pointeurs ne seront pas compris avant plus tard. Cela ne veut pas dire que vous ne devriez pas expliquer les choses; juste que vous ne pouvez pas tout expliquer en une fois, et les choses que vous expliquez ne seront pas complètement absorbées. Les humains apprennent organiquement, pas linéairement. Je l'utilisais
cout
depuis quelques années avant de bien comprendre ce que la surcharge d'opérateur était!Oh, et n'ayez pas peur de la répétition. "C’est comme le programme Hello World que nous avons fait - rappelez-vous comment nous avons écrit du texte sur la console?" (non ...) "Revoyons ça juste pour en être sûr." ... Et poser des questions! Invitez les élèves à s’engager avec des exemples amusants et beaucoup d’interaction.
C ++ est un langage complexe et, quoi que vous fassiez, une grande partie de cette complexité (et de l’art de la programmation en général) sera perdue pour vos étudiants. Tout ce que vous leur montrez sera nouveau pour eux; la plupart ne s'enfoncent pas à un niveau de compréhension profond (du moins, pas tout de suite). Le fonctionnement de la mémoire, l'interaction des composants d'un PC, l'état de la pile et du tas, les pointeurs, les classes, les boucles et les chaînes if-else ne seront pas bien compris par la majorité. C'est acceptable! Ils ne doivent pas être compris pour être utilisés - une quantité incroyable de programmes géniaux peut être écrite avec des fonctions extrêmement dégoûtantes de 1000 lignes avec des
if
s redondants quintuples imbriqués et 43 variables nomméesx_2r
. La chose importante est que les étudiants apprennent et améliorent constamment. Les boîtes noires sont acceptables tant qu'elles deviennent transparentes (ou du moins gris translucide) à long terme. À la fin du cours, ils ne sauront peut-être pas ce que sont les modèles de conception, mais ils devraient être en mesure de revenir sur les programmes qu'ils ont écrits au cours des premières semaines et de se pencher sur leur code. Ils doivent comprendre de manière détaillée le fonctionnement du premier programme qu'ils ont écrit (alors qu'ils ne le savaient pas quand ils l'ont écrit). Mais ils ne sauront pas tout - pas encore .la source
J'ai suivi plusieurs cours de programmation dans ma vie, du lycée au collège. Je peux dire que je n’ai vraiment pas beaucoup appris de ma première classe c ++, à part comment imprimer des choses dans un flux.
Mon conseil, en tant que jeune étudiant, qui n'a que depuis quelques années déjà eu du travail en tant que développeur, est de ne pas insensé leur travail. Dites-leur ce qu'ils font et comment cela fonctionne au niveau du système d'exploitation (pas besoin d'entrer dans comp eng IMO).
Je pense que leur enseigner le C est un meilleur moyen de s’y prendre (il sera toujours presque toujours compilé en C ++, comme vous le savez). En leur apprenant ce qu'est réellement le terminal, comment son programme interagit avec lui, une chaîne de caractères est un tableau de caractères se terminant par un \ 0 en mémoire, ce qu'est malloc et comment l'abrégé par C ++, comment un caractère et un entier sont stockés en mémoire , etc.… Ce sont ces choses qui permettent à quelqu'un de savoir comment résoudre un problème lorsqu'il le rencontre en développement.
Je ne saurais trop insister sur l'importance de laisser le programme aux enfants et d'être là principalement pour répondre aux questions. D'après mon expérience, vous apprenez une langue en l'utilisant. Les livres et les leçons peuvent être utiles et sont nécessaires pour commencer, mais à la fin, je leur dis de leur donner un fichier C / C ++ et de leur dire: Ceci est un exemple de X, j'aimerais que vous fassiez Y (ce qui peut être fait en piratant X). Montrez-leur comment utiliser les pages de manuel (s'ils utilisent * NIX) ou montrez-leur cplusplus.com et laissez-les explorer les bibliothèques std pour comprendre par eux-mêmes.
TL; DR Laissez les enfants s’enseigner eux-mêmes. Soyez là pour structurer et répondre aux questions.
Aussi: les listes chaînées sont la vérité!
la source
Vous ne leur apprenez pas la programmation de manière générale, vous leur enseignez une sorte de programmation intégrée utilisant des robots, etc. Si j'ai bien compris.
Premièrement, je pense que vous devriez vérifier quelles bibliothèques vous allez utiliser et ce dont vous avez besoin.
S'il vous arrive d'utiliser une bibliothèque C ou similaire à C avec beaucoup de pointeurs et de tableaux C, alors vous aurez besoin d'un moyen de leur apprendre à l'utiliser, ou à savoir pourquoi vous l'utilisez.
Cependant, vous pouvez leur montrer des codes simples pour les utiliser avec des chaînes et des vecteurs, c'est ainsi que fonctionne le C ++. Cela ne signifie pas que vous ne pouvez pas leur apprendre de pointeurs.
Peut-être devriez-vous expliquer les différences entre le C ++ de bas niveau (qui ressemble au C) et le C ++ de haut niveau avec la STL. Une des choses les plus difficiles en C ++ pour les débutants est de voir ce qu'est le C, quel est le C ++ et quelles sont les différentes API système.
Comme l'objectif ici n'est pas d'apprendre la programmation générale mais de participer à un concours de robots, j'avais orienté l'enseignement de cette façon.
la source
J'ai commencé à enseigner aux étudiants le C ++ à la fin de l'année dernière et cet été également pour notre équipe de robotique FIRST.
Nous utilisons la Programmation - Principes et pratiques de Stroustrup en C ++ . J'ai trouvé le livre accessible, lisible et bien organisé. Environ 6 étudiants ont lu les chapitres par leurs propres moyens. Je suis là pour les aider avec la terminologie et les questions. Ils font tous les exercices du livre.
J'ai demandé aux étudiants de parcourir le chapitre 14. Sauter les chapitres sur les flux (inutile pour la programmation FRC). Le chapitre 14 est utile car ils reçoivent une introduction aux sous-classes. Cependant, ils doivent probablement aller plus loin dans le livre afin de mieux comprendre les constructeurs et les destructeurs liés aux sous-classes.
Ne sous-estimez pas vos étudiants. Les étudiants sont heureux d’avoir le livre, de lire, d’apprendre et de faire les exercices; et c'était pendant l'été à leur propre rythme! Il y a beaucoup d'étudiants qui ne comprendront pas. Ils devraient passer à autre chose. Tout le monde ne comprend pas la programmation.
La plus grande barrière n'est ni la langue ni le livre; c'est l'environnement de développement. Visual Studio Express peut être décourageant pour les nouveaux utilisateurs. Vous pouvez être utile pour aider les étudiants à se concentrer sur la programmation plutôt que sur l'environnement. Cependant, l'apprentissage de l'environnement est précieux car les programmeurs passent beaucoup de temps à s'adapter aux nouveaux systèmes de développement.
Bonne chance.
la source
Vous dites que vous voulez leur apprendre le C ++, mais pas les constructions C, mais la plupart des constructions de programmation dont ils ont besoin en premier sont communes à tous les langages et les versions C ++ sont enracinées en C:
Voici comment créer un programme [int main (..) {return 0; }]. Donnez un aperçu de base de l'environnement de programmation que vous souhaitez qu'ils testent également. Ils devront savoir comment créer un projet et le compiler / exécuter.
Ceci est une variable. Les variables peuvent stocker des données (int, char, float, etc.).
Les chaînes (les chaînes C ++ sont plus faciles à utiliser avec cin).
C’est ainsi que vous lisez et écrivez des données (cin, cout). "Bonjour,% s!"
Les conditions (les ordinateurs doivent prendre des décisions).
Boucles (les ordinateurs sont doués pour faire la même chose encore et encore). Afficher les boucles while et for.
Cela devrait prendre environ deux leçons d'une heure chacune. Assurez-vous de préparer un ensemble de notes concises auxquelles ils peuvent se référer dans la composante pratique. Vous n'essayez pas de faire de brillants programmeurs, alors donnez des exemples montrant comment lire à partir de la console, créer des structures et tout ce qu'ils doivent faire. Utilisez uniquement des fonctionnalités prises en charge par la langue, pas des bibliothèques d’utilitaires personnalisées. Vous ne ferez que les confondre davantage.
Dès le début, donnez l'exemple et montrez-leur des exemples de code bien présenté. Les retraits doivent être corrects, les contreventements et les parenthèses cohérents dans le style qui vous convient le mieux. Les noms de variables doivent être significatifs. Si vous montrez slop comme exemple, ils apprendront que slop est acceptable. C'est un mauvais point de départ. Insistez sur l'importance de bien mettre en retrait le retrait - j'ai constaté que, lorsque le lot que j'enseignais indentait constamment son code, il était plus facile de voir où ils se trompaient. Cela était dû au fait que la plupart de leurs erreurs concernaient des opérations incorrectes (placer les opérations dans des boucles / conditionnelles non prévues, ou l'inverse).
Ensuite, passons aux travaux pratiques. Le meilleur moyen d'apprendre quelque chose est de le casser et de comprendre pourquoi. Vous voudrez vous assurer qu'ils disposent d'un environnement facile à utiliser pour compiler leur code. Documentez-le avec des captures d'écran dans vos sorties.
Un bon exemple qui m'a aidé à comprendre certains des concepts était de construire une machine à coke:
Après cela, vous pouvez passer aux constructions C ++. vous ne voulez pas plonger trop loin avant qu'ils puissent au moins faire un programme de base.
Et surtout, ayez beaucoup de temps libre et de patience à consacrer aux questions. Il y en aura beaucoup, et la plupart d’entre eux vous feront frémir parce qu’ils sont si triviaux que la réponse vous paraît évidente.
la source
Je pense que vous ne devriez pas enseigner les choses du point de vue C ++ ("Cello hello world"), mais du domaine du problème - dans ce cas, la robotique - du point de vue. Donc, votre monde de salut clignoterait une led ou conduirait un moteur.
Bien entendu, vous pouvez / devez décomposer chaque petite tâche robotique en un sous-ensemble d'actions C ++ significativement significatives, impliquant des types, des fonctions et des opérations IO.
Pour ma part, je ne suis pas un programmeur professionnel et j'ai essayé d'apprendre Java, C ++ et Python. J'ai vraiment commencé à réaliser quelque chose (Python) lorsque j'avais de vrais (simples) problèmes à résoudre. Cela m'a amené à aller droit au but, en évitant une attention excessive aux détails de mise en œuvre fortuits du langage lui-même.
Je vous conseille donc de ne pas lire le manuel d'une langue, mais d'apprendre à faire les choses avec la langue de votre choix. C'est ce qui garde les gens motivés, je pense.
la source
J'enseignerais le C ++ strict. Vous savez comment, lorsque vous écrivez printf et que vous le donnez à de petits paramètres ou au mauvais type, quelque chose d'étrange se produit? et si vous utilisez des pointeurs invalides, de mauvaises choses peuvent arriver? NE PAS ENSEIGNER QUE
Dès le premier jour, j'enseignerais comment utiliser les références, STL et vous diriez que vous perdez des marques pour avoir utilisé des pointeurs. N'enseignez pas non plus les indicateurs intelligents. La seule fois où je remarque que j'utilise des pointeurs, c'est quand je fais une interface graphique et que des objets (comme une zone d'image) doivent exister et être une image valide ou nulle. Pour la programmation sur console, je n'ai pas utilisé de pointeurs (intelligents ou bruts) depuis longtemps.
En bref, ne leur apprenez rien qui puisse leur causer des problèmes. Enseignez à iostream, aux structs, dites-leur qu'ils perdent leurs marques lors du transtypage et n'essayent pas d'enseigner le design. Vous ne voulez pas que quelqu'un devienne un professionnel chevronné
la source
Ce n'est pas une série de conférences en C ++, mais COMP1917 de Richard Buckland est une série de conférences extrêmement réussie sur la programmation en C (suivie de COMP1927 , structures de données).
À mon avis, le C ++ est trop complexe pour les nouveaux étudiants, mais le C est un monde plus simple et constitue une bonne base en programmation système qui manque trop souvent aux nouveaux programmeurs C ++.
la source
Je commencerais avec des morceaux importants de code standard, je les aiderais à "faire quelque chose de cool" avec la programmation tout de suite et j'affinerais leur compréhension du fonctionnement des choses au fil du temps. Ils n'ont pas besoin de comprendre ou de comprendre toutes les subtilités du C ++ pour faire clignoter une LED. Ils ont juste besoin de savoir "si vous mettez ce code là, le voyant clignotera." Et ensuite "hé, parlons de ce qu'est une boucle, si vous écrivez une boucle, vous pouvez faire clignoter la LED 50 fois sans avoir à écrire 50 lignes de code, n'est-ce pas cool?" Parlons maintenant des conditions, lorsque l'utilisateur appuie sur le bouton A du boîtier de commande, nous souhaitons activer les systèmes pneumatiques pour lever un drapeau. Voici comment nous ajouterions du code pour le faire. Ou si l'interrupteur 2 de notre boîtier de commande est activé, nous faisons tourner le moteur de forage en marche arrière et non en avant.
Si vous concentrez vos efforts sur leur apprendre "juste assez" pour résoudre les problèmes qui les intéressent, cela les rendra beaucoup moins accablants et plus accessibles. S'ils sont vraiment intéressés et veulent comprendre les subtilités, ils liront probablement un livre complet sur la programmation ou suivront un cours d'été à la JC locale.
Faites une liste des "choses qu'ils veulent pouvoir contrôler" sur leur robot et transformez chacun d'eux en une leçon ... quel est le moins qu'ils doivent savoir pour ...?
Je me contenterais d'enseigner les structures les plus infaillibles, comme j'apprendrais cout over printf, car les spécificateurs de format sont très faciles à confondre et un spécificateur incorrect est souvent une recette automatique pour bloquer votre programme. De même, le vecteur obscurcit certaines des complexités de la gestion de la mémoire. Ne vous préoccupez pas de chaque détail du fonctionnement ou de la bibliothèque STL, vous devez au moins savoir comment accomplir X (ce qui peut nécessiter l'utilisation d'une structure de données de bibliothèque STL, par exemple).
la source
Utilisez Comment programmer C ++ par Deitel et Deitel. Excellent manuel à mon avis.
On dirait que vous essayez d'enseigner aux novices comment programmer et que vous les programmez à un niveau avancé en même temps. Si vous espérez leur donner un singe, voyez-le faire des extraits de code sans aucune compréhension, vous êtes voué à l'échec.
Éloignez-vous de STL pour un cours de débutant.
Si vous avez déjà une solution de codage pour votre robot - ou une TRES BONNE IDÉE de ce à quoi cela va ressembler, vous pouvez peut-être "associer" les leçons du manuel aux tâches de codage du robot. Mais laissez le manuel guider l'apprentissage.
Si vous forcez le codage, donnez aux étudiants des leçons très étroites et une exposition à la langue, alors je pense que, comme l'océan de codes que vous écrivez s'agrandit, ce sera comme si vous veniez d'apprendre à chiner et que vous vous noyerez parce que la VRAIE natation est requis.
Ce n'est pas une question de "devraient-ils apprendre le cout ou printf?" Il faut en apprendre suffisamment pour savoir comment écrire du code pour des tâches de programmation de robot données à résoudre.
S'il s'agissait d'une tâche de lecture, quels seraient les résultats si tout ce qu'ils savaient était constitué de phrases simples sujet-verbe et que seulement la moitié du vocabulaire que vous SAVEZ sera requise.
la source