If you're seeing this message, it means we're having trouble loading external resources on our website.

Si vous avez un filtre web, veuillez vous assurer que les domaines *. kastatic.org et *. kasandbox.org sont autorisés.

Contenu principal

Planifier un projet de programmation

Devenir programmeur, ce n'est pas seulement apprendre la syntaxe et les concepts d'un langage de programmation. C'est déterminer comment utiliser ces connaissances pour faire des programmes. Vous en avez déjà réalisés beaucoup en suivant ce cours, dans les défis et les projets, mais vous devez maintenant trouver des idées pour de nouveaux (des idées qui vous excitent particulièrement) et essayer de les concrétiser.
Vous ne saurez probablement pas tout ce qui est nécessaire à votre programme au moment où vous le commencerez, et c'est normal. Vous serez motivé pour apprendre de nouvelles choses grâce à la volonté d'aboutir au résultat que vous recherchez. Les programmeurs sont constamment en train d'apprendre des choses pour leurs nouveaux projets, et c'est en partie pour cela qu'on aime tant cette activité.
Entrons dans le processus de planification d'un projet :

1. Que voulez-vous faire ?

Quand j'ai commencé à programmer, j'étais tout le temps en train de penser à de nouveaux programmes à réaliser et je faisais une liste. J'étais absorbé par ma créativité et mon cerveau était en ébullition. Si vous aimez cela, alors vous avez probablement déjà une idée de ce que vous voulez faire, et peut-être même avez dressé votre propre liste.
Si vous n'avez pour l'instant pas d'idées, alors vous trouverez ici quelques questions afin de vous aider dans votre réflexion :
  • Quel est votre jeu préféré : jeu d'arcade, jeu de plateau, jeu de sport ? Pouvez-vous en faire une version simplifiée et numérique ? Pouvez-vous l'arranger légèrement, comme lui mettre un thème ou des personnages différents ?
  • Quelles sont vos autres matières préférées à l'école ? Si vous aimez l'art, pourriez-vous faire un programme artistique ? Si vous aimez l'histoire, que pensez-vous d'une chronologie interactive ? Si vous aimez les sciences, pourquoi pas une simulation scientifique ?
  • Quelle est votre émission de télévision ou votre film favori ? Pourriez-vous réaliser la version numérique d'une scène ou d'un personnage s'y rapportant ? Peut-être faire un jeu en se basant dessus ?
  • Un gadget réel que vous adorez ? Pourriez-vous concevoir une simulation de celui-ci ?
Dès que vous avez sélectionné une idée, vous devez en faire une description par écrit. Par exemple, si je décide de faire un clone de "Breakout", parce que c'est mon jeu d'arcade rétro préféré, j'écrirai :
Breakout : un jeu dans lequel vous dirigez une raquette en bas de l'écran pour taper sur une balle qui rebondit, vers le haut et sur les angles, et qui cassent les briques qu'elle croise sur son chemin. Le but est de détruire toutes les briques, en évitant de rater trop souvent la balle.
Vous étofferez cette description plus tard, mais pour l'instant, elle vous donne suffisamment d'informations pour continuer dans le processus de planification.

2. Quelles technologies allez-vous utiliser ?

Dans cette étape, vous devez définir les technologies (langages/bibliothèques/environnements) qui vous sont familières, ou que vous pouvez apprendre facilement, et parmi elles, lesquelles sont les plus adaptées à votre projet. Pour la plupart d'entre vous, cette liste sera limitée à un seul élément, "1. JS + ProcessingJS", et votre décision n'en sera que facilitée.
Notre environnement JS + ProcessingJS est vraiment bien adapté pour les animations, les jeux, les visualisations et les simulations. Allez jeter un œil sur les programmes de la communauté pour voir l'étendue de ce qu'il est possible de faire avec.
Notre environnement n'est pas, par contre, adapté pour les jeux multi-joueurs, les applications mobile ou les applications de traitement de données. Si vous connaissez d'autres langages/environnements (comme JS + HTML, Python, Scratch, Swift, etc.) et que vous avez quelque chose en tête qui n'aurait pas beaucoup de sens réalisé en ProcessingJS, alors vous devriez déterminer parmi ces technologies lesquelles sont les mieux adaptées à votre programme. Si vous voulez réaliser ce genre de programme mais ne connaissez pas d'autres technologies, alors il vous faudra trouver une nouvelle idée. On peut apprendre une nouvelle technologie pour une nouveau projet, mais, si vous débutez dans la programmation, il est conseillé d'être tout d'abord le meilleur possible dans le premier langage.
Si je décidais de réaliser un jeu comme Breakout, je choisirai JS + ProcessingJS, puisque je connais déjà cette technologie et qu'elle fonctionne très bien pour les jeux 2D comme celui-ci.

