Difference between revisions of "Formations:Programmation:Initiation"
(→Utilisons un ordinateur) |
|||
(6 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
Page en cours de creation... | Page en cours de creation... | ||
+ | |||
+ | Probablement qu'on veut découper en plusieurs pages: | ||
+ | * introduction & concepts généraux | ||
+ | * page spécifique pour arduino : langage, projet | ||
+ | * page spécifique pour python : langage, projet | ||
+ | * page spécifique pour processing/java : langage, projet | ||
+ | * page spécifique pour scratch : langage, projet | ||
+ | |||
= Notions fondamentales de programmation = | = Notions fondamentales de programmation = | ||
Cette formation permet de découvrir ce qu'est la programmation, en s'adressant aux grands débutants: | Cette formation permet de découvrir ce qu'est la programmation, en s'adressant aux grands débutants: | ||
* C'est quoi un programme? Un ordinateur? | * C'est quoi un programme? Un ordinateur? | ||
− | * Découverte très concrète des fondamentaux de l'algorithmique | + | * Découverte très concrète des fondamentaux de l'algorithmique et de la programmation |
− | * Réalisation d'un petit projet encadré, au choix | + | * Réalisation d'un petit projet encadré, au choix, en langage C (Arduino), Java (Processing), Python, Scratch |
Ceci sans oublier la prise en main des outils classiques pour mener à bien son projet. | Ceci sans oublier la prise en main des outils classiques pour mener à bien son projet. | ||
Line 23: | Line 31: | ||
** pour le C/Arduino: IDE Arduino + simulateur ou carte | ** pour le C/Arduino: IDE Arduino + simulateur ou carte | ||
** pour Python: IDE | ** pour Python: IDE | ||
+ | ** pour Processing: Processing vXXX | ||
+ | ** pour Scratch: Scratch 2 | ||
A noter que le lab dispose de tout le matériel nécessaire, mais il est fortement conseillé d'installer les outils sur votre ordinateur avant la séance. | A noter que le lab dispose de tout le matériel nécessaire, mais il est fortement conseillé d'installer les outils sur votre ordinateur avant la séance. | ||
Line 29: | Line 39: | ||
Supports externes/doc (à creuser/faire du ménage) : | Supports externes/doc (à creuser/faire du ménage) : | ||
* ajouter liens pertinents, notamment... wikipedia. | * ajouter liens pertinents, notamment... wikipedia. | ||
− | * CSIRL | + | * CSIRL: https://github.com/InfoSansOrdi/CSIRL |
− | * references C, Arduino, Python | + | * Computer Science à voir... |
+ | * references C, Arduino, Python, Scratch | ||
= Contenu détaillé = | = Contenu détaillé = | ||
Sans prérequis particulier, cette formation aborde: | Sans prérequis particulier, cette formation aborde: | ||
− | * | + | * Qu'est ce qu'un programme ? Un ordinateur, au fait, c'est quoi ? |
− | * | + | * Découverte très concrète, par la pratique, des fondamentaux de l'algorithmique et de la programmation |
− | * | + | * Réalisation d'un petit projet encadré, au choix, en langage C (Arduino), Java (Processing), Python, Scratch |
Cette formation est prevue pour être animée au lab. Il est envisageable de suivre le plan en autoformation (mais pour l'instant, cette page nécessite d'être étoffée). | Cette formation est prevue pour être animée au lab. Il est envisageable de suivre le plan en autoformation (mais pour l'instant, cette page nécessite d'être étoffée). | ||
Line 49: | Line 60: | ||
Pourquoi apprendre à programmer? | Pourquoi apprendre à programmer? | ||
* logiciel libre: analyser, modifier, produire... et ne pas être que consommateur | * logiciel libre: analyser, modifier, produire... et ne pas être que consommateur | ||
− | * empowerment: | + | * empowerment: rôle/impact de l'informatique, "puissance" de l'outil |
* just for fun! | * just for fun! | ||
+ | |||
+ | |||
+ | L'ordinateur est un outil puissant parce que: | ||
+ | * traite de grandes quantités d'informations | ||
+ | * rapide: milliards d'opérations à la seconde | ||
+ | * interconnecté | ||
+ | * infaillible/inusable | ||
+ | * plutôt bon marché et duplicable | ||
+ | |||
+ | Savoir comment un ordinateur fonctionne, et s'en servir autrement que comme simple consommateur est une source de pouvoir... | ||
=== C'est quoi un ordinateur? === | === C'est quoi un ordinateur? === | ||
− | Différents éléments | + | Différents éléments, la vue d'ensemble : |
* CPU, mémoires, I/O | * CPU, mémoires, I/O | ||
− | * Operating System, programmes/binaires | + | * Operating System, programmes/binaires |
+ | * fichiers/data | ||
+ | * interfaces (réseaux, périphériques) | ||
+ | |||
+ | Et ca fait quoi...? Ca exécute du code/des programmes. | ||
=== C'est quoi un programme? === | === C'est quoi un programme? === | ||
Line 66: | Line 91: | ||
... sans ordinateur! Dijkstra a dit "Computer Science is no more about computers than astronomy is about telescopes." "l'informatique n'est pas plus la science des ordinateurs que l'astronomie est la science des télescopes" | ... sans ordinateur! Dijkstra a dit "Computer Science is no more about computers than astronomy is about telescopes." "l'informatique n'est pas plus la science des ordinateurs que l'astronomie est la science des télescopes" | ||
− | + | On va faire une ou plusieurs activiés dans la série: | |
− | + | * tri de cartes | |
− | + | * dessin | |
− | * | + | Voir également, pour d'autres jeux d'algorithmique sans ordinateur: http://people.irisa.fr/Martin.Quinson/Mediation/SMN/ et https://github.com/jcb/CSIRL |
− | * | + | |
− | + | ||
− | Voir: http://people.irisa.fr/Martin.Quinson/Mediation/SMN/ et https://github.com/jcb/CSIRL | + | |
− | + | ||
− | + | ||
Notions: | Notions: | ||
Line 80: | Line 100: | ||
* universalité de la machine de Turing | * universalité de la machine de Turing | ||
* apprendre la programmation, ce n'est pas juste apprendre un langage, et encore moins juste taper du code. | * apprendre la programmation, ce n'est pas juste apprendre un langage, et encore moins juste taper du code. | ||
+ | |||
+ | === Activité 1: comment trier des cartes ? === | ||
+ | On utilise 10 cartes avec des numéros, disposées cote à cote, au hasard. Une personne a le droit de les manipuler, et exécute strictement les instructions d'une seconde personne qui dit quoi faire. | ||
+ | |||
+ | On se rend compte que: | ||
+ | * c'est pas si facile que ca de donner des instructions "strictes" qui soient correctes => programmer, c'est donner une suite d'ordres qui aboutissent au résultat attendu, à un ordinateur, qui est absolument dépourvu d'imagination, et ne fait qu'exécuter bêtement les instructions qu'on lui donne. | ||
+ | * il y a plusieurs manières, plus ou moins efficaces => c'est tout l'art de l'algorithmique, l'étude de la manière optimale d'atteindre un résultat donné. | ||
+ | |||
+ | === Activité 2: dessin sur commande === | ||
+ | On utilise des dessins géométriques "simples", par exemple TODO insert image. | ||
+ | |||
+ | Travail en binome: une personne voit l'image source (géométrique "simple"), qui doit la décrire à une autre personne (celle-ci ne voit pas l'image du départ), qui doit la redessiner à l'identique en suivant les instructions données à la lettre. | ||
+ | |||
+ | Cela permet d'insister/de voir sur un exemple plus marrant, que c'est pas simple de décrire de manière stricte une séquence d'actions qui donnent un résultat donné. | ||
== Utiliser un ordinateur pour programmer == | == Utiliser un ordinateur pour programmer == | ||
Actions/activites: | Actions/activites: | ||
* installer et faire marcher les outils/l'IDE | * installer et faire marcher les outils/l'IDE | ||
− | * pratiquer les exemples de découverte des langages | + | * pratiquer les exemples de découverte des langages |
− | Notions: | + | Notions/objectifs: |
* être plus qu'un simple utilisateur d'ordinateur | * être plus qu'un simple utilisateur d'ordinateur | ||
* premiers pas concrets avec la programmation | * premiers pas concrets avec la programmation | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Comment on fait pour lui donner des ordres? === | === Comment on fait pour lui donner des ordres? === | ||
Line 110: | Line 137: | ||
− | + | === Les grands points communs === | |
+ | Structures de contrôle, etc etc etc... | ||
+ | Rappel: Ordinateur = stupide automate. Langage de programmation a une définition stricte: la syntaxe (la forme) et ses fautes, ainsi que la sémantique (le fond) et ses erreurs (bugs). | ||
Il y a des points communs d'un langage à l'autre, mais on va les voir séparément. Choisir un langage par participant ou par session? | Il y a des points communs d'un langage à l'autre, mais on va les voir séparément. Choisir un langage par participant ou par session? | ||
− | |||
− | |||
− | |||
− | |||
− | |||
== Programmer en C avec Arduino == | == Programmer en C avec Arduino == |
Latest revision as of 15:45, 26 September 2016
Page en cours de creation...
Probablement qu'on veut découper en plusieurs pages:
- introduction & concepts généraux
- page spécifique pour arduino : langage, projet
- page spécifique pour python : langage, projet
- page spécifique pour processing/java : langage, projet
- page spécifique pour scratch : langage, projet
Contents
Notions fondamentales de programmation
Cette formation permet de découvrir ce qu'est la programmation, en s'adressant aux grands débutants:
- C'est quoi un programme? Un ordinateur?
- Découverte très concrète des fondamentaux de l'algorithmique et de la programmation
- Réalisation d'un petit projet encadré, au choix, en langage C (Arduino), Java (Processing), Python, Scratch
Ceci sans oublier la prise en main des outils classiques pour mener à bien son projet.
Cette formation s'adresse à tous, et permet de mieux comprendre les bases de la programmation pour ensuite aborder tous les projets utilisant un programme informatique.
Informations pratiques
- Durée: 4h
- Public visé: tous les membres souhaitant mieux comprendre ces notions fondamentales
Formations liées
- Prérequis: culture générale
- Formations suivantes: plein
Matériel requis
Ce que nous allons utiliser:
- bouts de papier/cartes/whiteboard/CSIRL stuff
- ordinateur avec
- pour le C/Arduino: IDE Arduino + simulateur ou carte
- pour Python: IDE
- pour Processing: Processing vXXX
- pour Scratch: Scratch 2
A noter que le lab dispose de tout le matériel nécessaire, mais il est fortement conseillé d'installer les outils sur votre ordinateur avant la séance.
Ressources additionnelles
Supports externes/doc (à creuser/faire du ménage) :
- ajouter liens pertinents, notamment... wikipedia.
- CSIRL: https://github.com/InfoSansOrdi/CSIRL
- Computer Science à voir...
- references C, Arduino, Python, Scratch
Contenu détaillé
Sans prérequis particulier, cette formation aborde:
- Qu'est ce qu'un programme ? Un ordinateur, au fait, c'est quoi ?
- Découverte très concrète, par la pratique, des fondamentaux de l'algorithmique et de la programmation
- Réalisation d'un petit projet encadré, au choix, en langage C (Arduino), Java (Processing), Python, Scratch
Cette formation est prevue pour être animée au lab. Il est envisageable de suivre le plan en autoformation (mais pour l'instant, cette page nécessite d'être étoffée).
Le slide-pack est en cours de creation et sera mis à disposition ici prochainement.
Introduction
Plan de la formation/Organisation/infos pratiques Blabla qui rafraichit/fournit les notions de départ, et donne les pointeurs pertinents/fournit le contexte.
Motivation
Pourquoi apprendre à programmer?
- logiciel libre: analyser, modifier, produire... et ne pas être que consommateur
- empowerment: rôle/impact de l'informatique, "puissance" de l'outil
- just for fun!
L'ordinateur est un outil puissant parce que:
- traite de grandes quantités d'informations
- rapide: milliards d'opérations à la seconde
- interconnecté
- infaillible/inusable
- plutôt bon marché et duplicable
Savoir comment un ordinateur fonctionne, et s'en servir autrement que comme simple consommateur est une source de pouvoir...
C'est quoi un ordinateur?
Différents éléments, la vue d'ensemble :
- CPU, mémoires, I/O
- Operating System, programmes/binaires
- fichiers/data
- interfaces (réseaux, périphériques)
Et ca fait quoi...? Ca exécute du code/des programmes.
C'est quoi un programme?
- Instructions pour un automate stupide pour faire quelque chose: algorithme, description formelle
- Language de programmation (C, java, python: compilé, vm, interprété)
- objet intellectuel correctement conçu
Mon premier programme
... sans ordinateur! Dijkstra a dit "Computer Science is no more about computers than astronomy is about telescopes." "l'informatique n'est pas plus la science des ordinateurs que l'astronomie est la science des télescopes"
On va faire une ou plusieurs activiés dans la série:
- tri de cartes
- dessin
Voir également, pour d'autres jeux d'algorithmique sans ordinateur: http://people.irisa.fr/Martin.Quinson/Mediation/SMN/ et https://github.com/jcb/CSIRL
Notions:
- l'informatique, c'est pas qu'une affaire d'ordinateur
- universalité de la machine de Turing
- apprendre la programmation, ce n'est pas juste apprendre un langage, et encore moins juste taper du code.
Activité 1: comment trier des cartes ?
On utilise 10 cartes avec des numéros, disposées cote à cote, au hasard. Une personne a le droit de les manipuler, et exécute strictement les instructions d'une seconde personne qui dit quoi faire.
On se rend compte que:
- c'est pas si facile que ca de donner des instructions "strictes" qui soient correctes => programmer, c'est donner une suite d'ordres qui aboutissent au résultat attendu, à un ordinateur, qui est absolument dépourvu d'imagination, et ne fait qu'exécuter bêtement les instructions qu'on lui donne.
- il y a plusieurs manières, plus ou moins efficaces => c'est tout l'art de l'algorithmique, l'étude de la manière optimale d'atteindre un résultat donné.
Activité 2: dessin sur commande
On utilise des dessins géométriques "simples", par exemple TODO insert image.
Travail en binome: une personne voit l'image source (géométrique "simple"), qui doit la décrire à une autre personne (celle-ci ne voit pas l'image du départ), qui doit la redessiner à l'identique en suivant les instructions données à la lettre.
Cela permet d'insister/de voir sur un exemple plus marrant, que c'est pas simple de décrire de manière stricte une séquence d'actions qui donnent un résultat donné.
Utiliser un ordinateur pour programmer
Actions/activites:
- installer et faire marcher les outils/l'IDE
- pratiquer les exemples de découverte des langages
Notions/objectifs:
- être plus qu'un simple utilisateur d'ordinateur
- premiers pas concrets avec la programmation
Comment on fait pour lui donner des ordres?
On veut faire faire des choses au final au CPU: instructions basiques :"case mémoire x recoit case mémoire y plus case mémoire z", ou encore "si case mémoire x a pour valeur 42, va à la ligne de programme 1234". Cela s'appelle "langage machine", ou "binaire"/"exécutable". C'est compliqué et fastidieux. On utilise plutot des langages de programmation et des bouts de code préexistants, avec des instructions plus complexes: est-ce que la phrase X contient le mot Y ? Dans tous les cas, au final, le système va exécuter des instructions basiques, mais l'humain décrit son programme dans un langage de programmation - qui peut être de plus haut niveau.
kesako langage de programmation ?
Différents types:
- compilé vers langage machine: le C et Arduino/wiring par exemple. Avantage: performance/proximité avec matériel, inconvénient: portabilité/concision
- compilé vers VM: java ; la VM est un programme, si un système possède une VM java, il peut exécuter un binaire java. Voir processing (langage)
- interprêté: exemple le Python. Tout système ayant un interpréteur Python peut exécuter des scripts python
Comment choisir? En fonction de l'usage final. Comme pour les langues, plus on en connait, mieux on se porte. Pour la formation, on prend "deux extremes": C et Arduino, très proche du matériel, mais assez peu sophistiqué, et Python, versatile mais éloigné du matériel. Processing/Java: polyvalent.
Les grands points communs
Structures de contrôle, etc etc etc...
Rappel: Ordinateur = stupide automate. Langage de programmation a une définition stricte: la syntaxe (la forme) et ses fautes, ainsi que la sémantique (le fond) et ses erreurs (bugs).
Il y a des points communs d'un langage à l'autre, mais on va les voir séparément. Choisir un langage par participant ou par session?
Programmer en C avec Arduino
Présentation sommaire du langage: avantages, inconvénients, contexte.
outils de développeur
- IDE, compiler, etc
- structure d'un projet et fichier(s) types (header, imports, ...)
- workflow
=> install/vérif des outils, jusqu'à avoir un template de projet pret à travailler.
notions
Dans le désordre, et à réorganiser selon la prise en main syntaxique/sémantique. Pour chacune, un ou plusieurs exercice/cas pratique, sous forme de défi/hint/réponse(à trouver/expliciter dans chaque cas):
- variables, type (int, float, bool, string) et role
- conditions/boucles (if, for, while, ...)
- fonctions/macro
- stdlib/API standard
Programmer en Java avec Processing
Présentation sommaire du langage: avantages, inconvénients, contexte.
outils de développeur
- IDE, compiler, etc
- structure d'un projet et fichier(s) types (header, imports, ...)
- workflow
=> install/vérif des outils, jusqu'à avoir un template de projet pret à travailler.
notions
Dans le désordre, et à réorganiser selon la prise en main syntaxique/sémantique. Pour chacune, un ou plusieurs exercice/cas pratique, sous forme de défi/hint/réponse(à trouver/expliciter dans chaque cas):
- variables, type (int, float, bool, string) et role
- conditions/boucles (if, for, while, ...)
- fonctions/macro
- stdlib/API standard
Programmer en Python
Présentation sommaire du langage: avantages, inconvénients, contexte.
outils de développeur
- IDE, compiler, etc
- structure d'un projet et fichier(s) types (header, imports, ...)
- workflow
=> install/vérif des outils, jusqu'à avoir un template de projet pret à travailler.
notions
Dans le désordre, et à réorganiser selon la prise en main syntaxique/sémantique. Pour chacune, un ou plusieurs exercice/cas pratique, sous forme de défi/hint/réponse(à trouver/expliciter dans chaque cas):
- variables, type (int, float, bool, string) et role
- conditions/boucles (if, for, while, ...)
- fonctions/macro
- stdlib/API standard
Mon premier projet de programmation
Mise en pratique sur un petit projet: regroupe/remixe plusieurs notions abordées lors de la découverte.
Sous le meme format de pas à pas, avec découverte type défi/conseil/réponse pour chaque étape.
Actions/activites: un petit projet non trivial complet
Notions:
- je peux faire des choses! apprendre en faisant, essai/erreur facile avec un ordinateur.
- programmer c'est 5% taper du code, 45% de réflexion/conception et le reste en test/debug/correction de problemes!
Projets C et Arduino
On peut faire du C sans Arduino...
systeme de feux tricolores
machine d'état classique/bete et méchante...
Système asservi: température bouilloire?
problématique capteur/actionneur & asservissement.
Robot dessineur
LOGO turtle
Projets Python
Pygame
Petit Jeu Con quelconque...
Traitement d'image? De texte?
Trucs "de base" de python
Trouver un exemple pertinent... et abordable
Conclusion
Cette formation a permis {Résumé}:
- Chapitre 1
- Chapitre 2
- Chapitre 3
La suite (par exemple) :
- Animer vous meme cette formation!
- autres formations...
=> Critiquez la formation, appropriez vous le contenu.
A vous la parole (links pour feedback)