# Programmation - Généralités

## Objectifs

Qu'est-ce qu'un __langage de programmation__ ?  
__Pourquoi a-t-on besoin__ d'un langage de programmation ?
Qu'est-ce que __programmer__ ? 
__Comment__ programme-t-on ?

## Définition

> __Langage__ (Selon le Larousse) : Capacité, observée chez tous les humains, d'exprimer leur pensée et de communiquer au moyen d'un système de signes vocaux et éventuellement graphiques.

- Le langage est un système permettant la communication entre 2 entités, 2 humains :

```mermaid
flowchart LR
	A[Humain A] --> |Demande|B[Humain B]
	C[Humain A] --> |Demande|D[Humain B]
	D --> |Interprète|D
	E[Humain A] --> |Demande|F[Humain B]
	F --> |Interprète|F
	F --> |Répond|E
```

Exemple :

```mermaid
flowchart LR
	A[Passant A] --> |"Quelle heure est-il, s'il vous plait ?"|B[Passant B]
	C[Passant A] --> |"Quelle heure est-il, s'il vous plait ?"|D[Passant B]
	D --> |Regarde sa montre|D
	E[Passant A] --> |"Quelle heure est-il, s'il vous plait ?"|F[Passant B]
	F --> |Regarde sa montre|F
	F --> |Répond : 8h35|E
```

- Le langage est propre à une communauté. Un __langage naturel__, ou langage ordinaire, est une langue « normale » parlée par un être humain (Exemple : le Français, l'anglais...)
- Le __langage machine__ : directement interprétables par le processeur d'un ordinateur, mais peu lisibles aux yeux d'un humain,
- Le __langage de programmation__ :  Compréhensible par un humain et aisément traduisible en langage machine.

> Un __langage de programmation__ est un langage proche du langage naturel, utilisable par un humain, et exécutable, après traduction par une machine.

___Sans langage de programmation, un humain devrait connaitre et commander la machine en maitrisant son langage, donc écrire des 0 et des 1.___

```mermaid
flowchart LR
	A[Langage Naturel] --> B[Langage de Programmation]
	B --> C[Langage Machine]
```

### Constituants d'un langage

> __Vocabulaire__ : Ensemble des mots ou vocables d'une langue

Exemples : 

- heure, quelle, table...
- rehue, llequ, betal...

> __Grammaire__ (Selon le Larousse) : Ensemble des structures linguistiques propres à telle ou telle langue. Autrement dit, la grammaire indique l'ordre et les règles de structures du vocabulaire

Exemples : 

- Quelle heure est-il ?
- Il ? heure est quelle

## Programmer

> __Programmer__ (Selon le Larousse) : Établir à l'avance une suite d'opérations ; planifier, déterminer à l'avance le moment et les modalités d'une action.

## ...Mais avant de programmer

> Quelles sont les similitudes et différences entre ces 3 activités

| Itinéraire Mappy | Recette de cuisine | Montage de meuble IKEA |
| :--: | :--: | :--: |
| ![Itinéraire Mappy](./assets/mappy.png) | ![Recette de cookie aux pépites de chocolat](./assets/cookie.jpeg) | ![Plan de montage](./assets/ikea.jpeg) |


>  Depuis quand emploie-t'on le terme algorithme ?

Al-Khwarizmi, mathématicien du 9ème siècle.

![Al-Khwarizmi, Source : Wikipedia](./assets/al-khwarizmi.jpeg)

> __Algorithme__ (Selon Le Robert) : Ensemble fini des règles opératoires propres à un calcul.

Un __algorithme__ est une suite finie d'instructions exprimées en __langage naturel__.

Un __programme__ est la traduction d'un algorithme dans un __langage de programmation__.

Exemple : 

- A demande Quelle heure est-il ?
- B regarde sa montre
- B répond 8h35

Exemple :

- A demande Quelle heure est-il ?
- B répond 8h35
- B Regarde sa montre