3. Quelles fonctionnalités contiendra-t-il ?

C'est où nous entrons pleinement dans la planification et où c'est le plus amusant, je pense. L'objectif dans cette étape est de déterminer ce que vous allez concrètement réaliser (à quoi le programme va ressembler, quelles fonctionnalités doit-il inclure, quelles fonctionnalités ne doit-il pas contenir).
La première chose que vous pouvez faire est de réaliser des "maquettes" (des croquis de ce vous voulez faire, mais sans y adjoindre de couleurs ou les dimensions exactes). Vous pouvez les réaliser sur papier ou en utilisant des applications en ligne :
Pour vous donner une idée de ce à quoi des maquettes ressemblent, j'ai inclus ci-dessous celles de mon clone de Breakout. J'ai fait des croquis de chaque scène séparément et les ai joints par des flèches pour qu'on puisse voir comment elles mènent les unes aux autres. Ces flèches m'aideront à déterminer quelle logique me sera nécessaire pour naviguer entre les différents états de mon programme.
Maquettes d'un clone de Casse-briques
Vous allez pouvoir utiliser ces maquettes pour vous aider à élaborer une liste de fonctionnalités, toutes les fonctionnalités dont votre programme va avoir besoin.
Pour mon clone de Breakout, ceci aurait pu être ma liste de fonctionnalités, concentrées par scènes :
Scène de jeu
  • Raquette contrôlée par l'utilisateur
  • Briques aux couleurs multiples
  • Mouvements inclinés de la balle
  • Détection des collisions
  • Affichage de la vie
  • Affichage du score
  • Effets sonores
Scène principale
  • Bouton de lancement du jeu
  • Bouton d'aide
Scène d'aide
  • Texte
  • Bouton de retour
Scène de victoire
  • Gros titres
  • Animation de feux d'artifice
Scène de défaite
  • Texte
  • Bouton pour recommencer

4. Mais quelles fonctionnalités doit-il inclure ?

Si nous avions tout le temps pour réaliser les programmes qui nous viennent à l'esprit, alors ils incluraient toutes les fonctionnalités de la liste. Mais nous ne l'avons pas. Nous devons donc décider, dans cette étape, quelles sont les fonctionnalités les plus importantes, et quelles sont celles que nous inclurions seulement si nous avions le temps. Cela nous aidera à déterminer l'ordre dans lequel nous devons les implémenter, de la plus importante à la moins importante.
Pour vous aider à évaluer l'importance de chaque fonctionnalité, posez-vous ces questions :
  • Si je partage avec un ami, quelles sont les fonctionnalités que je veux absolument voir fonctionner ?
  • Quelles sont les fonctionnalités les plus exaltantes à mettre en place ?
  • Quelles sont les fonctionnalités propres à mon programme ?
  • Quelles sont les fonctionnalités qui vont m'apprendre le plus ?
  • Y-a-t-il des fonctionnalités dont la réalisation est au-delà de mes compétences ?
Puis, parcourez la liste de fonctionnalités que vous avez faites lors de l'étape précédent et ordonnez-la en attribuant des priorités.
Pour la liste de fonctionnalités de mon clone de Breakout, j'ai attribué des "P1", "P2" et "P3" aux fonctionnalités, c'est-à-dire haute priorité (P1), priorité intermédiaire (P2), et priorité moindre (P3). J'ai décidé de donner surtout de l'importance à la mécanique propre du jeu plutôt qu'aux fonctionnalités générales, car c'est ce que je trouvais le plus excitant dans le projet :
(P1) Scène de jeu
  • (P1) Raquette contrôlée par l'utilisateur
  • (P1) Briques aux couleurs multiples
  • (P1) Mouvements inclinés de la balle
  • (P1) Détection des collisions
  • (P2) Affichage de la vie
  • (P2) Affichage du score
  • (P3) Effets sonores
(P2) Scène principale
  • (P2) Bouton de lancement du jeu
  • (P3) Bouton d'aide
(P3) Scène d'aide
  • (P3) Texte
  • (P3) Bouton de retour
(P2) Scène de victoire
  • (P2) Gros titres
  • (P3) Animation de feux d'artifice
(P2) Scène de défaite
  • (P2) Texte
  • (P3) Bouton pour recommencer
