Formations:Programmation:Initiation

From Electrolab
Revision as of 15:17, 26 September 2016 by Clément (Talk | contribs)

Jump to: navigation, search
Page en cours de creation...

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) :

Contenu détaillé

Sans prérequis particulier, cette formation aborde:

  • point 1
  • point 2
  • point 3

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: role/impact de l'informatique, "puissance" de l'outil
  • just for fun!

C'est quoi un ordinateur?

Différents éléments/ze big picture:

  • CPU, mémoires, I/O
  • Operating System, programmes/binaires, fichiers/data ; interfaces (réseaux, périphériques)

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"

Petit cas pratique: comment trier des cartes avec des numéros? 10 cartes disposés 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. Ensuite le groupe formalise la démarche (eg l'alorithme).

On se rend compte que:

  • c'est pas trivial
  • ya plusieurs manières, plus ou moins efficaces

Voir: http://people.irisa.fr/Martin.Quinson/Mediation/SMN/ et https://github.com/jcb/CSIRL

On peut faire la même chose plus ou moins avec LOGO/géométrique (binome description/réalisation)

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.

Utiliser un ordinateur pour programmer

Actions/activites:

  • installer et faire marcher les outils/l'IDE
  • pratiquer les exemples de découverte des langages (C et python)

Notions:

  • être plus qu'un simple utilisateur d'ordinateur
  • premiers pas concrets avec la programmation


L'ordinateur est un outil puissant parce que:

  • traite de grandes quantités d'informations
  • interconnecté
  • infaillible/inusable
  • cheap/réplicable

On a donc plutot envie de savoir s'en servir... autrement que comme simple consommateur.

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.


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?


VOir si on fait trois sections similaires, ou une trame qui donne les cas spécifiques langage par langage.... probablement d'abord trame, puis cas pratiques, eg:

  • toolchain
  • notions syntaxe/sémantique: variable, conditionnels, blocs { }, fonctions, stdlib/API

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

Web related

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)