Question

Je suis sur le point de commencer (avec d'autres programmeurs) une programmation & amp; club d'algorithmes dans mon lycée. Le langage de choix est le C ++ - désolé, je ne peux pas changer cela. Nous pouvons supposer que les étudiants n’ont que peu, voire aucune expérience des sujets susmentionnés.

Quels sont selon vous les concepts les plus fondamentaux sur lesquels je devrais me concentrer?

Je sais qu'enseigner quelque chose qui est déjà évident pour moi n'est pas une tâche facile. Je réalise que la toute première réunion doit faire l’objet d’une extrême attention - pour ne pas effrayer les étudiants - par conséquent, je vous le demande.

Modifier: J'ai remarqué que la principale différence entre les programmeurs et les débutants est "le mode de pensée du programmeur". - Je veux dire, conceptualiser des problèmes comme, vous savez, des algorithmes. Je sais que ce n’est qu’une question de pratique, mais connaissez-vous des exercices / concepts / choses susceptibles de stimuler le développement dans ce domaine?

Était-ce utile?

La solution

Rendez la programmation amusante!

Les sujets de discussion possibles sont les compétitions de programmation auxquelles votre club pourrait se tenir ou participer localement. Je participe à des concours de programmation au niveau universitaire (ACM) et je sais pertinemment qu'ils les ont également à des niveaux inférieurs.

Ce type d’événement peut réellement susciter un esprit de compétition et rapprocher les membres du club.

Les choses ne doivent pas toujours concerner la programmation non plus. Peut-être suggérer d'organiser une fête sur le réseau local où vous pourrez jouer à des jeux, discuter de la programmation, etc. pourrait également être une bonne idée.

Pour ce qui est des sujets à aborder qui sont liés à la programmation / aux algorithmes, je suggérerais, en tant que groupe, de résoudre certains de ces problèmes de programmation dans cet amorce de compétition de programmation " Défis de programmation " ;: lien Amazon

Ils commencent avec des problèmes de programmation assez simples et progressent lentement vers des problèmes nécessitant diverses structures de données telles que:

  • Piles
  • files d'attente
  • Dictionnaires
  • Arbres
  • Etc

La plupart des problèmes sont donnés en C ++.

Ils finissent par évoluer vers des problèmes plus avancés impliquant Graph Traversal et des algorithmes Graph populaires ( de Dijkstra , etc.), problèmes combinatoires, etc. Chaque problème est amusant et présenté sous forme de petit "récit". comme format. Soyez averti cependant, certains d'entre eux sont très difficiles!

Modifier: Pizza and Soda ne fait jamais de mal non plus lorsqu'il s'agit d'inciter les gens à assister aux réunions de votre club. Notre club ACM propose des pizzas à chaque réunion (une fois par mois). Même si la plupart d'entre nous se présentent encore, c'est un bon brise-glace. Surtout pour les nouveaux clubs ou membres.

Autres conseils

Le décomposer

Pour moi, la programmation a pour particularité de diviser les tâches en étapes suffisamment petites pour l'ordinateur . Cela varie selon la langue, mais vous devrez peut-être écrire une "boucle for for". il suffit de compter jusqu'à 100 prises pour s'y habituer.

Le " top-down " approche peut aider avec ce concept. Vous commencez par créer une fonction principale pour votre programme, comme

filterItemsByCriteria();

Vous n'avez aucune idée de la façon dont cela fonctionnera, vous devez donc le décomposer en étapes ultérieures:

(Remarque: je ne connais pas le C ++, il ne s'agit donc que d'un exemple générique)

filterItemsByCritera() {
  makeCriteriaList();
  lookAtItems();
  removeNonMatchingItems();
}

Ensuite, vous décomposez chacun de ces éléments. Bientôt, vous pourrez définir toutes les petites étapes nécessaires à l’établissement de votre liste de critères, etc. Lorsque toutes les petites fonctions fonctionneront, la plus grande fonctionnera.

C’est un peu le jeu que les enfants jouent où ils n'arrêtent pas de demander "pourquoi?" après tout ce que vous dites, sauf que vous devez continuer à demander "comment?"

Listes liées - une question classique lors d’un entretien et pour une bonne raison.

J'essaierais de travailler avec un sous-ensemble C sans essayer de commencer avec les objets OO. Cela peut être introduit une fois qu'ils ont compris certaines notions de base.

Salutations!

Je pense que vous avancez WAY en forçant une langue spécifique et en travaillant sur des sujets spécifiques ainsi qu'un curriculum. Il semble que vous (et certains des répondants) confondez les conseils. un club de programmation " avec "mener une classe de programmation". Ce sont des choses très différentes.

Je réunirais le groupe et ce dernier devrait décider de ce qu’ils veulent exactement sortir du club. Essentiellement, faites une "charte". pour le club. Ensuite (et seulement alors) pouvez-vous prendre des décisions telles que la langue / plate-forme préférée, la fréquence des réunions, ce qui se passera lors des réunions, etc.

Il peut s'avérer que la meilleure approche est un "sondage", dans lequel différentes langues / plateformes sont explorées. Ou il peut s'avérer que la meilleure approche est une approche "thématique", dans laquelle le sujet change régulièrement (comme un club de lecture) (ce mois-ci est un indicateur, le mois prochain est un tri, le suivant est la récursivité, etc.) puis des exemples et des discussions se déroulent dans différentes langues.

En passant, je considérerais un "agnostique de la langue" orientation pour le club. Encouragez les enfants à explorer différentes langues et plateformes.

Bonne chance et bon travail!

Eh bien, c'est un club de programmation, alors ça devrait être FUN! Donc, je dirais plonger dans l'expérience pratique tout de suite. Commencez par expliquer ce qu'est une méthode main (), puis demandez aux étudiants d'écrire un programme hello world. Améliorez progressivement le programme hello world afin qu’il dispose de fonctions et imprime les entrées de l’utilisateur.

Je dirais qu'il ne faut pas entrer dans l'algorithme trop rapidement pour les débutants, laissez-les d'abord jouer avec C ++.

Quelqu'un a mentionné ci-dessus, "rendre la programmation amusante". Il est intéressant aujourd'hui que les gens n'apprennent pas pour apprendre. La plupart des gens veulent la gratification instantanée .

Apprenez un peu de logique en utilisant la programmation. Cela aide à résoudre les problèmes. Les classements que j'ai dans la tête sont des jeux de devinettes.

  • Demandez-leur de créer un programme dont le nombre est compris entre 0 et 100.
  • Demandez-leur de faire un clone de black jack ... Je l’ai fait en mode de base: -

Créez des instructions sur papier.

  1. Expliquez les "œufs sur le plat". récit. Demandez aux auditeurs ce qu’ils feraient pour se faire des œufs au plat. Faites-leur noter le pas auquel ils pensent. Vous recevrez probablement moins de 5 étapes d'algorithme. Puis expliquez-leur le nombre d’étapes à suivre si vous souhaitez apprendre à un ordinateur à cuire des œufs. Quelque chose comme:
1) Go to the Fridge 
2) Open the fridge door 
3) Search for eggs 
4) If there are no eggs - go to the shop to buy eggs ( this is another function ;) ) 
5) If there are eggs - calculate how many do you need to fry 
6) Close the fridge door 
7) e.t.c. :)
  1. Commencez par les bases de la sémantique C-syntax e.t.c, et expliquez en parallèle les algorithmes très basiques tels que le tri à bulle.
  2. Une fois que l'auditif est familiarisé avec la programmation structurée (cela peut prendre plusieurs semaines ou plusieurs mois, en fonction de la fréquence des leçons), vous pouvez passer à C ++ et à la programmation orientée objet.

