Question d'origine
Je suis actuellement engagé dans l'enseignement de mon frère au programme. C'est un débutant total, mais très intelligent. (Et il veut vraiment apprendre). J'ai remarqué que certaines de nos sessions se sont enlisées dans des détails mineurs, et je ne me sens pas très organisé. ( Mais les réponses à ce message ont beaucoup aidé. )
Que puis-je faire de mieux pour lui enseigner efficacement? Existe-t-il un ordre logique que je peux utiliser pour parcourir concept par concept? Y a-t-il des complexités que je devrais éviter plus tard?
Le langage avec lequel nous travaillons est Python , mais les conseils dans n'importe quel langage sont les bienvenus.
Comment aider
Si vous en avez de bons, veuillez ajouter ce qui suit dans votre réponse:
- Exercices pour débutants et idées de projets
- Ressources pour enseigner aux débutants
- Screencasts / articles de blog / livres électroniques gratuits
- Imprimez des livres qui conviennent aux débutants
Veuillez décrire la ressource avec un lien vers celle-ci afin que je puisse y jeter un œil. Je veux que tout le monde sache que j'ai certainement utilisé certaines de ces idées. Vos soumissions seront regroupées dans cet article.
Ressources en ligne pour enseigner aux débutants:
- Une introduction douce à la programmation à l'aide de Python
- Comment penser comme un informaticien
- Alice: un programme 3D pour les débutants
- Scratch (Un système pour développer des compétences en programmation)
- Comment concevoir des programmes
- Structure et interprétation des programmes informatiques
- Apprendre à programmer
- Comment être programmeur chez Robert Read
- Microsoft XNA
- Création de la prochaine génération de pirates
- Conférences COMP1917 sur l'informatique supérieure par Richard Buckland (nécessite iTunes)
- Plongez dans Python
- Wikibook Python
- Project Euler - exemples de problèmes (principalement mathématiques)
- pygame - une bibliothèque python facile pour créer des jeux
- Inventez vos propres jeux informatiques avec Python
- Fondements de la programmation pour une prochaine étape au-delà des bases.
- Squeak par l'exemple
- Snake Wrangling For Kids (Ce n'est pas seulement pour les enfants!)
Livres imprimés recommandés pour les débutants
la source
Réponses:
J'ai dû travailler avec plusieurs programmeurs débutants (je n'ai jamais écrit de ligne de code) et je ferai un atelier après l'école avec des élèves du secondaire cet automne. C'est la chose la plus proche que j'ai à la documentation. C'est toujours un travail en cours, mais j'espère que ça aide.
1) FizzBuzz. Commencez avec des programmes en ligne de commande. Vous pouvez écrire des jeux ou des outils amusants très rapidement et vous apprendrez toutes les fonctionnalités du langage très rapidement sans avoir à apprendre les outils GUI au préalable. Ces premières applications devraient être suffisamment simples pour que vous n'ayez pas besoin d'utiliser de véritables outils de débogage pour les faire fonctionner.
Si rien d'autre, des choses comme FizzBuzz ne sont de bons projets. Vos premières applications ne devraient pas avoir à gérer les bases de données, le système de fichiers, la configuration, etc. Ce sont des concepts qui déroutent la plupart des gens, et lorsque vous apprenez simplement la syntaxe et les fonctionnalités de base du cadre, vous n'avez vraiment pas besoin de plus de complexité.
Quelques projets:
2) Projet simple Une fois qu'ils ont une bonne compréhension des fonctionnalités du langage, vous pouvez démarrer un projet (des jeux simples et amusants fonctionnent bien). Vous devriez essayer de terminer le premier projet dans les 6 à 12 heures. Ne passez pas de temps à le concevoir tôt. Laissez-les le concevoir même s'il craint. S'il tombe en morceaux, parlez de ce qui s'est passé et pourquoi il a échoué, puis choisissez un autre sujet et recommencez.
C'est là que vous commencez à introduire les capacités de débogage de vos outils. Même si vous pouvez voir le problème en lisant le code, vous devez leur apprendre à utiliser les outils, puis leur montrer comment vous pouvez le voir. Cela sert le double objectif d'enseigner les outils de débogage et d'enseigner comment identifier les erreurs sans outils.
Une fois, ou si, le projet devient fonctionnel, vous pouvez l'utiliser pour introduire des outils de refactoring. C'est bien si vous pouvez ensuite étendre le projet avec des fonctionnalités simples que vous n'avez jamais prévues. Cela signifie généralement une refactorisation et un débogage important, car très peu de gens écrivent même du code à moitié décent la première fois.
Quelques projets:
3) Projet réel Démarrez un projet réel qui peut prendre un certain temps. Utilisez le contrôle de source approprié et assurez-vous d'avoir un calendrier. Exécutez ce projet comme un vrai projet, si rien d'autre sa bonne expérience d'avoir à gérer les outils.
De toute évidence, vous devez ajuster cela pour chaque personne. La chose la plus importante que j'ai trouvée est de faire appliquer même les premières applications simples à ce qui intéresse la personne.
Quelques projets:
la source
Vous pouvez essayer d'utiliser Alice . C'est un programme 3D conçu pour être utilisé dans les classes de programmation d'introduction.
Les deux plus gros obstacles pour les nouveaux programmeurs sont souvent:
Alice utilise une interface glisser-déposer pour construire des programmes, évitant la possibilité d'erreurs de syntaxe. Alice vous permet de construire des mondes 3D et d'avoir votre contrôle de code (simples) personnages et animations 3D, ce qui est généralement beaucoup plus intéressant que d'implémenter des listes liées.
Les programmeurs expérimentés peuvent considérer Alice comme un jouet et se moquer de glisser-déposer des lignes de code, mais la recherche montre que cette approche fonctionne.
Avertissement: j'ai travaillé sur Alice.
la source
Je recommande Logo (alias la tortue) pour descendre les concepts de base. Il fournit un bon bac à sable avec une rétroaction graphique immédiate, et vous pouvez démontrer les boucles, les variables, les fonctions, les conditions, etc. Cette page fournit un excellent tutoriel.
Après Logo, passez à Python ou Ruby. Je recommande Python, car il est basé sur ABC, qui a été inventé dans le but d'enseigner la programmation.
Lorsque j'enseigne la programmation, je dois appuyer la suggestion d'EHaskins de projets simples, puis de projets complexes. La meilleure façon d'apprendre est de commencer par un résultat précis et un jalon mesurable. Il garde les leçons concentrées, permet à l'élève de développer des compétences, puis de s'appuyer sur ces compétences, et donne à l'étudiant quelque chose à montrer à ses amis. Ne sous-estimez pas le pouvoir d'avoir quelque chose à montrer pour son travail.
Théoriquement, vous pouvez vous en tenir à Python, car Python peut faire presque n'importe quoi. C'est un bon véhicule pour enseigner la programmation orientée objet et (la plupart) des algorithmes. Vous pouvez exécuter Python en mode interactif comme une ligne de commande pour avoir une idée de son fonctionnement, ou exécuter des scripts entiers à la fois. Vous pouvez exécuter vos scripts interprétés à la volée ou les compiler en binaires. Il existe des milliers de modules pour étendre la fonctionnalité. Vous pouvez créer une calculatrice graphique comme celle fournie avec Windows, ou vous pouvez créer un client IRC, ou autre chose.
XKCD décrit un peu mieux la puissance de Python:
Vous pouvez passer à C # ou Java après cela, bien qu'ils n'offrent pas beaucoup de choses que Python n'a pas déjà. L'avantage de ceux-ci est qu'ils utilisent la syntaxe de style C, que de nombreuses langues (j'ose dire la plupart?) Utilisent. Vous n'avez pas encore à vous soucier de la gestion de la mémoire, mais vous pouvez vous habituer à avoir un peu plus de liberté et moins de prise en main par l'interpréteur de langue. Python applique des espaces et des indentations, ce qui est agréable la plupart du temps mais pas toujours. C # et Java vous permettent de gérer votre propre espace blanc tout en restant fortement typé.
De là, la norme est C ou C ++. La liberté dans ces langues est presque existentielle. Vous êtes désormais en charge de votre propre gestion de la mémoire. Il n'y a pas de collecte de déchets pour vous aider. C'est là que vous enseignez les algorithmes vraiment avancés (comme mergesort et quicksort). C'est là que vous apprenez pourquoi «défaut de segmentation» est un mot maudit. C'est ici que vous téléchargez le code source du noyau Linux et regardez dans les Abysses. Commencez par écrire un tampon circulaire et une pile pour la manipulation de chaînes. Montez ensuite.
la source
Un bon cours sur le python est A Gentle Introduction to Programming Using Python . Tout est gratuit en ligne, et vous n'avez pas besoin d'être un uberstudent du MIT pour le comprendre.
la source
Package Python VPython - Programmation 3D pour Ordinary Mortal ( tutoriel vidéo ).
Exemple de code:
Balle rebondissante VPython http://vpython.org/bounce.gif
la source
Commencez avec les graphiques Turtle en Python.
J'utiliserais les graphiques de tortue fournis en standard avec Python. Il est visuel, simple et vous pouvez utiliser cet environnement pour introduire de nombreux concepts de programmation comme les appels d'itération et de procédure avant d'aller trop loin dans la syntaxe. Considérez la session interactive suivante en python:
En essayant d'accomplir les deux dernières missions, ils auront de nombreuses tentatives infructueuses, mais les échecs seront visuellement intéressants et ils apprendront rapidement en essayant de comprendre pourquoi cela n'a pas attiré ce qu'ils attendaient.
la source
L'essentiel est que la personne en question ait un problème qu'elle veut résoudre. Si vous n'avez pas de programme que vous voulez écrire (et quelque chose de sensé et bien défini, pas "je veux écrire le prochain tremblement de terre!"), Alors vous ne pouvez pas apprendre à programmer, parce que vous n'avez rien pour vous motiver . Je veux dire, vous pourriez lire un livre et avoir une compréhension approximative de la syntaxe et de la sémantique d'un langage, mais tant que vous n'aurez pas un programme que vous voudrez écrire, vous ne saisirez jamais l'ortie.
Si cet élan existe, tout le reste n'est que des détails mineurs.
la source
Je ne sais pas si quelqu'un a mentionné cela ici, encore, mais vous pourriez vouloir vérifier Zed Shaw de savoir Python the Hard Way
J'espère que cela t'aides
la source
http://tryruby.hobix.com/">Try Ruby (dans votre navigateur)
la source
Comment concevoir des programmes
Structure et interprétation des programmes informatiques . Conférences vidéos sur http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/
la source
Ceci est un livre fantastique que mes petits frères avaient l'habitude d'apprendre:
http://pine.fm/LearnToProgram/
Bien sûr, la chose la plus importante est de commencer un programme réel et utile de quelque sorte IMMÉDIATEMENT après avoir terminé le livre.
la source
S'il est intéressé, les petits détails ne sont-ils pas les bonnes parties? En utilisant python, vous en avez déjà coupé l'interface graphique afin que la confusion ait disparu. Pourquoi ne pas choisir un projet, un jeu ou quelque chose, et le mettre en œuvre. Le jeu de devinettes de nombres hi-lo classique peut être simplement implémenté à partir de la ligne de commande dans 20-30 lignes de code (selon la langue bien sûr) et vous donne des variables, des conditions, des boucles et des entrées utilisateur.
la source
Je le laisserais juste écrire des tonnes de code. Laissez-le conduire tout ce que vous faites et soyez simplement disponible pour répondre aux questions.
Croyez-le ou non, après quelques mois d'écriture de tonnes de code merdique, il va commencer à avoir l'idée et à écrire de meilleurs programmes. À ce stade, vous pouvez vous enliser dans les détails (mémoire, etc.) et également parler des principes généraux de conception.
J'ai entendu dire que ce qui sépare les grands artistes des médiocres, c'est que chaque fois qu'ils pratiquent, ils s'améliorent sur quelque chose, aussi petit soit-il. Laissez votre frère s'entraîner et il s'améliorera à chaque fois qu'il s'assoit au clavier.
la source
Tout d'abord, commencez comme tout le monde: avec un programme Hello World . C'est simple et cela leur donne une idée de base de la disposition d'un programme. Essayez de vous souvenir de la première fois que vous avez programmé et de la difficulté de certains concepts - commencez simplement.
Après Hello World, passez à la création de variables de base, l'arithmétique, puis à la logique booléenne et aux instructions if / else. Si vous avez l'un de vos anciens manuels de programmation, consultez quelques-uns des premiers exemples et faites-le les parcourir. N'essayez simplement pas d'en introduire trop en une seule fois, sinon ce sera écrasant et déroutant.
la source
Quelque chose que vous devriez faire très attention lorsque vous enseignez à votre frère à programmer, c'est qu'il ne compte pas trop sur vous. Souvent, quand je me retrouve à aider les autres, ils commencent à penser à moi comme un livre de réponses à toutes leurs questions et au lieu d'expérimenter pour trouver une réponse, ils me demandent simplement. Souvent, le meilleur professeur est l'expérimentation et chaque fois que votre frère a une question comme "Que se passera-t-il si j'ajoute 2 à une chaîne?" vous devriez lui dire de l'essayer et de voir par lui-même. J'ai également remarqué que lorsque je ne peux pas transmettre un concept à quelqu'un, cela aide de voir un exemple de code où nous pouvons regarder chaque segment individuellement et l'expliquer morceau par morceau. En passant, les débutants en programmation ont souvent des problèmes avec l'idée d'une programmation orientée objet,
la source
J'enseignais la programmation et votre frère a un avantage principal sur la plupart de mes étudiants qu'il veut apprendre :)
Si vous décidez d'aller avec C, un ami a un site qui a le genre de programmes que ceux des générations plus anciennes se souviennent comme des entrées de base. Les plus complexes d'entre eux utilisent des ncurses qui nient en quelque sorte leur utilisation comme aide pédagogique, mais certains d'entre eux sont de minuscules petites choses et vous pouvez apprendre des charges sans qu'on vous les enseigne.
Personnellement, je pense que Python et Ruby feraient d'excellentes premières langues.
EDIT: la liste des affectations de programmation pour débutants apparues pendant la nuit pourrait être exactement ce que vous recherchez.
la source
Cela dépend vraiment du style d'apprentissage de votre frère. Beaucoup de gens apprennent plus vite en se salissant les mains et en s'y mêlant, en cristallisant les concepts et la vue d'ensemble à mesure qu'ils progressent et développent leurs connaissances.
Moi, je préfère commencer par la vue d'ensemble et descendre dans le vif du sujet. La première chose que je voulais savoir, c'était comment tout cela s'enchaînait, puis tout ce charabia orienté objet, puis les classes et les instances, etc. J'aime connaître les concepts sous-jacents et un peu de théorie avant d'apprendre la syntaxe. J'ai eu un petit avantage car j'ai écrit quelques jeux en BASIC il y a 20 ans mais rien de plus depuis.
Il est peut-être utile d'observer un processus de production en commençant par un énoncé de mission global, puis un plan et / ou un organigramme, puis d'élaborer un pseudo-code (en se penchant vers la syntaxe que vous utiliserez finalement) avant d'écrire réellement le code.
La règle d'or ici est de déterminer le style d'inclinaison de votre élève.
la source
Si votre frère a accès à iTunes, il peut télécharger des conférences vidéo d'un cours d'initiation à l'informatique donné par Richard Buckland à l'Université de New South Wales. Il est un instructeur attrayant et couvre les bases de l'informatique et du langage C. Si rien d'autre, dites à votre frère de jouer les vidéos en arrière-plan et certains concepts pourraient pénétrer par osmose. :)
COMP1917 Higher Computing - 2008 Session 1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444
Si le lien ne fonctionne pas, voici un chemin:
Accueil -> iTunes U -> Ingénierie -> COMP1917 Higher Computing - 2008 Session 1
la source
il y a un wikibook qui est assez bon pour apprendre le python .
Je ne sais pas comment sont les wikibooks pour d'autres langues, mais j'ai personnellement appris le python à partir du wikibook comme c'était en février 2007
ps - si vous n'êtes pas familier avec les wikibooks , c'est essentiellement la version wikipedia de la création de livres. c'est un peu difficile à décrire, mais si vous consultez quelques livres là-bas, vous verrez comment cela fonctionne
la source
Programmation Python pour le débutant absolu
Programmation Python pour la couverture absolue pour débutants http://safari.oreilly.com/images/1592000738/1592000738_xs.jpg
la source
Je pense que Python est une excellente idée. Je lui donnerais quelques tâches de base à faire par lui-même et lui dirais que toutes les impasses qu'il frappe peuvent probablement être résolues par un voyage sur Google. Pour moi, au moins, résoudre un problème par moi-même l'a toujours fait mieux que quelqu'un me disant la solution.
Quelques projets possibles (sans ordre particulier):
Simulateur de retournement de pièces. Laissez l'utilisateur saisir le nombre d'essais souhaité pour le retournement de pièces. Exécutez-le et affichez les résultats ainsi que le pourcentage de têtes ou de queues.
Créez un convertisseur de température avec un menu qui prend l'entrée de l'utilisateur pour choisir le type de conversion que l'utilisateur veut faire. Après avoir choisi la conversion et l'avoir fait, elle devrait revenir au menu principal.
Voici un exemple de convertisseur étendu avec la même idée: http://pastebin.org/6541
Créez un programme qui prend une entrée numérique et affiche la note en lettres à laquelle il se traduira. Il finira par évaluer les entrées par rapport aux instructions if et elif pour trouver où elles se situent.
Faites un quiz simple qui passe par plusieurs choix multiples ou remplissez les questions vides. À la fin, il affichera comment l'utilisateur a fait. Il peut choisir toutes les questions qu'il veut.
Prenez une entrée d'un certain nombre (vraisemblablement grand) de pièces de monnaie et convertissez-le en plus grandes dénominations. Par exemple, 149 centimes = 1 dollar, 1 quart, 2 centimes et 4 centimes.
Créez un gestionnaire de listes simple. Pouvoir ajouter / supprimer des listes et ajouter / supprimer des entrées dans ces listes. Voici un exemple de gestionnaire de liste de Noël: http://pastebin.org/6543
Créez un programme qui va construire puis tester si les nombres saisis forment un carré magique (avec un tableau 2D). Voici un exemple de code, mais il devrait vraiment imprimer le carré à chaque étape afin de montrer où l'utilisateur est en termes de construction du carré: http://pastebin.org/6544
Je suggérerais également de faire des choses avec xTurtle ou un autre module graphique pour mélanger les choses et l'empêcher de devenir ennuyeux. Bien sûr, c'est beaucoup de la pratique de la programmation et non du script pour lequel beaucoup de gens utiliseraient vraiment python, mais les exemples que j'ai donnés sont à peu près directement tirés de mon apprentissage via python et cela a très bien fonctionné pour moi. Bonne chance!
la source
Rendez-le juste amusant!
Étonnamment, Scala pourrait être le plus facile si vous essayez Kojo
la source
Si votre frère aime les puzzles, je recommanderais Python Challenge . Je ne l'utiliserais pas comme un outil pédagogique formel dans un tutoriel 1 contre 1, mais c'est quelque chose qu'il peut faire lorsque vous n'êtes pas ensemble pour vous mettre au défi et vous amuser.
la source
Défi Python
la source
Après avoir parcouru quelques livres électroniques gratuits, j'ai trouvé que le meilleur livre pour apprendre à programmer était Head First Programming publié par O'Reily Press. Il utilise Python comme langage et vous donne des programmes sur lesquels travailler dès le début. Ils sont tous plus intéressants que «Hello World». Cela vaut bien l'argent que j'ai dépensé, et comme il est sorti un peu, vous pourrez peut-être trouver une copie d'occasion moins chère sur Ebay ou Amazon.
la source
Si vous voulez enseigner les bases de la programmation, sans être spécifique au langage, il existe une application appelée Scratch qui a été créée dans le MIT. Il est conçu pour aider les gens à développer leurs compétences en programmation. Au fur et à mesure que les utilisateurs créent des projets Scratch, ils apprennent à créer des conditions, des boucles, etc.
la source
Je pense qu'une fois qu'il a les bases (variables, boucles, etc.), vous devriez essayer de l'aider à trouver quelque chose de spécifique qui l'intéresse et l'aider à apprendre les nécessités pour y arriver. Je sais que je suis beaucoup plus enclin et motivé à faire quelque chose si cela m'intéresse. Aussi, assurez-vous de le laisser lutter contre certains des problèmes les plus difficiles, rien n'est plus satisfaisant que le moment où vous le résolvez par vous-même.
la source
J'ai appris en résolvant les problèmes d'une manière indépendante du langage en utilisant des organigrammes et PDL (Program Design Language). Après quelques semaines, j'ai appris à convertir le PDL que j'avais écrit dans une langue. Je suis content d'avoir appris de cette façon parce que j'ai passé la majorité de mes années à programmer, à résoudre des problèmes sans être lié à une langue. Le langage que j'utilise a toujours été un détail d'implémentation et ne faisait pas partie de la conception.
Devoir résoudre le problème en le décomposant en étapes de base est une compétence clé. Je pense que c'est l'une des choses qui sépare ceux qui peuvent programmer de ceux qui ne le peuvent pas.
En ce qui concerne la façon dont vous abordez l'ordre des concepts d'une langue, je pense que le moyen le plus simple est de décider que c'est d'avoir un projet en tête et d'aborder les concepts au besoin. Cela vous permet de les appliquer au besoin sur quelque chose que vous souhaitez faire. Lors de l'apprentissage d'une langue, il est bon d'avoir plusieurs projets simples à l'esprit et quelques-uns avec une complexité progressive. Décider de ceux-ci vous aidera à définir les concepts nécessaires et leur ordre.
la source
Je recommanderais également de regarder certains screencasts - ils sont généralement créés dans le contexte d'une technologie spécifique et non d'un langage, bien que si du code Python s'affiche, cela suffira :). Le fait est - ils sont créés par de bons programmeurs et regardent à quel point un bon programme de programmeurs est une bonne chose. Vous et votre frère pourriez également faire de la programmation par les pairs, ce pourrait être une meilleure idée. N'oubliez pas d'expliquer POURQUOI vous faites quelque chose de cette façon et non de cette façon. Je pense que la meilleure façon d'apprendre la programmation est à partir de bons exemples et essayez de ne même pas voir les mauvais.
la source
Robert Read a écrit un guide utile, Comment être programmeur , qui couvre un large éventail de problèmes de programmation qu'un débutant trouverait utile.
la source