De façon générale, voici les fonctionnalités auxquelles je recommande de donner une faible priorité à ceux qui font des jeux : les menus, les niveaux multiples et les graphismes en 3D. Concentrez-vous sur ce qui est unique et amusant dans votre jeu, puis ajoutez ensuite ces options.
Vous pouvez aussi transformer votre liste de priorités en versions de projet, ce qui vous permettra de voir facilement ce qu'il y a à implémenter dans chaque version. Et vous aurez toujours la possibilité de vous arrêter sur une version en considérant que ce que vous avez fait est satisfaisant.
Ci-après, les versions telles qu'elles apparaîtraient pour mon clone de Breakout :
V1
  • Raquette contrôlée par l'utilisateur
  • Briques aux couleurs multiples
  • Mouvements inclinés de la balle
  • Détection des collisions
V2
  • Affichage de la vie
  • Affichage du score
  • Scène principale avec bouton de lancement du jeu
  • Scène de victoire avec gros titres
V3
  • Effets sonores
  • Bouton d'aide
  • Feux d'artifice
  • Scène de défaite avec bouton pour recommencer

5. Comment allez-vous l'implémenter ?

Vous avez maintenant une bonne idée des fonctionnalités que vous allez mettre en place en premier. Mais si vous commencez immédiatement, vous allez vous retrouvez devant une feuille blanche, sans aucun code, et cela peut être intimidant. Quelles variables allez-vous déclarer en premier ? Quelles fonctions ?
Un moyen d’appréhender cela est de réfléchir à une "architecture à haut niveau" de votre programme, en le segmentant en catégories telles que les "objets", la "logique", les "interactions avec l'utilisateur", les "données de l'utilisateur" et les "scènes. Puis réfléchir au moyen de les implémenter, avec par exemple des types d'objet orientée objet, des fonctions ou des variables.
Voici en exemple une architecture pour mon clone de Breakout :
Objets
  • Brique (.estTouchee())
  • Raquette (.deplacer())
  • Balle (.deplacer())
Scènes
  • Début
  • Jeu
  • Fin
Logique
  • Collision Balle-Brique (fonction, utilise un rectangle de contour)
  • Calcul d'angle Raquette-Balle (fonction, inverse l'angle)
Interactions avec l'utilisateur
  • Mouvement de la raquette avec le clavier (keyPressed)
  • Boutons pour les changements de scènes (mouseClicked)
Données de l'utilisateur
  • Pertes de balles (tableau)
  • Touchés de balles (tableau)
Une fois que vous aurez pensé à l'architecture à haut-niveau, ce que vous devez coder en premier vous apparaîtra plus clair.
Vous pouvez décider d'écrire tout votre programme en pseudo-code dans un premier temps (nous en parlerons plus tard dans ce module). Il s'agit en fait d'écrire tout son programme en français, à l'intérieur d'un commentaire, puis de tranquillement le transformer en code.

6. Quel est votre planning ?

Combien de temps avez-vous pour faire ce programme ? Combien de semaines et combien d'heures chaque jour ? Votre objectif dans cette étape est d'établir un planning pour votre projet, qui est vital si vous avez une date butoir. Il vous permettra aussi d'estimer le temps qui vous est nécessaire à l'écriture d'un programme.
Voici un planning pour mon clone de Breakout, en supposant un travail de 2 à 4 heures par semaine :
  • Semaine 1 : Conception et pseudo-code
  • Semaine 2 : Premiers visuels
  • Semaine 3 : Mouvement de la balle/mécanisme des collisions
  • Semaine 4 : Mécanisme de comptabilisation du score
  • Semaine 5 : Scènes (Début/Gagné/Perdu)
  • Semaine 6 : Peaufinage, Tests manuels (AQ), Préparation d'une démo
Établir un planning de programmation pour des projets est difficile. Des choses qui semblent faciles prennent plus de temps que prévu (comme d'étranges bogues que vous passez des heures à déboguer) et d'autres qui semblent difficiles moins. En règle générale, considérez qu'il vous faudra plus de temps que vous pensez et ajustez au fur et à mesure.

Êtes-vous prêt !?

Espérons que cela vous a donné une bonne idée du processus de planification d'un projet de programmation et vous incite à en démarrer un immédiatement. Selon ce que vous voulez construire, vous pourriez décider de suivre d'autres cours avant, comme JS avancé : jeux et rendus visuels ou JS avancé: simulations de la nature, pour vous donner plus d'idées sur la fabrication des jeux et des simulations.
La chose importante est de vous lancer dans la réalisation de vos propres programmes à un moment ou à un autre car c'est là que vous apprendrez le plus, et également là ou vous tirerez le plus de joie car vous transformerez vos rêves en réalité.

Vous souhaitez rejoindre la discussion ?

Vous comprenez l'anglais ? Cliquez ici pour participer à d'autres discussions sur Khan Academy en anglais.