Le contenu de la programmation C ++ de Deitel & Deitel est une introduction décente, et les exercices proposés à la fin de chaque chapitre sont de jolis problèmes avec les jouets.

En gros, vous parlez de: - Structures de contrôle - les fonctions - tableaux - pointeurs et chaînes

Vous voudrez peut-être poursuivre avec une introduction au STL ("ok, maintenant que nous l'avons fait à la dure ... voici une option plus simple")

Commencez par leur faire comprendre un problème comme le tri, par exemple. Ceci est très basique et ils devraient pouvoir se comprendre assez rapidement. Une fois qu'ils ont vu le problème, présentez-leur les outils / la solution pour le résoudre.

Je me souviens de ce que je ressentais lorsque je montrais pour la première fois un exemple de fusion-tri. Je pouvais suivre toutes les étapes, mais à quoi était-ce que j'étais? Faites alors appel à une solution à un problème et ils comprendront mieux l'outil et la solution.

commencez avec un simple "" hello world" " programme. Cela introduit des notions de base telles que les variables, l'écriture dans un flux et le déroulement du programme.

Ajoutez ensuite de la complexité à partir de là (listes chaînées, fichier io, obtention des entrées de l'utilisateur, etc.).

La raison pour laquelle je dis de commencer par «Bonjour tout le monde», c'est parce que le jeune va pouvoir voir un programme en cours d'exécution très rapidement. C'est un retour presque immédiat, car ils auront écrit un programme en cours dès le début.

OMI, Big-O est l'un des concepts les plus importants que les programmeurs débutants doivent apprendre .

Organisez un concours de débogage. Fournissez des exemples de code contenant un bogue. Organisez un concours pour voir qui peut trouver le plus ou le plus rapide.

Il existe un excellent livre, Comment ne pas programmer en C ++, que vous pourriez utiliser pour commencer.

Vous apprenez toujours mieux des erreurs et je préfère apprendre des autres.

Cela permettra également à ceux qui ont peu d’expérience d’apprendre par code, même si le code ne fonctionne que presque.

En plus des réponses à cette question , certains éléments importants sujets à couvrir. Voici un exemple de la manière dont vous pourriez structurer les leçons.

Première leçon: Terminologie et syntaxe

Terminologie à couvrir: variable, opérateur, boucle (itération), méthode, mot réservé, type de données, classe

Syntaxe à couvrir: affectation, opération, si / alors / sinon, pour boucle, boucle, sélection, entrée / sortie

Deuxième leçon: Construction de l'algorithme de base

Couvrir quelques algorithmes simples, impliquant une entrée, peut-être une boucle for ou une boucle while.

Troisième leçon: Thèmes d'algorithme plus avancés

Cela concerne des choses comme la récursivité, la manipulation de matrice et les mathématiques de niveau supérieur. Vous n'êtes pas obligé d'entrer dans des sujets trop complexes, mais d'introduire suffisamment de complexité pour être utiles dans un projet réel.

Leçon finale: Projet de groupe

Créez un projet auquel les groupes peuvent participer.

Celles-ci ne doivent pas nécessairement être des leçons d'une journée. Vous pouvez répartir les sujets sur plusieurs jours.

Le pseudocode devrait être une toute première fois.

Edit: s’ils sont débutants en programmation totale, la première moitié serait consacrée à la programmation. Une fois que vous parvenez à un niveau où il est logique de parler d’algorithmes, le pseudocode devient alors primordial.

Merci pour vos réponses!

Et comment leur apprendreriez-vous la résolution de problèmes concrets?

Je connais un groupe d'étudiants qui connaissent la syntaxe C ++ et quelques algorithmes de base, mais ils ne peuvent pas appliquer les connaissances qu'ils connaissent lorsqu'ils résolvent de vrais problèmes - ils ne connaissent ni l'approche, ni le moyen de transcrire leurs pensées en un ensemble d'étapes strictes. Je ne parle pas d'approches «de haut niveau» telles que la programmation dynamique, gourmande, etc., mais d'un état d'esprit algorithmique de base.

Je suppose que c'est simplement à cause du processus d'apprentissage médiocre qu'ils traversaient. Dans d’autres sciences, en mathématiques par exemple, elles sont vraiment brillantes.

Ce n’est pas parce que vous connaissez les algorithmes que vous pouvez les implémenter et ce n’est pas parce que vous pouvez programmer que vous pouvez implémenter un algorithme.

Commencez simplement avec chaque sujet (gardez la programmation séparée de la conception des algorithmes). Une fois qu’ils maîtrisent chacun d’entre eux, commencez lentement à rassembler les deux concepts.

Wow. Le C ++ est l’un des pires langages possibles pour commencer, en termes de quantité de conneries sans rapport avec laquelle vous devez faire fonctionner quoi que ce soit (Java serait un peu moins bon, je suppose).

Lorsque vous enseignez aux débutants dans un environnement complexe, il est habituel de commencer par "voici un programme en C simple. Nous discuterons de ce que toute cette merde en haut du fichier est pour plus tard, mais pour l'instant, concentrez-vous sur les lignes entre 'int principal (void)' et la déclaration 'return', qui est l'endroit où tout le travail utile est accompli " ;.

Une fois que vous avez dépassé ce point, les concepts de base à couvrir incluent les structures de données de base (tableaux, listes chaînées, arbres et dictionnaires) et les algorithmes de base (tri, recherche, etc.).

Demandez à votre club d’apprendre à programmer dans n’importe quelle langue en enseignant les concepts du logiciel de construction. Au lieu d'exécuter une douzaine de licences d'achat pour Visual Studio, demandez aux étudiants d'utiliser des compilateurs, de créer des systèmes, des fichiers source, des objets et des bibliothèques afin de transformer leur code C en programmes. J’ai le sentiment que c’est vraiment le début et donne à ces enfants le pouvoir de comprendre comment créer des logiciels sur n’importe quelle plate-forme, sans béquilles sur lesquelles de nombreuses institutions d’enseignement aiment compter.

En ce qui concerne le langage de choix - félicitations - vous constaterez que C ++ est très riche en solutions de raccourcis mathématiques et en des millions de façons d’améliorer les performances de votre code (ou d’implémenter des modèles fantaisistes).

A la question: quand je commençais à programmer, je cherchais toujours à décomposer un problème de la vie réelle en plusieurs étapes, puis lorsque je voyais des similitudes entre les tâches ou les données qu’elles transformaient, je cherchais toujours à trouver un paresseux, plus facile, moyen plus moyen de le mettre en œuvre.

L’élégance est venue après pour apprendre des modèles et de vrais algorithmes.

Hank: Big O ??? vous voulez dire aux programmeurs débutants que leur code est de O (n ^ 2) et que le vôtre est de n log n ??

Je pouvais voir différentes façons de prendre ceci:

1) Eléments de base de la programmation. Que sont les instructions conditionnelles, par exemple commutateur et si / sinon? Que sont les déclarations de répétition, par exemple pour et tout boucles? Comment pouvons-nous les combiner pour qu'un programme soit la séquence d'étapes que nous voulons? Vous pouvez prendre quelque chose d'aussi simple que d'ajouter une facture d'épicerie ou de convertir des températures ou des distances d'un système métrique à l'autre, en chiffres impériaux ou inversement. Quels sont les types de variables de base comme une chaîne, un entier ou un double? Vous pouvez également utiliser l’algèbre booléenne pour une idée avancée ou peut-être apprendre à faire de l’arithmétique en base 2 ou 16, ce que certaines personnes trouvent facile et d’autres difficile.

