Fiche offerte

Fondations : la machine, le terminal, l'éditeur

6 h de lecture et d'exercices · Fondations

Nelya, votre guide IA

Nelya —Cette fiche est offerte, en entier. Lisez-la tranquillement : c'est le meilleur moyen de savoir si ma façon d'expliquer vous convient, avant de décider quoi que ce soit.

Bienvenue Alex. C'est ta toute première fiche. Tu n'as rien besoin de savoir avant de commencer. On va poser les fondations : comprendre ce qu'est un programme, savoir se déplacer dans ses fichiers, parler à l'ordinateur par le terminal, et installer un éditeur confortable. Prends ton temps. Cette fiche n'est pas une course.


📦 Encadré : Objectifs / Prérequis / Durée

Objectifs 1. Expliquer avec tes mots ce qu'est un programme, un CPU, la RAM, un disque.
2. Te repérer dans une arborescence de fichiers (chemins absolus et relatifs).
3. Utiliser une quinzaine de commandes de terminal sans avoir peur.
4. Comprendre encodage, fins de ligne, texte vs binaire.
5. Installer et configurer VS Code, connaître 10 raccourcis clavier.
6. Savoir lire un message d'erreur et poser une bonne question technique.
Prérequis Savoir allumer un ordinateur, utiliser une souris, un navigateur web. C'est tout.
Durée estimée 6 à 9 heures (cours + exercices + mini-projet). Étale sur 3 à 4 séances.
Matériel Un ordinateur (Windows, macOS ou Linux), une connexion internet, un carnet papier.

💡 Conseil de méthode : ne lis pas cette fiche comme un roman. Ouvre un terminal à côté et tape tout ce que tu vois. Le savoir entre par les doigts.


1. Qu'est-ce qu'un programme, vraiment ?

1.1 L'analogie de la recette de cuisine

Imagine une recette de gâteau :

1. Préchauffer le four à 180 °C
2. Mélanger 3 œufs et 100 g de sucre
3. Ajouter 150 g de farine
4. Si la pâte est trop épaisse, ajouter un peu de lait
5. Enfourner 25 minutes

Cette recette a tout ce qu'un programme possède :

  • des données (3 œufs, 180 °C, 25 minutes),
  • des instructions dans un ordre précis,
  • une condition (« si la pâte est trop épaisse… »),
  • un résultat attendu (le gâteau).

Un programme, c'est une suite d'instructions écrites pour être exécutées par une machine. La grande différence avec une recette humaine : la machine est totalement idiote et totalement obéissante. Elle ne devine rien. Si tu écris « ajouter 150 » sans préciser « g de farine », elle ne comprend pas, elle s'arrête et râle.

🔑 À retenir : quand ton programme ne fait pas ce que tu veux, ce n'est jamais que l'ordinateur « n'a pas compris ». C'est qu'il a fait exactement ce que tu as écrit.

1.2 Du code source au programme qui tourne

Le code source, c'est le texte que tu écris. Du texte, vraiment : tu pourrais l'écrire dans le Bloc-notes.

Mais le processeur, lui, ne comprend pas le français ni le Java. Il ne comprend que le langage machine : des suites de nombres binaires (des 0 et des 1). Il faut donc un traducteur. Il en existe deux familles.

