J'enseigne périodiquement une introduction au cours de programmation utilisant Java . Je veux donner à mes étudiants des devoirs passionnants auxquels ils peuvent se rapporter ou trouver intéressants . À tout le moins, je veux des affectations qui ont du sens et qui ont une cohésion interne (par exemple, certains très mauvais exercices de programmation semblent artificiels juste pour que vous deviez utiliser la construction de programmation la plus récente couverte).
Pour vous donner une idée de la portée, voici ce qui est couvert :
- Les affectations doivent être en Java, l'utilisation d'une bibliothèque externe peut être effectuée, mais il faudrait que ce soit une API simple et non un framework complet
- Variables, primitives et chaînes
- Entrée et sortie de la console
if
,for
,while
- Opérateurs arithmétiques et logiques
- Graphiques simples avec dessin de lignes et de formes
- Méthodes statiques
- Tableaux unidimensionnels
Les étudiants n'entreront pas dans des sujets avancés (par exemple, pas de récursivité, pas d'accent sur l'héritage). Ainsi, je ne recherche pas de projets complexes: "Demandez-leur d'écrire un compilateur C. Je l'ai fait quand j'avais 5 ans et c'était la seule façon d'apprendre!"
Si vous avez des idées qui sont plus avancées que la portée, veuillez les publier sur la question «difficile» liée ci-dessous, et non celle-ci.
Au lieu de cela, ce que je recherche, ce sont des idées intéressantes qui peuvent être accomplies dans un programme court. Par exemple:
Les élèves peuvent écrire une version console du générateur "Star Wars Name" . C'est effectivement lire des cordes et utiliser
substring
, mais je pense que c'est amusant. Une variante similaire serait un programme " Mad Libs ". J'ai utilisé celui-ci il y a cinq ans, et il est peut-être déjà «périmé».À l'aide de certains trigonomètres qui leur sont fournis, les élèves peuvent dessiner des polygones réguliers et créer des formes en spirale intéressantes.
Il n'est pas non plus exclu d'utiliser une classe d'animation simple avec la plupart du code qui leur est fourni. Et si vous connaissez un service Twitter ou Facebook accessible avec une simple API, je serais très intéressé de le savoir.
Veuillez noter que cette question est différente de la question «Questions Java difficiles pour les débutants ». Je ne cherche pas un défi en soi, juste intéressant. Je pense que si les étudiants travaillent sur quelque chose où ils peuvent facilement répondre "pourquoi quelqu'un voudrait-il jamais programmer cela?" alors ils apprendront mieux.
Même des problèmes simples comme le calcul de miles par gallon peuvent être bons. Bien que, s'il existe un moyen de le mettre à jour pour être plus pertinent, tant mieux. Si vous avez un exercice ailleurs (un livre ou un site Web), veuillez citer la source.
Pour vous aider à penser à la première année typique aujourd'hui, consultez la liste Beloit Mindset , pour de nombreux exemples qui vous feront sûrement vous sentir vieux.
la source
Réponses:
Compte tenu des contraintes, je suggère d'implémenter une version de Hangman. Cela permettrait aux étudiants de démontrer toutes les techniques que vous leur présentez, sans être trop complexes.
Il peut également être utilisé comme projet en cours de développement au fur et à mesure de l'avancement du cours. par exemple, une fois que vous avez couvert les chaînes et les variables commence comme une version texte
par exemple
puis introduisez des boucles pour supprimer l'élément couper-coller du code pendant le décompte des 10 suppositions ... jusqu'à ce que les graphiques en ligne et le bâton soient suspendus / enregistrés à la fin du cours de 5 semaines.
Comme la plupart des autres personnes qui ont de l'expérience dans le recrutement et l'interview de programmeurs, cela me fait vraiment grincer de dents que ce niveau de scolarité est nécessaire à l'université, mais hélas, il continuera probablement à être nécessaire jusqu'à ce que les écoles traitent la programmation comme un sujet sérieux au même titre que mathématiques ou sciences
la source
Cela ressemble à un jeu d'aventure texte pourrait être une tâche formidable quelque part au milieu du semestre. J'ai eu un cours qui nous a fait jouer à Colossal Cave Adventure puis créer notre propre jeu. Cela m'a appris beaucoup de concepts de base dès le début, et c'était tellement amusant de faire en sorte que tout le monde s'y mette.
la source
Que diriez-vous d'utiliser un problème ou deux sur http://projecteuler.net/ Certains d'entre eux sont assez intéressants et on pourrait voir l'avantage d'écrire un programme pour les résoudre. Ils sont suffisamment petits pour que plusieurs puissent être effectués en tant qu'affectations. Un autre que j'aime utiliser est de trouver des mots à 1,00 $. Chaque lettre de l'alaphabet vaut sa position en centimes, c'est-à-dire a = 1, b = 2. Combien de mots de 1,00 $ pouvez-vous trouver? Cela peut impliquer des entrées / sorties de fichiers (lecture dans un dictionnaire), des tableaux, des boucles, etc.
la source
Implémentez un jeu Monopoly. Le monopole a une séquence évidente et se prête très facilement à la division en fonctions. Il ne nécessite également qu'un tableau unidimensionnel et quelques classes de base. La logique est suffisamment simple pour que les élèves réfléchissent davantage au «comment» que au «quoi», et cela se traduit par quelque chose qui peut être démontré aux autres.
Donnez-leur un fichier chiffré qui a été chiffré avec une règle réversible et demandez-leur d'écrire un décodeur (faites-le assez simple cependant). Cela donne une incitation supplémentaire à le résoudre en raison du mystère du contenu du message.
Je ne sais pas pourquoi vous ne couvrez que des tableaux unidimensionnels et non des matrices (ils ne sont vraiment pas si différents), mais si vous êtes prêt à inclure cela dans le jeu de la vie de Sylabus Jon Conway est également relativement facile et se traduit par quelque chose amusement.
Un jeu comme les échecs nécessite une certaine réflexion mais reste dans les limites de ce qu'un débutant peut faire avec un héritage minimal (des pièces spécifiques héritent d'une pièce de classe générale, et le tableau contient des objets de type pièce), et des tableaux 2D (vous pouvez choisir de simplifiez-le en n'exigeant pas de mettre en œuvre des éléments durs comme la détection des stelmates ou l'incapacité à roquer si des pièces ennemies menacent le chemin du roque).
la source
Nous avons créé pas mal de projets avec juste des E / S, des fonctions et des opérateurs conditionnels à l'école. Tout est fait avant d'apprendre la programmation orientée objet. Ces projets avancent lentement pour être de plus en plus difficiles. Autant dire que les 4 heures que nous avions chaque semaine n'étaient pas suffisantes vers la fin de l'année.
Tous ces projets ont été réalisés avec juste des fonctions et des E / S:
Un jeu qui apprend. Vous prenez un certain nombre de bâtons, le PC prend un certain nombre de bâtons. Répéter. Le dernier qui tient un bâton perd. Nous avons dû créer un programme d'auto-apprentissage simple qui s'est amélioré après chaque match. Bon exemple pour apprendre les tableaux 2D.
Un disjoncteur de code. Vous connaissez le cryptage César, choisissez une lettre et ajoutez la valeur de la lettre à chaque lettre de votre mot. Par exemple, key = 'a' et le mot = "secret". Cela deviendrait "tfdsfq". Cela peut être fait en lisant le fichier puis en créant un tableau de fréquence pour chaque lettre. Vous lisez également dans une Bible en anglais. Ensuite, vous pouvez simplement voir que la lettre la plus utilisée dans l'alphabet anglais est un «e» et le résoudre. Défi supplémentaire: utilisez une clé comme 'ab' qui était notre mission. Bon exercice pour comprendre les E / S.
Un fabricant de codes à barres. Ce programme était un exercice pour appeler une bibliothèque externe. Vous avez obtenu un code et avez dû générer une image avec le code à barres. Une bibliothèque externe a été utilisée pour générer l'image.
Un algorithme génétique pour résoudre le problème des vendeurs ambulants. C'était un projet plus avancé pour 2 ou 3 personnes. Vous commencez avec un itinéraire aléatoire et cet itinéraire s'améliore tout le temps jusqu'à ce que vous ayez un «bon itinéraire». Bonus: créez une carte avec l'itinéraire.
Un programme de compression lzw fonctionnel . C'était le dernier projet de 4 personnes. Les paramètres étaient assez simples. "Zip file.txt file.zip" ou quelque chose de similaire. Projet amusant mais la compréhension de l'algorithme lzw a pris du temps.
la source
Une calculatrice serait un bon projet pour apprendre les opérations arithmétiques. Vous pouvez en faire une simple application console basée sur un menu ou une interface graphique. Quatre fonctions (+, -, *, /) pour commencer, avec des points supplémentaires pour des choses plus complexes comme la racine carrée, etc.
Pour la gestion des chaînes, je suggère quelques problèmes de validation. Les adresses e-mail me viennent à l'esprit - les laisser incontrôlées peut entraîner des trous d'injection SQL ou d'autres choses, et elles sont relativement simples à valider. Pour l'ajout, peut-être avoir un programme qui peut prendre les noms, prénoms et noms de famille et les enchaîner avec des espaces, et aussi prendre un nom complet et l'analyser dans chaque composant. Le premier est utilisé plus que le second dans la vie réelle, mais je n'ai pas pu penser à un autre scénario d'analyse qui serait assez simple.
Pour illustrer les méthodes statiques, vous pouvez attribuer un problème de recherche d'e-mails. Avoir un fichier de noms et de courriels, et le constructeur statique pourrait mettre les noms / courriels dans une liste, avec une méthode statique pour trouver le courriel pour un nom donné.
J'espère que cela vous donnera quelques idées! Bonne chance avec ta classe.
la source
Une chose très intéressante et cool pour une mission est d'écrire une implémentation de Game of Life de Conway en 2D. Il correspond très bien aux structures de données de base du tableau, c'est amusant et assez facile à faire, mais nécessite encore une certaine réflexion. Cela peut également ouvrir la curiosité et l'expérimentation (AI).
Les étudiants avancés peuvent écrire une version en 3D pour des points supplémentaires.
la source
Je voudrais répéter sur un générateur de nombres premiers.
Affectations
la source
J'utilise la bibliothèque ACM pour aider les élèves d'introduction à créer des graphiques et des jeux simples. Nous avons pu faire des jeux de base à deux joueurs basés sur les clics avec rien de plus que les compétences que vous avez décrites. Cette semaine, ils jouent au jeu Fox and Hounds .
J'ai essayé de rester loin des E / S de la console aussi longtemps que possible. C'est un concept étranger pour de nombreux étudiants de nos jours, car ils ont tous grandi avec des interfaces graphiques. Je me concentre donc sur MVC, obtenant le modèle correct et ajoutant l'interface graphique uniquement après avoir testé leur modèle. Les tests sont effectués via des tests unitaires automatisés et le pavé de code dans BlueJ . Non
public static void main()
, jamais.la source
J'ai enseigné l'intro au siècle dernier, et c'était BASIC, mais comme vous, je voulais que les étudiants se lancent dans un projet amusant de leur propre initiative. J'ai donc suggéré un tas de possibilités:
... ou ce que les élèves ont pensé. Ils venaient me voir et me disaient "que dirais-tu d'un programme pour faire du XYZ?" et je dirais toujours "Génial", puis peut-être les guider un peu pour ne pas compliquer les choses.
Habituellement, leurs projets se résumaient à quelques centaines de lignes de code, et ils l'ont toujours apprécié.
PS J'ai donné cette tâche après que les étudiants étaient compétents avec les structures de contrôle de base, les E / S, les tableaux et les fichiers séquentiels. C'était un projet à terme, une partie importante de leur grade, et j'avais des affectations intermédiaires, comme un aperçu à mi-chemin, donc ils n'ont pas essayé de tout faire à la fin et de heurter un mur. Je voulais les faire participer le plus tôt possible au semestre, quand ils avaient suffisamment de compétences pour commencer, généralement vers la semaine 6 ou 8.
la source
J'ai demandé à un enseignant d'écrire un programme pour lequel vous avez écrit des modules. En gros, c'était un jeu et il fallait écrire un algo pour le résoudre, tout était là pour le rendre graphique et joli et bien fonctionner. Vous devriez peut-être écrire votre propre cadre de jeu et leur donner des outils de base qui sont des versions simplifiées de choses intéressantes qu'ils peuvent faire plus tard en dehors de la boîte dans laquelle vous les avez placés.
la source
Dans mon cours d'introduction, trois projets m'ont frappé
Écrivez un programme pour afficher un aléatoire peinture Mondrian
Écrire la première partie d'un jeu BrickBreaker, faire rebondir la balle dans une zone définie
Écrire un jeu d'aventure basé sur du texte
De ma classe d'algorithmes
Implémenter un triangle de Serpinski
Ces quatre projets m'ont permis de bien comprendre le traitement des chaînes, la randomisation, les graphiques, la récursivité et l'animation.
la source
Est-ce que tous les élèves de la classe CS sont majeurs? Je suppose que non. Je proposerais des affectations qui sont adaptées aux majors de la classe.
Exemples:
Les étudiants en art pourraient écrire un programme qui prend les dimensions d'un morceau de toile et un cadre pour calculer la quantité de toile ne serait pas disponible pour la peinture (en raison de l'emballage et de l'agrafage de la toile autour du cadre).
Les étudiants Econ pouvaient calculer l'intérêt composé sur un article.
Les étudiants en mathématiques pouvaient choisir des problèmes dans Project Euler.
la source
Au lycée, j'ai suivi un cours de programmation d'introduction et nous avons utilisé Karel J. Robot . Il fournit une interface pour visualiser votre robot et dispose d'un ensemble très basique de capteurs et de méthodes de mouvement que vous devez étendre pour lui permettre de faire des choses intéressantes. Je pense que c'est bien parce que les robots sont faciles à comprendre pour les personnes qui n'ont pas encore compris la différence entre les logiciels.
Il y a aussi Processing , que je viens de découvrir, qui a été initialement conçu pour enseigner la programmation, et c'est aussi en java.
la source
Je vais être le dissident ici. Je pense que vous devriez leur donner des problèmes de type entreprise valides pour résoudre pas des jouets. S'ils ne sont pas suffisamment sérieux pour être intéressés et motivés par le genre de travail qu'ils feront en tant que professionnel, je préfère que vous les abandonniez dans le cours d'introduction. Le vrai travail ne consiste pas à faire des trucs sympas, il s'agit de répondre aux besoins du client. J'ai également vu beaucoup de gens qui ne peuvent pas faire le saut entre ce qu'ils apprennent dans un jeu et l'utilisation des mêmes techniques dans la programmation d'entreprise.
Chaque développeur principal et gestionnaire d'embauche que je connais est dégoûté de la qualité des récents diplômés. Essayez de vous concentrer sur ce dont ils ont besoin pour apprendre à travailler dans le monde réel et oubliez de le rendre amusant.
la source
Une mission pour construire un widget stupide sur leurs téléphones mobiles. Quelque chose qu'ils pourraient montrer à leurs amis. J'ai un téléphone AT&T très bon marché et il prend des fichiers jar en quelque sorte.
la source
Les tâches les plus importantes que j'ai vues obligent les gens à réfléchir à quelque chose qu'ils n'auraient pas envisagé autrement. Quelque chose de complètement en dehors du matériel de cours simple, quelque chose qui semble impossible. Quelque chose qui a plusieurs solutions valides.
Quelques-uns qui m'ont impressionné:
IA Roshambo (utilisées dans le cours d'IA à l'UOA). Une fonction simple qui renvoie -1, 0, 1 pour la roche, le papier, les ciseaux. Les IA sont opposées les unes aux autres et les statistiques sont collectées par un programme utilitaire agrégé. Cette mission surprend constamment les gens par le nombre d'approches viables (et par celles qui fonctionnent si mal).
Problèmes de tri simples avec des caractéristiques impossibles. Triez un fichier de longueur infinie avec une mémoire finie. Ce problème a ébranlé ma base de pensée dans les algorithmes. Il existe de nombreux problèmes connexes: des moyennes fenêtrées sur des données de longueur infinie, etc., chacune force une solution à quelque chose d'apparemment impossible.
Problèmes de simulation qui semblent triviaux. Simulations de circulation (véhicule, réseau), simulations de voitures de course (gauche, droite, plus rapide, plus lente), simulations d'épicerie.
Problèmes de réseautage (une grande faiblesse chez les diplômés avec qui j'ai travaillé ces dernières années). Problèmes de mise en réseau des pairs avec les ordinateurs de poche, par exemple, prouvant la complexité des problèmes de n-sync, des mises à jour des pairs, de la confiance des pairs, etc.
Peu de langues (autre faiblesse des récents diplômés). Développer un petit langage pour une IA de jeu simple (dames, roshambo, tanks, CSS mojo, bots Twitter). La réflexion sur les concepts de conception, d'interprétation et d'actions langagières est fondamentale.
la source