2) Algorithmiquement, quels sont les blocs de construction similaires. Le tri est un sujet assez simple qui peut être largement discuté et analysé pour essayer de comprendre comment rendre ceci plus rapide que de simplement échanger des éléments qui semblent en panne si vous apprenez le Bubblesort, qui est la manière la plus mortelle de le faire.

3) Éléments de compilation et d'exécution. Qu'est-ce qu'une pile d'appels? Qu'est-ce qu'un tas? Comment la mémoire est-elle gérée pour exécuter un programme, par ex. les codes et les données? Comment pouvons-nous ouvrir et manipuler des fichiers? Qu'est-ce que la compilation et la liaison? Que sont les fichiers make? C’est peut-être simple, mais cela peut aussi nous ouvrir les yeux de voir simplement comment les choses fonctionnent, ce que le club peut couvrir la plupart du temps.

Ces deux prochains sont un peu plus difficiles, mais pourraient être amusants:

4) Discutez des idées différentes qui sous-tendent les algorithmes, telles que: 1) diviser pour régner, 2) programmation dynamique, 3) force brute, 4) création d’une structure de données, 5) réduction d’un problème à un problème similaire déjà résolu, par exemple Les nombres de Fibonacci sont un problème classique récursif à donner aux programmeurs débutants, et 6) L'idée d'être, "glouton", comme dans un exemple de changement décisif si vous étiez dans un pays où les dénominations des pièces sont composées de a, b et c. Vous pouvez également entrer dans des exemples de la théorie des graphes, comme un arbre couvrant de poids minimal si vous voulez quelque chose d'assez exotique, ou les vendeurs ambulants pour quelque chose qui peut être facile à décrire mais qui pose un problème.