A. La compilation (traduction d'avance, une fois pour toutes)

mon_code.java  ──[ compilateur ]──►  fichier exécutable  ──►  exécution
   (texte)                             (langage machine)

Comme faire traduire un livre entier par un traducteur professionnel avant de le vendre. C'est plus long au départ, mais ensuite la lecture est rapide. Langages compilés : C, C++, Rust… et Java, en partie.

B. L'interprétation (traduction à la volée, ligne par ligne)

mon_code.py  ──►  [ interpréteur ] lit une ligne, la traduit, l'exécute, passe à la suivante

Comme un interprète en cabine lors d'une conférence. Démarrage immédiat, mais plus lent à l'exécution. Langages interprétés : Python, JavaScript…

C. Le cas de Java (celui qui t'intéresse)

Java fait les deux, et c'est ce qui a fait son succès :

Bonjour.java  ──[ javac ]──►  Bonjour.class  ──[ JVM : java ]──►  ça tourne
  ton texte     compilateur     "bytecode"      machine virtuelle
  1. Tu écris Bonjour.java (du texte).
  2. Le compilateur javac le transforme en bytecode (Bonjour.class) : un langage intermédiaire, pas encore du langage machine.
  3. La JVM (Java Virtual Machine, « machine virtuelle Java ») lit ce bytecode et le traduit pour la machine sur laquelle elle tourne.

Pourquoi c'est malin ? Parce que le même fichier .class fonctionne sur Windows, macOS et Linux, du moment qu'une JVM y est installée. C'est le slogan historique de Java : « write once, run anywhere » (écris une fois, exécute partout).

📖 Vocabulaire installé :

  • Code source : le texte que tu écris.
  • Compilateur : programme qui traduit ton code d'avance.
  • Interpréteur : programme qui traduit et exécute au fur et à mesure.
  • Bytecode : langage intermédiaire de Java.
  • JVM : le programme qui fait tourner du bytecode Java.

1.3 Processus, entrée, sortie

Quand un programme tourne, on l'appelle un processus. Il a :

  • une entrée (input) : ce que tu tapes au clavier, un fichier lu, une requête réseau ;
  • une sortie (output) : ce qu'il affiche à l'écran, un fichier écrit ;
  • une sortie d'erreur : un canal séparé, réservé aux messages de problème.

C'est pour ça qu'au terminal, les erreurs s'affichent souvent en rouge ou d'une façon différente : elles passent par un autre tuyau.


2. La machine : CPU, RAM, disque

Analogie : une cuisine.

Élément Rôle Analogie cuisine Ordre de grandeur
CPU (processeur) Fait les calculs, exécute les instructions Le cuisinier Des milliards d'opérations par seconde
RAM (mémoire vive) Garde ce qu'on utilise maintenant Le plan de travail 8 à 32 Go, effacée à l'extinction
Disque (SSD/HDD) Garde tout durablement Le placard et le frigo 256 Go à 2 To, conservé

Comment ils travaillent ensemble ? Tu double-cliques sur une application :

  1. Le programme dort sur le disque (dans le placard).
  2. Le système le charge en RAM (on le sort sur le plan de travail).
  3. Le CPU lit les instructions en RAM et les exécute (le cuisinier travaille).
  4. Tu enregistres ton document → il repart sur le disque (rangé au placard).

⚠️ Le piège classique : « J'ai perdu mon travail parce que l'ordi s'est éteint. » Normal : tant que tu n'as pas enregistré, ton texte n'existe que en RAM. Et la RAM s'efface à l'extinction. Le plan de travail est nettoyé chaque soir ; seul le placard garde les choses. ➡️ D'où le réflexe : Ctrl+S (ou Cmd+S sur Mac) toutes les 30 secondes. Ça doit devenir un tic nerveux.

Pourquoi cette hiérarchie existe ? À cause de la vitesse et du prix. Plus c'est rapide, plus c'est cher, donc plus c'est petit :

Registres du CPU   ultra rapides   quelques octets      (les mains du cuisinier)
Cache CPU          très rapide     quelques Mo          (la petite étagère à portée)
RAM                rapide          quelques Go          (le plan de travail)
Disque SSD         lent            quelques To          (le placard)
Réseau / cloud     très lent       ~ illimité           (le supermarché à 10 min)

Retiens l'ordre de grandeur : lire en RAM est environ 100 000 fois plus rapide que lire sur un disque mécanique. C'est pour ça que les programmes essaient de garder en mémoire ce qu'ils utilisent souvent.

Et le système d'exploitation ? (Windows, macOS, Linux) C'est le chef de cuisine : il distribue le temps de CPU entre les programmes, gère la RAM, contrôle l'accès aux fichiers, parle au matériel. Sans lui, chaque programme devrait savoir piloter ton clavier lui-même.


3. Le système de fichiers

3.1 L'arborescence

Tes fichiers sont rangés dans des dossiers (ou répertoires), eux-mêmes dans des dossiers. Ça forme un arbre à l'envers : une racine en haut, des branches, des feuilles (les fichiers).

/                              (racine, sous macOS/Linux)
├── home/
│   └── alex/                (ton dossier personnel = "~")
│       ├── Documents/
│       ├── Téléchargements/
│       └── formation-java/
│           ├── cours/
│           │   └── fiche-01.md
│           └── exos/
│               └── Bonjour.java
└── etc/                       (fichiers de configuration du système)

Sous Windows, il y a une racine par disque, désignée par une lettre :

C:\
├── Windows\
├── Program Files\
└── Users\
    └── Alex\                (ton dossier personnel)
        ├── Documents\
        └── formation-java\

🔎 Détail qui compte : le séparateur est / (barre oblique) sous macOS/Linux et \ (barre oblique inverse) sous Windows. PowerShell accepte les deux, ce qui simplifie la vie.

3.2 Chemin absolu vs chemin relatif

Un chemin (path) est l'adresse d'un fichier.

  • Chemin absolu : il part de la racine. Il est vrai partout, tout le temps. /home/alex/formation-java/exos/Bonjour.java C:\Users\Alex\formation-java\exos\Bonjour.java ➡️ C'est l'adresse postale complète : 12 rue des Lilas, 75011 Paris.

  • Chemin relatif : il part de l'endroit où tu te trouves maintenant. Si tu es dans formation-java, alors exos/Bonjour.java suffit. ➡️ C'est : « deuxième porte à droite ». Ça ne veut rien dire si on ignore où tu es.

Trois raccourcis à connaître par cœur :

Symbole Signification
. le dossier où je suis (le dossier courant)
.. le dossier parent (un cran au-dessus)
~ mon dossier personnel (/home/alex, /Users/alex, C:\Users\Alex)

Exemples, en supposant que tu es dans /home/alex/formation-java/cours :

fiche-01.md              → /home/alex/formation-java/cours/fiche-01.md
./fiche-01.md            → exactement pareil (le "./" est explicite)
../exos/Bonjour.java     → /home/alex/formation-java/exos/Bonjour.java
../../Documents          → /home/alex/Documents
~/Documents              → /home/alex/Documents

3.3 Extensions de fichier

L'extension, c'est ce qui suit le dernier point : .txt, .java, .md, .png.

Vérité importante : l'extension est une convention, pas une garantie. Elle sert surtout au système à choisir quel programme ouvrir. Renommer photo.png en photo.txt ne transforme pas l'image en texte — ça embrouille juste tout le monde.

Extension Contenu
.txt texte brut
.md texte au format Markdown (comme cette fiche)
.java code source Java
.class bytecode Java (binaire)
.jar archive de programme Java
.json, .xml, .yml texte structuré (configuration, données)
.png, .jpg, .pdf fichiers binaires

⚠️ À faire tout de suite sous Windows : l'Explorateur cache les extensions par défaut. Tu vois notes alors que le fichier s'appelle notes.txt. Va dans l'Explorateur → onglet Affichage → coche Extensions de noms de fichiers. Sur macOS : Finder → Réglages → Avancé → Afficher tous les noms d'extension.

3.4 Règles de nommage (adopte-les maintenant)

  • Pas d'espaces : mon projet t'obligera à écrire "mon projet" ou mon\ projet au terminal. Utilise mon-projet ou mon_projet.
  • Pas d'accents ni de caractères spéciaux dans les noms de dossiers de code.
  • Minuscules pour les dossiers ; en Java, les fichiers de classe commencent par une majuscule (Bonjour.java) — tu verras pourquoi plus tard.
  • La casse compte sous Linux : Notes.txt et notes.txt sont deux fichiers différents. Sous Windows et macOS, en général non. Fais comme si elle comptait toujours : c'est le seul réflexe qui marche partout.

4. Le terminal

4.1 Pourquoi apprendre ça, alors qu'il y a des fenêtres ?

Question légitime. Cinq raisons :

  1. C'est précis et reproductible. Une commande peut être copiée, collée, partagée, mise dans un fichier. « Clique en haut à droite sur le petit bouton » ne se partage pas.
  2. C'est plus rapide pour les tâches répétitives : renommer 200 fichiers prend une commande.
  3. Les outils de développement vivent là. Git, Maven, la compilation Java, les serveurs, Docker : ils se pilotent au terminal.
  4. Les serveurs n'ont pas d'écran. Quand ton application sera en ligne, tu n'auras qu'un terminal.
  5. Toute la documentation du monde est écrite comme ça. Les tutoriels te donneront des commandes.

🧘 Rassure-toi : tu n'as pas besoin de connaître 300 commandes. Quinze couvrent 95 % du quotidien. Elles sont ci-dessous.

4.2 Comment ouvrir un terminal

Système Comment
Windows Menu Démarrer → tape PowerShellWindows PowerShell ou Terminal. Encore mieux : installe Windows Terminal depuis le Microsoft Store.
macOS Cmd + Espace → tape Terminal → Entrée.
Linux Ctrl + Alt + T, ou cherche « Terminal » dans les applications.
Partout Depuis VS Code : menu Terminal → Nouveau terminal, ou Ctrl + ` (Cmd + `` `` sur Mac). C'est ce que tu utiliseras le plus.

💡 Conseil fort pour Windows : installe WSL (Windows Subsystem for Linux, un Linux intégré à Windows) ou Git Bash (livré avec Git). Tu pourras alors taper les mêmes commandes que 90 % des tutoriels du web, au lieu de traduire en PowerShell à chaque fois. Pour WSL, une seule commande dans un PowerShell administrateur :

wsl --install

4.3 Lire l'invite de commande

Ce que tu vois avant ton curseur s'appelle l'invite (prompt) :

alex@portable:~/formation-java$
  • alex : ton nom d'utilisateur
  • portable : le nom de la machine
  • ~/formation-java : où tu es (le dossier courant) — l'information la plus utile
  • $ : « à toi de jouer »

Sous PowerShell :

PS C:\Users\Alex\formation-java>

Une commande s'écrit toujours ainsi :

commande  [options]  [arguments]
   ls       -l        exos/
   │        │          └── sur quoi j'agis
   │        └── comment (les options commencent par - ou --)
   └── quoi

4.4 Les commandes essentielles

Tableau de correspondance. La colonne « Unix » vaut pour macOS, Linux, WSL et Git Bash.

Je veux… Unix (macOS / Linux) Windows PowerShell
Savoir où je suis pwd pwd (alias de Get-Location)
Lister les fichiers ls ls ou dir (alias de Get-ChildItem)
Lister en détail ls -l ls (détaillé par défaut)
Lister les fichiers cachés ls -la ls -Force
Changer de dossier cd exos cd exos
Remonter d'un cran cd .. cd ..
Aller chez moi cd ~ ou cd cd ~
Créer un dossier mkdir cours mkdir cours
Créer une arborescence mkdir -p a/b/c mkdir a/b/c
Créer un fichier vide touch notes.txt New-Item notes.txt
Afficher un fichier cat notes.txt cat notes.txt (alias Get-Content)
Lire un gros fichier page par page less notes.txt (q pour quitter) cat notes.txt | more
Écrire dans un fichier (écrase) echo "salut" > notes.txt Set-Content notes.txt "salut"
Ajouter à la fin echo "salut" >> notes.txt Add-Content notes.txt "salut"
Copier cp a.txt b.txt cp a.txt b.txt (alias Copy-Item)
Copier un dossier cp -r cours/ sauvegarde/ cp -Recurse cours\ sauvegarde\
Déplacer / renommer mv a.txt b.txt mv a.txt b.txt (alias Move-Item)
Supprimer un fichier rm a.txt rm a.txt (alias Remove-Item)
Supprimer un dossier rm -r vieux/ rm -Recurse vieux\
Chercher des fichiers find . -name "*.java" ls -Recurse -Filter *.java
Chercher du texte dans des fichiers grep -rn "TODO" . Select-String -Path *.* -Pattern "TODO"
Effacer l'écran clear (ou Ctrl+L) cls
Aide sur une commande man ls ou ls --help Get-Help ls
Historique des commandes history Get-History
Arrêter un programme bloqué Ctrl + C Ctrl + C

⚠️ Sous Windows, find existe mais ne fait pas la même chose : c'est un outil de recherche de texte hérité de MS-DOS, pas un chercheur de fichiers. D'où l'intérêt de WSL ou Git Bash pour éviter les pièges de ce genre.

4.5 Séance pratique guidée

Ouvre un terminal et tape ceci, ligne par ligne. Lis la sortie à chaque fois avant de continuer.

pwd                       # Où suis-je ?
cd ~                      # Je rentre chez moi
mkdir -p formation-java/cours formation-java/exos
cd formation-java
pwd                       # Vérifie : tu dois voir ".../formation-java"
ls                        # Tu dois voir : cours  exos
echo "Jour 1 : je pose les fondations." > journal.md
cat journal.md            # Affiche le contenu
echo "J'ai créé mon arborescence." >> journal.md
cat journal.md            # Deux lignes maintenant
cp journal.md cours/copie-journal.md
ls cours
mv cours/copie-journal.md cours/journal-sauvegarde.md
ls cours
rm cours/journal-sauvegarde.md
ls cours                  # Vide à nouveau
cd ..                     # Je remonte
pwd

Les équivalents PowerShell des trois lignes qui diffèrent :

Set-Content journal.md "Jour 1 : je pose les fondations."
Add-Content journal.md "J'ai créé mon arborescence."
cp journal.md cours\copie-journal.md

4.6 Les trois raccourcis qui changent la vie

  1. La touche Tab (complétion automatique). Tape cd form puis Tab : le terminal complète en formation-java/. Gains : rapidité et zéro faute de frappe. Si rien ne se passe, c'est qu'il y a plusieurs possibilités : appuie deux fois sur Tab pour les voir. ➡️ Règle d'or : ne tape jamais un nom de fichier en entier. Tape 3 lettres et Tab.

  2. Les flèches ↑ et ↓ (historique). ↑ rappelle la commande précédente. Idéal pour corriger une faute de frappe sans tout retaper. Sous Unix, Ctrl + R lance une recherche dans l'historique : tape mkdir et il retrouve ta dernière commande mkdir.

  3. Ctrl + C (stop). Un programme tourne en boucle, le terminal ne répond plus ? Ctrl + C l'interrompt. Ce n'est pas « copier » ici.

4.7 Sécurité : les commandes qui font mal

rm ne met pas à la corbeille. Ce qui est supprimé est supprimé.

rm -rf dossier/     # supprime dossier et TOUT son contenu, sans confirmation
  • -r = recursive (descend dans les sous-dossiers)
  • -f = force (ne pose aucune question)

Trois règles de survie :

  1. Fais toujours un ls avant un rm, pour vérifier ce qui va disparaître.
  2. Ne tape jamais rm -rf / ni rm -rf ~ ni rm -rf * sans avoir vérifié où tu es (pwd).
  3. Méfie-toi des commandes copiées depuis internet sans les comprendre. Une commande est du pouvoir : tu dois savoir ce qu'elle fait avant de valider.

Sous Unix, tu peux demander confirmation : rm -i fichier.txt.


5. Texte, binaire, encodage et fins de ligne

5.1 Texte vs binaire

Tous les fichiers sont des suites d'octets (des nombres de 0 à 255). Ce qui change, c'est l'interprétation :

  • Un fichier texte : chaque octet (ou petit groupe d'octets) représente un caractère. Tu peux l'ouvrir dans un éditeur et le lire. .java, .txt, .md, .json, .csv.
  • Un fichier binaire : les octets représentent autre chose (des pixels, du son, des instructions machine). Ouvert dans un éditeur, ça donne du charabia. .png, .pdf, .class, .jar.

Tout ton code sera du texte brut. C'est une bonne nouvelle : léger, lisible, comparable ligne à ligne, versionnable avec Git.

5.2 L'encodage : UTF-8

Un encodage est la table de correspondance entre les caractères et les octets. Comme un code secret partagé : si l'expéditeur écrit avec une table et le lecteur lit avec une autre, ça donne n'importe quoi.

Tu as sûrement déjà vu ceci :

Ce que tu voulais :  Café à Noël
Ce que tu vois :     Café à Noël

C'est un fichier écrit en UTF-8, lu comme s'il était en Latin-1. Le fameux mojibake.

UTF-8 est l'encodage universel d'aujourd'hui. Il sait représenter tous les caractères de toutes les langues, plus les emojis. Sa finesse : les caractères courants (a-z, chiffres) prennent 1 octet, les accents 2 octets, certains idéogrammes ou emojis 3 ou 4.

Démonstration (testée) : le mot café suivi d'un saut de ligne.

printf "caf\xc3\xa9\n" > utf8.txt
wc -c utf8.txt      # 6 octets
wc -m utf8.txt      # 5 caractères  (c, a, f, é, saut de ligne)
file utf8.txt       # utf8.txt: Unicode text, UTF-8 text

5 caractères mais 6 octets : le é en coûte deux. Retiens ça : un caractère ≠ un octet.

Règle absolue pour toute ta carrière : enregistre TOUS tes fichiers en UTF-8. VS Code le fait par défaut. Vérifie l'indication en bas à droite de la fenêtre : elle doit dire UTF-8.

5.3 Les fins de ligne

Comment un fichier sait-il où une ligne s'arrête ? Par un caractère invisible. Et là, deux traditions se sont affrontées :

Nom Caractères Systèmes
LF \n (saut de ligne) macOS, Linux, et le web
CRLF \r\n (retour chariot + saut de ligne) Windows

C'est un héritage des machines à écrire : \r ramenait le chariot à gauche, \n faisait descendre le papier d'une ligne.

Conséquences concrètes : un fichier Windows ouvert dans un vieil éditeur Unix affiche des ^M en bout de ligne, et Git peut signaler qu'un fichier a « entièrement changé » alors que tu n'as touché à rien.

printf "a\r\nb\r\n" > crlf.txt
file crlf.txt       # crlf.txt: ASCII text, with CRLF line terminators
cat -A crlf.txt     # a^M$   /   b^M$   ← le ^M est le \r invisible

Réglage recommandé dans VS Code : fins de ligne LF partout, même sous Windows. En bas à droite de la fenêtre, un indicateur affiche LF ou CRLF ; on peut cliquer dessus pour changer.


6. L'éditeur : VS Code

6.1 Installation

  1. Va sur https://code.visualstudio.com et télécharge la version de ton système.
  2. Sous Windows, pendant l'installation, coche :
    • « Ajouter l'action Ouvrir avec Code au menu contextuel »
    • « Ajouter à PATH » (indispensable : ça permet de taper code . au terminal)
  3. Lance-le. Choisis un thème sombre ou clair — le sombre fatigue moins les yeux le soir.

Le geste fondamental : dans VS Code, on n'ouvre pas des fichiers isolés, on ouvre un dossier de projet (Fichier → Ouvrir le dossier…). C'est ce dossier qui devient ton espace de travail. Depuis le terminal :

cd ~/formation-java
code .          # le "." veut dire : ouvre le dossier courant

6.2 Extensions utiles (à installer maintenant)

Icône des extensions dans la barre de gauche (les 4 carrés), ou Ctrl+Shift+X.

Extension Pourquoi
Extension Pack for Java (Microsoft) Le pack essentiel : coloration, autocomplétion, débogueur, exécution des tests, Maven. Le seul vraiment indispensable pour Java.
Error Lens Affiche le message d'erreur à côté de la ligne fautive, au lieu de le cacher dans un onglet. Énorme gain pour un débutant.
French Language Pack for VS Code Interface en français (facultatif ; beaucoup préfèrent rester en anglais, car les tutoriels le sont).
Code Spell Checker Repère les fautes de frappe dans tes noms de variables.
EditorConfig for VS Code Fait respecter les règles de formatage d'un projet.
GitLens Affiche qui a modifié quoi, quand. Utile à partir de la fiche Git.

Ne te charge pas : ces six-là suffisent largement pour commencer. Une extension de trop ralentit l'éditeur.

6.3 Réglages à faire tout de suite

Ctrl + , (Cmd + , sur Mac) ouvre les réglages. Cherche et règle :

Réglage Valeur Pourquoi
Files: Auto Save afterDelay Ne plus jamais perdre son travail.
Files: Encoding utf8 L'encodage universel.
Files: Eol \n Fins de ligne LF partout.
Editor: Format On Save coché Ton code est reformaté proprement à chaque enregistrement.
Editor: Font Size 14–16 Ton confort d'abord.
Editor: Render Whitespace boundary Voir les espaces et tabulations invisibles.

6.4 Les raccourcis clavier à connaître

Sur Mac, remplace Ctrl par Cmd et Alt par Option.

Raccourci Effet
Ctrl + S Enregistrer. Le plus important de tous.
Ctrl + Shift + P Palette de commandes : tape ce que tu veux faire, en toutes lettres. Si tu ne retiens qu'un raccourci, c'est celui-là.
Ctrl + P Ouvrir un fichier par son nom, en 2 secondes.
Ctrl + ` Ouvrir / fermer le terminal intégré.
Ctrl + / Commenter ou décommenter la ligne sélectionnée.
Alt + ↑ / ↓ Déplacer la ligne courante vers le haut / bas.
Shift + Alt + ↓ Dupliquer la ligne courante.
Ctrl + D Sélectionner l'occurrence suivante du mot (édition multiple).
Ctrl + F / Ctrl + H Rechercher / Remplacer dans le fichier.
Ctrl + Shift + F Rechercher dans tout le projet.
F2 Renommer une variable partout dans le projet, proprement.
Ctrl + Z / Ctrl + Y Annuler / Rétablir.
Ctrl + B Afficher / masquer la barre latérale.

🎯 Méthode d'apprentissage : n'essaie pas de tous les mémoriser. Choisis-en trois cette semaine, colle-les sur un post-it, force-toi à les utiliser. La semaine suivante, trois autres.


7. Lire une erreur, chercher, demander de l'aide

C'est la compétence qui sépare celui qui progresse de celui qui abandonne. Ce n'est pas un talent, c'est une méthode.

7.1 Lire un message d'erreur

Un message d'erreur n'est pas une punition. C'est l'ordinateur qui t'explique, avec ses moyens limités, ce qui l'a bloqué. Il contient presque toujours la réponse.

Exemple au terminal :

cd: no such file or directory: formaton-java

Décortiquons : cd (la commande concernée) + no such file or directory (« ce dossier n'existe pas ») + formaton-java (le nom fautif). En le lisant vraiment, tu vois la faute de frappe : formaton au lieu de formation. Solution : Tab la prochaine fois.

Exemple Java (tu en verras beaucoup) :

Exception in thread "main" java.lang.NullPointerException
	at Panier.calculerTotal(Panier.java:23)
	at Main.main(Main.java:8)

Les 4 questions à se poser, dans l'ordre :

  1. Quel type d'erreur ? NullPointerException.
  2. Dans quel fichier et à quelle ligne ? Panier.java, ligne 23. C'est là qu'il faut regarder.
  3. Comment y est-on arrivé ? Ça se lit de bas en haut : Main.main ligne 8 a appelé calculerTotal, qui a planté.
  4. Que dit la phrase, mot à mot ? Traduis si besoin. Ici : « pointeur nul » = tu as essayé d'utiliser quelque chose qui n'existe pas encore.

🔑 Le réflexe à installer : quand une erreur apparaît, lis-la en entier, à voix haute si besoin. La panique fait sauter la lecture ; la lecture résout 70 % des erreurs.

Trois erreurs de terminal que tu croiseras :

Message Traduction Cause habituelle
command not found / n'est pas reconnu La commande n'existe pas Faute de frappe, ou programme non installé / absent du PATH
No such file or directory Ce fichier n'existe pas Faute de frappe, ou tu n'es pas dans le bon dossier (pwd !)
Permission denied Droits insuffisants Fichier protégé, ou il faut sudo (à manier avec prudence)

7.2 Bien chercher sur internet

  • Colle le message d'erreur exact dans la recherche, entre guillemets.
  • Retire tout ce qui t'est personnel : chemins (/home/alex/...), noms de tes variables. Garde la partie générique.
  • Ajoute le contexte : le langage et l'outil. java "NullPointerException" ArrayList vaut mieux que ça marche pas.
  • Cherche en anglais. Il y a 20 fois plus de réponses. how to + ton besoin.
  • Regarde la date des réponses : un billet de 2011 sur Java peut être périmé.
  • Privilégie : la documentation officielle > Stack Overflow (réponse validée) > blogs récents > vidéos.

7.3 Lire la documentation

La doc fait peur au début parce qu'elle est dense. Trois conseils :

  1. Ne la lis pas en entier. Utilise Ctrl+F pour chercher ce que tu veux faire.
  2. Apprends à lire une signature. Exemple Java : int indexOf(String str) se lit : « cette méthode s'appelle indexOf, elle prend un texte en entrée, et rend un nombre entier ». Le début = ce qui sort, le nom = ce que ça fait, les parenthèses = ce qui entre.
  3. Descends jusqu'aux exemples. La plupart des docs finissent par des exemples de code ; commence par eux, remonte à la théorie ensuite.

7.4 Poser une bonne question technique

Que ce soit à un humain, sur un forum ou à une IA, la même structure fonctionne :

1. CONTEXTE     : ce que j'essaie de faire, et sur quel système.
2. CE QUE J'AI FAIT : la commande ou le code exact (copié-collé, pas résumé).
3. CE QUE J'ATTENDAIS : le résultat espéré.
4. CE QUI S'EST PASSÉ : le message d'erreur COMPLET, en texte.
5. CE QUE J'AI DÉJÀ ESSAYÉ : montre que tu as cherché.
6. MA QUESTION PRÉCISE : une seule question, claire.

Mauvaise question : « Bonjour, mon programme Java marche pas, aidez-moi svp. » (Personne ne peut répondre. Aucune information.)

Bonne question :

Bonjour ! Je débute en Java, sous Windows 11 avec VS Code. J'essaie de compiler un fichier Bonjour.java qui contient juste un affichage. Je tape javac Bonjour.java dans le terminal, depuis le dossier C:\Users\Alex\formation-java\exos. J'attendais qu'un fichier Bonjour.class soit créé. À la place, j'obtiens : javac : le terme « javac » n'est pas reconnu comme nom d'applet de commande... J'ai vérifié que Java est installé (java -version fonctionne et affiche 21). Ma question : pourquoi java fonctionne mais pas javac ?

💡 Le canard en plastique : avant de poser ta question, explique ton problème à voix haute à un objet posé sur ton bureau. Dans 1 cas sur 3, tu trouves la réponse en formulant la question. C'est une technique réelle et célèbre (rubber duck debugging).


8. Pièges courants de débutant

  1. Taper une commande sans savoir où on est. Toujours pwd puis ls en cas de doute. La moitié des « ça ne marche pas » viennent de là.
  2. Écrire les noms de fichiers à la main. Utilise Tab. Toujours.
  3. Mettre des espaces et des accents dans les noms. Mon Dossier Préféré/ te posera des problèmes pendant des mois. mon-dossier-prefere/.
  4. Confondre > et >>. > écrase le fichier. >> ajoute à la fin. Une confusion = un fichier perdu.
  5. Ne pas lire le message d'erreur. Le fermer d'un clic paniqué, puis dire « il y a une erreur ». Laquelle ? La réponse est dedans.
  6. Copier des commandes d'internet sans les comprendre, en particulier avec sudo ou rm -rf.
  7. Croire que la casse ne compte pas. Bonjour.javabonjour.java. En Java, ce détail te coûtera une heure un jour.
  8. Oublier d'enregistrer puis se demander pourquoi le programme ne change pas de comportement. Ctrl+S.
  9. Ouvrir un fichier isolé dans VS Code au lieu d'ouvrir le dossier du projet : la moitié des fonctionnalités (recherche globale, navigation, outils Java) deviennent inertes.
  10. Croire qu'il faut tout mémoriser. Les développeurs professionnels cherchent tous les jours. La compétence n'est pas de savoir par cœur, c'est de savoir retrouver.

9. Exercices

Fais-les dans l'ordre, au terminal. Écris tes réponses dans un fichier avant de regarder les corrigés — c'est là que l'apprentissage se produit.

Exercice 1 — Se repérer (⭐)

Ouvre un terminal. Affiche le dossier où tu te trouves. Liste son contenu, d'abord simplement, puis en incluant les fichiers cachés. Note dans ton carnet : quel est le chemin absolu de ton dossier personnel ?

Exercice 2 — Construire une arborescence (⭐)

Crée, dans ton dossier personnel, cette structure en une seule commande si possible :

formation-java/
├── cours/
├── exos/
│   ├── semaine-01/
│   └── semaine-02/
└── notes/

Vérifie ensuite que tout est bien là.

Exercice 3 — Créer et lire un fichier (⭐⭐)

Dans formation-java/notes/, crée un fichier objectifs.md. Écris dedans la ligne Devenir developpeur Java. Ajoute ensuite une deuxième ligne Objectif : 10h par semaine sans effacer la première. Affiche le résultat.

Exercice 4 — Copier, renommer, déplacer, supprimer (⭐⭐)

  1. Copie objectifs.md en objectifs-sauvegarde.md dans le même dossier.
  2. Déplace la copie dans formation-java/cours/.
  3. Renomme-la en archive-objectifs.md.
  4. Vérifie le contenu de chaque dossier.
  5. Supprime le fichier d'archive.

Exercice 5 — Chemins relatifs (⭐⭐⭐)

Place-toi dans formation-java/exos/semaine-01/. Sans jamais écrire de chemin absolu et sans revenir à ton dossier personnel :

  1. Affiche le contenu de notes/objectifs.md.
  2. Liste le contenu du dossier cours/.
  3. Crée un fichier rappel.txt dans exos/semaine-02/.

Exercice 6 — Chercher (⭐⭐⭐)

Depuis formation-java/ :

  1. Trouve tous les fichiers dont le nom finit par .md, y compris dans les sous-dossiers.
  2. Trouve tous les fichiers contenant le mot Java, en affichant le numéro de ligne.
  3. Refais la recherche sans tenir compte des majuscules.

Exercice 7 — Encodage et fins de ligne (⭐⭐⭐)

  1. Crée un fichier accents.txt contenant Café à Noël.
  2. Ouvre-le dans VS Code et vérifie, en bas à droite, l'encodage (UTF-8) et les fins de ligne (LF ou CRLF).
  3. Compte le nombre d'octets et le nombre de caractères. Pourquoi les deux nombres diffèrent-ils ?

Exercice 8 — VS Code (⭐⭐)

  1. Ouvre le dossier formation-java dans VS Code depuis le terminal.
  2. Installe l'extension Error Lens.
  3. Active l'enregistrement automatique.
  4. Ouvre le terminal intégré au clavier, et affiche le dossier courant.
  5. Ouvre objectifs.md sans la souris, en 3 secondes.

Exercice 9 — Lire une erreur (⭐⭐⭐)

Tape volontairement cette commande : cd dossier-qui-nexiste-pas. Recopie le message obtenu. Réponds : quelle commande a échoué ? Quel est le problème selon la machine ? Que ferais-tu pour le corriger ?

Exercice 10 — Rédiger une question technique (⭐⭐⭐⭐)

Tu essaies d'exécuter java Bonjour.java et tu obtiens : Error: Could not find or load main class Bonjour. Rédige, en suivant la structure en 6 points de la section 7.4, la question que tu poserais sur un forum. Vise 8 à 12 lignes.


10. Corrigés commentés

Corrigé 1 — Se repérer

pwd          # ex. : /home/alex  (Unix)  ou  C:\Users\Alex (PowerShell)
ls           # liste simple
ls -la       # -l = format long (droits, taille, date), -a = inclut les fichiers cachés

PowerShell : pwd, ls, ls -Force.

Commentaire : les fichiers cachés commencent par un point sous Unix (.bashrc, .git). Ils ne sont pas secrets, juste discrets : ce sont des fichiers de configuration. Tu croiseras beaucoup .git et .gitignore.

Corrigé 2 — Construire une arborescence

cd ~
mkdir -p formation-java/cours formation-java/exos/semaine-01 formation-java/exos/semaine-02 formation-java/notes
ls -R formation-java

PowerShell :

cd ~
mkdir formation-java\cours, formation-java\exos\semaine-01, formation-java\exos\semaine-02, formation-java\notes
ls -Recurse formation-java

Commentaire : l'option -p (parents) crée tous les dossiers intermédiaires manquants et ne râle pas si un dossier existe déjà. Sans elle, mkdir a/b/c échoue si a n'existe pas. ls -R affiche récursivement, c'est-à-dire en descendant dans chaque sous-dossier.

Corrigé 3 — Créer et lire un fichier

cd ~/formation-java/notes
echo "Devenir developpeur Java" > objectifs.md
echo "Objectif : 10h par semaine" >> objectifs.md
cat objectifs.md

PowerShell :

cd ~\formation-java\notes
Set-Content objectifs.md "Devenir developpeur Java"
Add-Content objectifs.md "Objectif : 10h par semaine"
cat objectifs.md

Commentaire : c'est LE point à ne pas rater. > écrase tout le contenu existant ; >> ajoute à la fin. Si tu avais tapé > deux fois, la première ligne aurait disparu. Note pour Windows : avec PowerShell 5.1, la redirection > écrit en UTF-16, ce qui surprend. Set-Content et Add-Content sont plus prévisibles, et PowerShell 7 écrit en UTF-8 par défaut.

Corrigé 4 — Copier, renommer, déplacer, supprimer

cd ~/formation-java/notes
cp objectifs.md objectifs-sauvegarde.md      # 1. copie
mv objectifs-sauvegarde.md ../cours/         # 2. déplacement
cd ../cours
mv objectifs-sauvegarde.md archive-objectifs.md   # 3. renommage
ls ../notes                                  # 4. vérifications
ls .
rm archive-objectifs.md                      # 5. suppression
ls .

Commentaire : découverte importante — mv sert à la fois à déplacer et à renommer. C'est logique : renommer, c'est déplacer vers un nouveau nom dans le même dossier. Réflexe de sécurité : un ls avant chaque rm.

Corrigé 5 — Chemins relatifs

cd ~/formation-java/exos/semaine-01
cat ../../notes/objectifs.md    # 1. remonter 2 crans, puis descendre dans notes
ls ../../cours                  # 2. remonter 2 crans, puis regarder cours
touch ../semaine-02/rappel.txt  # 3. remonter 1 cran, descendre dans semaine-02
ls ../semaine-02

Commentaire : compte les crans à voix haute. Depuis semaine-01 : un .. mène à exos, deux .. mènent à formation-java. Ensuite tu redescends. C'est exactement la logique d'un plan de métro : remonter à la station de correspondance, puis repartir sur l'autre ligne. PowerShell : mêmes chemins, New-Item ..\semaine-02\rappel.txt remplace touch.

Corrigé 6 — Chercher

cd ~/formation-java
find . -name "*.md"          # 1. tous les fichiers .md, récursivement
grep -rn "Java" .            # 2. -r = récursif, -n = numéro de ligne
grep -rni "java" .           # 3. -i = insensible à la casse

Résultat typique de la commande 2 :

./notes/objectifs.md:1:Devenir developpeur Java

Lecture : fichier:numéro de ligne:contenu de la ligne.

PowerShell :

ls -Recurse -Filter *.md
Select-String -Path .\* -Pattern "Java" -Recurse
Select-String -Path .\* -Pattern "java" -Recurse    # insensible à la casse par défaut

Commentaire : retiens le couple find / grepfind cherche des fichiers par leur nom, grep cherche du texte à l'intérieur des fichiers. Ce sont deux des outils les plus utilisés d'une carrière entière. Les guillemets autour de "*.md" évitent que le terminal ne remplace lui-même l'étoile avant que find ne la voie.

Corrigé 7 — Encodage et fins de ligne

echo "Café à Noël" > accents.txt
file accents.txt      # → UTF-8 text
wc -c accents.txt     # 15 octets
wc -m accents.txt     # 12 caractères

Pourquoi la différence ? La chaîne Café à Noël compte 11 caractères, plus le saut de ligne final = 12 caractères. Mais é, à et ë coûtent 2 octets chacun en UTF-8 : 12 + 3 = 15 octets. C'est la démonstration parfaite qu'un caractère n'est pas un octet. Le jour où un texte s'affichera bizarrement, tu sauras que c'est une histoire d'encodage. Dans VS Code, la barre du bas affiche UTF-8 et LF : clique dessus pour convertir si nécessaire.

Corrigé 8 — VS Code

cd ~/formation-java
code .
  1. Ctrl+Shift+X → tape « Error Lens » → Install.
  2. Ctrl+, → cherche « auto save » → mets afterDelay.
  3. Ctrl + ` pour ouvrir le terminal intégré, puis pwd. Il démarre déjà dans le dossier du projet : c'est tout l'intérêt.
  4. Ctrl+P, tape obj, Entrée.

Commentaire : si code . répond « commande introuvable » sous macOS, ouvre VS Code, fais Cmd+Shift+P, cherche « Shell Command: Install 'code' command in PATH » et valide. Sous Windows, réinstalle en cochant « Ajouter à PATH ».

Corrigé 9 — Lire une erreur

Message obtenu (variantes selon le système) :

bash: cd: dossier-qui-nexiste-pas: No such file or directory
  • Quelle commande a échoué ? cd.
  • Quel est le problème ? « No such file or directory » = aucun fichier ni dossier de ce nom à cet endroit.
  • Comment corriger ? Trois pistes, dans l'ordre : (1) pwd — suis-je au bon endroit ? (2) ls — le dossier existe-t-il vraiment, et sous quelle orthographe ? (3) retaper en utilisant Tab, ce qui rend la faute de frappe impossible.

Commentaire : note bien le format programme: commande: sujet: problème. Presque tous les messages Unix suivent ce schéma. Une fois que tu le vois, tu les lis tous.

Corrigé 10 — Rédiger une question technique

Exemple de réponse attendue :

Contexte — Je débute en Java. Je suis sous Windows 11, avec VS Code et le JDK 21. Ce que j'ai fait — Dans le dossier formation-java\exos, j'ai un fichier Bonjour.java contenant une classe Bonjour avec une méthode main. Je lance java Bonjour.java dans le terminal intégré de VS Code. Ce que j'attendais — L'affichage de « Bonjour Alex » dans le terminal. Ce qui s'est passé — J'obtiens : Error: Could not find or load main class Bonjour. Ce que j'ai déjà essayéjava -version fonctionne et affiche 21. J'ai vérifié avec ls que Bonjour.java est bien dans le dossier courant. J'ai cherché l'erreur sur internet, j'ai vu qu'elle est souvent liée au nom de la classe ou au dossier, mais je ne comprends pas lequel des deux s'applique ici. Ma question — Le nom du fichier doit-il correspondre exactement au nom de la classe, majuscule comprise, et est-ce que cela peut expliquer ce message ?

Commentaire : ce qui rend cette question bonne, ce n'est pas la politesse, c'est qu'elle est reproductible. Une personne qui te lit peut refaire exactement ce que tu as fait. Et bien souvent, en l'écrivant, tu trouves toi-même : ici, l'erreur venait probablement d'un fichier nommé bonjour.java avec une classe Bonjour.


11. Mini-projet de fin de fiche — « Mon QG de formation »

Objectif : construire, uniquement au terminal puis dans VS Code, l'espace de travail que tu utiliseras pendant toute ta formation. À la fin, tu auras un vrai lieu à toi.

Étape 1 — L'arborescence. Crée dans ton dossier personnel :

formation-java/
├── 01-fondations/
├── 02-algorithmique/
├── 03-java-bases/
├── notes/
│   └── aide-memoire-terminal.md
├── journal-de-bord.md
└── README.md

Étape 2 — Le journal de bord. Crée journal-de-bord.md au terminal, puis ouvre-le dans VS Code et remplis-le sur ce modèle :

# Journal de bord — Formation Java

## Semaine 1

### Ce que j'ai appris
-

### Ce qui m'a bloqué
-

### Comment je m'en suis sortie
-

### Question à creuser
-

Étape 3 — L'aide-mémoire. Dans notes/aide-memoire-terminal.md, écris avec tes propres mots un tableau des 15 commandes de la section 4.4 : la commande, ce qu'elle fait, un exemple concret que tu as réellement tapé. Ne recopie pas cette fiche : reformule. C'est la reformulation qui ancre.

Étape 4 — Le README. Dans README.md, écris en 10 lignes : qui tu es, ton objectif, ton rythme hebdomadaire, la date de début. Tu le reliras dans six mois, et ça fera un drôle d'effet.

Étape 5 — Vérification finale. Depuis formation-java/, prouve que tout est en place :

ls -R                        # l'arborescence complète
find . -name "*.md"          # tous tes fichiers markdown
grep -rn "Java" .            # où apparaît le mot Java

Critères de réussite :

  • [ ] L'arborescence est créée sans une seule faute de frappe (utilise Tab).
  • [ ] Aucun nom de dossier ne contient d'espace ni d'accent.
  • [ ] Les 3 fichiers .md existent et contiennent du texte.
  • [ ] Tous sont en UTF-8 (vérifié dans la barre du bas de VS Code).
  • [ ] Tu peux ouvrir journal-de-bord.md en 3 secondes au clavier (Ctrl+P).
  • [ ] Tu sais expliquer à voix haute la différence entre > et >>.

⏱️ Compte 1 h à 1 h 30. Si tu bloques, relis la section concernée avant de chercher ailleurs.


12. Checklist d'auto-évaluation — « Je sais faire… »

Coche honnêtement. Tout ce qui n'est pas coché mérite une relecture ciblée, pas de la culpabilité.

Comprendre la machine

  • [ ] J'explique avec mes mots ce qu'est un programme.
  • [ ] Je distingue compilation et interprétation, et je sais où Java se place.
  • [ ] Je sais ce que fait le CPU, la RAM, le disque, et pourquoi on perd son travail quand on n'enregistre pas.
  • [ ] Je sais ce qu'est la JVM et pourquoi elle rend Java portable.

Les fichiers

  • [ ] Je dessine l'arborescence de mon dossier de formation de mémoire.
  • [ ] Je distingue chemin absolu et chemin relatif, et je sais convertir l'un en l'autre.
  • [ ] Je sais ce que valent ., .. et ~.
  • [ ] Je nomme mes fichiers sans espaces ni accents, sans y penser.

Le terminal

  • [ ] Je sais toujours où je suis (pwd) et ce qu'il y a autour (ls).
  • [ ] Je navigue avec cd en chemins relatifs.
  • [ ] Je crée, copie, déplace, renomme, supprime des fichiers et des dossiers.
  • [ ] Je lis un fichier avec cat et j'écris dedans avec > et >>, en connaissant la différence.
  • [ ] Je cherche un fichier avec find et du texte avec grep.
  • [ ] J'utilise Tab par réflexe, et ↑ pour rappeler mes commandes.
  • [ ] Je sais interrompre un programme avec Ctrl+C.
  • [ ] Je connais les dangers de rm -rf et je vérifie avant de supprimer.

Texte et encodage

  • [ ] Je distingue fichier texte et fichier binaire.
  • [ ] Je sais ce qu'est UTF-8 et pourquoi é coûte 2 octets.
  • [ ] Je sais ce que sont LF et CRLF, et je vois l'indicateur dans VS Code.

VS Code

  • [ ] J'ouvre un dossier de projet, pas un fichier isolé.
  • [ ] J'ai installé le pack Java et Error Lens.
  • [ ] J'utilise Ctrl+S, Ctrl+P, Ctrl+Shift+P et Ctrl+` sans réfléchir.
  • [ ] J'ouvre le terminal intégré depuis VS Code.

Autonomie

  • [ ] Je lis un message d'erreur en entier avant de réagir.
  • [ ] J'identifie le fichier et la ligne dans une erreur Java.
  • [ ] Je formule une recherche internet efficace, en anglais.
  • [ ] Je rédige une question technique complète en 6 points.
  • [ ] J'accepte de ne pas tout retenir, parce que je sais retrouver.

🎁 Bonus : ta feuille de route mentale

Fiche 01 ─── les fondations (tu es ici)

Fiche 02 ─── algorithmique et logique (le raisonnement, sans langage)

Fiche 03 ─── Java : premiers pas (installation, variables, affichage)

   └─── ... puis objets, collections, Git, tests, base de données, Spring, web

Tu viens d'apprendre le vocabulaire et les gestes du métier. Ce n'était pas encore « du code », et pourtant c'est ce que les développeurs font toute la journée : naviguer, chercher, lire des erreurs, poser des questions.

Avant de passer à la fiche 02 : remplis ton journal de bord. Note ce qui t'a surpris. Puis va prendre l'air, ton cerveau consolide pendant ce temps-là. 🌿