5) Fonctions mathématiques. Comment programmeriez-vous une factorielle, qui est le produit de tous les nombres de 1 à n? Comment calculeriez-vous les sommes de différentes séries arithmétiques ou géométriques? Ou calculer le nombre de combinaisons ou de permutations d'éléments r à partir d'un ensemble de n? Soit un ensemble de points, approximez le polynôme qui répond à cette exigence, par exemple: dans un plan à 2 dimensions appelé x et y, vous pouvez donner 2 points et laisser les gens comprendre quelles sont la pente et l'interception y si vous avez déjà résolu des paires d'équations linéaires.

6) Listes pouvant être implémentées à l'aide de listes et de tableaux liés. Quel est le meilleur pour divers cas? Comment implémentez-vous les fonctions de base telles que insérer, supprimer, rechercher et trier?

7) Structures de données abstraites. Que sont les piles et les files d'attente? Comment construisez-vous et testez-vous les classes?

8) Pointeurs. Cela nous amène à des quantités énormes de sujets tels que: comment allouer / désallouer de la mémoire, qu'est-ce qu'une fuite de mémoire?

Ce sont mes suggestions pour différents points de départ. Je pense que commencer une discussion peut mener à des endroits intéressants si vous pouvez réunir quelques personnes qui ne vous dérange pas de parler du même sujet semaine après semaine dans certains cas, car le tri peut être un sujet énorme à couvrir si vous voulez obtenir dans les détails des choses.

Vous pourriez construire le projet TinyPIM à partir de & bibliothèque standard C ++ de Scratch " et puis, quand ça marche, commencez à concevoir vos propres extensions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top