<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Japan on kenji.blog</title><link>http://kenji.blog/fr/tags/japan/</link><description>Recent content in Japan on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/tags/japan/index.xml" rel="self" type="application/rss+xml"/><item><title>État actuel et défis de l'enseignement de l'informatique au Japon : Les conséquences de la programmation obligatoire</title><link>http://kenji.blog/fr/p/japan-it-education-aftermath/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/japan-it-education-aftermath/</guid><description>&lt;img src="http://kenji.blog/p/japan-it-education-aftermath/img/eyecatch.jpg" alt="Featured image of post État actuel et défis de l'enseignement de l'informatique au Japon : Les conséquences de la programmation obligatoire" />&lt;h2 id="1-introduction--la-lumière-et-lombre-de-la-programmation-obligatoire">1. Introduction : La lumière et l&amp;rsquo;ombre de la programmation obligatoire
&lt;/h2>&lt;p>L&amp;rsquo;enseignement de l&amp;rsquo;informatique au Japon a connu un changement de paradigme sans précédent ces dernières années, avec la programmation devenue obligatoire dans les écoles primaires en 2020, étendue dans les cours de technologie des collèges en 2021, et la nouvelle matière obligatoire « Information I » dans les lycées en 2022. À la base de cette série de politiques se trouve une demande nationale et pressante : cultiver la pensée logique (pensée algorithmique) pour survivre à l&amp;rsquo;ère de la Society 5.0 (société super-intelligente) et résoudre la pénurie chronique de ressources humaines informatiques hautement qualifiées dans l&amp;rsquo;industrie.&lt;/p>
&lt;p>Cependant, en regardant la ligne de front de l&amp;rsquo;enseignement, un fossé énorme apparaît entre l&amp;rsquo;idéal imaginé par le gouvernement et la réalité. Le problème le plus grave est la confusion totale entre « apprendre la programmation comme moyen » et « maîtriser l&amp;rsquo;informatique (Computer Science) comme discipline universitaire ». De plus, des problèmes structurels s&amp;rsquo;accumulent et doivent être résolus, tels que les limites techniques dues aux contraintes matérielles de l&amp;rsquo;infrastructure informatique déployée simultanément à l&amp;rsquo;échelle nationale, et le manque de compétences professionnelles des enseignants.&lt;/p>
&lt;p>Cet article résume les conséquences de la programmation obligatoire au Japon et détaille de manière approfondie et technique les problèmes structurels et fondamentaux actuels de l&amp;rsquo;enseignement de l&amp;rsquo;informatique, du point de vue de la théorie de l&amp;rsquo;informatique, des contraintes d&amp;rsquo;architecture matérielle et de la compétitivité industrielle mondiale. Ce n&amp;rsquo;est pas seulement une théorie éducative, mais une réflexion de 10 000 mots sur l&amp;rsquo;avenir du Japon du point de vue du génie logiciel.&lt;/p>
&lt;h2 id="2-le-piège-de-la-programmation-visuelle--le-fossé-profond-entre-scratch-et-le-codage-textuel">2. Le piège de la programmation visuelle : Le fossé profond entre Scratch et le codage textuel
&lt;/h2>&lt;p>Le standard de facto de l&amp;rsquo;enseignement de la programmation à l&amp;rsquo;école primaire est le langage de programmation visuelle (programmation par blocs), représenté par « Scratch » développé par le MIT Media Lab. L&amp;rsquo;utilisation d&amp;rsquo;une interface graphique intuitive pour assembler des blocs comme un puzzle permet d&amp;rsquo;apprendre de manière visuelle et intuitive les trois structures de contrôle algorithmiques de base : « séquence », « sélection » et « itération ». C&amp;rsquo;est une grande invention qui mérite d&amp;rsquo;être saluée comme une introduction à la programmation.&lt;/p>
&lt;p>Cependant, il y a un piège majeur ici, que l&amp;rsquo;on pourrait appeler le « piège de l&amp;rsquo;abstraction ». Il s&amp;rsquo;agit du fait cruel qu&amp;rsquo;« il est extrêmement difficile de passer de la programmation visuelle à de vrais langages de programmation textuels (Python, JavaScript, C++, Rust, etc.), et que de nombreux apprenants abandonnent à ce stade ».&lt;/p>
&lt;h3 id="le-mur-de-labstraction-et-la-boîte-noire-de-linformatique">Le mur de l&amp;rsquo;abstraction et la boîte noire de l&amp;rsquo;informatique
&lt;/h3>&lt;p>Les environnements de programmation visuelle comme Scratch abstraient et cachent (encapsulent) intentionnellement des éléments importants qui constituent le fondement de l&amp;rsquo;informatique, tels que la syntaxe complexe de la programmation, les systèmes de typage stricts et la gestion du cycle de vie de la mémoire. C&amp;rsquo;est excellent pour réduire la charge cognitive des débutants, mais cela devient un énorme obstacle pour passer à la véritable ingénierie à l&amp;rsquo;étape suivante. Dans le développement de logiciels réel, la compréhension de la portée des variables (variables locales et globales), des structures de données complexes (tableaux, listes chaînées, tables de hachage, arbres binaires de recherche, graphes), des pointeurs et des zones mémoire de tas et de pile est absolument indispensable.&lt;/p>
&lt;p>Le diagramme Mermaid ci-dessous visualise les obstacles d&amp;rsquo;apprentissage et les points d&amp;rsquo;abandon (décrochage) auxquels les débutants sont confrontés lors de la transition de la programmation visuelle vers l&amp;rsquo;informatique fondamentale.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;École primaire : Scratch (Visuel / par blocs)&amp;#34;] --&amp;gt; B{&amp;#34;Collège : Le mur du passage aux langages textuels&amp;#34;}
B --&amp;gt;|&amp;#34;Abandon dû à des erreurs de syntaxe strictes&amp;#34;| C[&amp;#34;Décrochage (Allergie à la syntaxe)&amp;#34;]
B --&amp;gt;|&amp;#34;Manque de compréhension des variables et du typage statique&amp;#34;| D[&amp;#34;Décrochage (Le mur des types)&amp;#34;]
B --&amp;gt;|&amp;#34;Transition réussie&amp;#34;| E[&amp;#34;Lycée : Information I (Bases de Python/JavaScript, etc.)&amp;#34;]
E --&amp;gt; F{&amp;#34;Le mur de la conception d&amp;#39;algorithmes et des structures de données&amp;#34;}
F --&amp;gt;|&amp;#34;Ignorance de la complexité temporelle et spatiale&amp;#34;| G[&amp;#34;Code inefficace (Dégradation des performances par création massive de O(N^2))&amp;#34;]
F --&amp;gt;|&amp;#34;Boîte noire de la gestion de la mémoire et des références&amp;#34;| H[&amp;#34;Devenir un simple codeur se limitant aux appels d&amp;#39;API superficiels&amp;#34;]
F --&amp;gt;|&amp;#34;Percée conceptuelle&amp;#34;| I[&amp;#34;Apprentissage approfondi de la CS (C/C++, Java, architecture bas niveau)&amp;#34;]
I --&amp;gt; J[&amp;#34;Professionnel de l&amp;#39;informatique de haut niveau ardemment désiré par l&amp;#39;industrie&amp;#34;]
classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;
classDef error fill:#ffcccc,stroke:#cc0000,stroke-width:2px;
classDef success fill:#ccffcc,stroke:#00cc00,stroke-width:2px;
class C,D,G,H error;
class J success;
&lt;/pre>
&lt;p>Comme le montre clairement cet organigramme, le simple fait d&amp;rsquo;accumuler l&amp;rsquo;expérience d&amp;rsquo;écrire « du code pour déplacer un personnage à l&amp;rsquo;écran » ne permet pas de former de véritables ingénieurs logiciels capables de concevoir des architectures de systèmes distribués évolutives et d&amp;rsquo;optimiser les performances à la milliseconde près. Entre la tâche d&amp;rsquo;assembler des blocs colorés dans Scratch avec une souris et celle de décrypter le code source en C du noyau Linux pour suivre le comportement de la pile TCP/IP, il y a un gouffre de compréhension conceptuelle absolu qui ne peut se résumer à une simple « différence de langage utilisé ».&lt;/p>
&lt;h2 id="3-les-limites-du-codage-sans--mathématiques--et-sans--logique-discrète---lapproche-par-la-théorie-de-la-complexité">3. Les limites du codage sans « mathématiques » et sans « logique discrète » : L&amp;rsquo;approche par la théorie de la complexité
&lt;/h2>&lt;p>La plus grande faiblesse et le défaut fatal du programme d&amp;rsquo;enseignement de la programmation au Japon est le manque écrasant d&amp;rsquo;intégration entre les « compétences de codage » et les « mathématiques discrètes ». Dans l&amp;rsquo;enseignement de l&amp;rsquo;informatique de premier plan, comme aux États-Unis ou en Inde, l&amp;rsquo;accent est mis sur l&amp;rsquo;efficacité algorithmique, la logique mathématique et les preuves mathématiques plutôt que sur la syntaxe du langage de programmation elle-même. En effet, le code n&amp;rsquo;est qu&amp;rsquo;une traduction de formules mathématiques.&lt;/p>
&lt;h3 id="la-domination-absolue-de-la-complexité-temporelle-et-spatiale-notation-grand-o">La domination absolue de la complexité temporelle et spatiale (Notation Grand O)
&lt;/h3>&lt;p>Pour évaluer et concevoir les performances d&amp;rsquo;un logiciel, les concepts de complexité temporelle (Time Complexity) et de complexité spatiale (Space Complexity) sont incontournables. La notation asymptotique de Landau (Big O Notation) montre comment le temps d&amp;rsquo;exécution et la consommation de mémoire augmentent en fonction de la taille $N$ des données d&amp;rsquo;entrée d&amp;rsquo;un algorithme.&lt;/p>
&lt;p>La définition mathématique stricte de $f(x) = O(g(x))$ est la suivante :&lt;/p>
$$
\exists C > 0, \exists x_0 > 0, \forall x > x_0, |f(x)| \le C \cdot |g(x)|
$$&lt;p>Dans l&amp;rsquo;enseignement de l&amp;rsquo;informatique au Japon, lorsqu&amp;rsquo;on apprend par exemple le tri de données, il arrive souvent que l&amp;rsquo;on se contente d&amp;rsquo;appeler la méthode intégrée &lt;code>array.sort()&lt;/code> en Python. Cependant, ce qui est vraiment requis en ingénierie informatique, c&amp;rsquo;est de comprendre mathématiquement et de prouver pourquoi le tri à bulles simple n&amp;rsquo;est jamais utilisé en pratique, et pourquoi le tri rapide, le tri fusion ou le Timsort sont adoptés comme bibliothèques standard.&lt;/p>
&lt;p>Voici les complexités temporelles moyennes des algorithmes de tri représentatifs :&lt;/p>
&lt;ul>
&lt;li>Tri à bulles (Bubble Sort) : $O(N^2)$&lt;/li>
&lt;li>Tri par sélection (Selection Sort) : $O(N^2)$&lt;/li>
&lt;li>Tri par insertion (Insertion Sort) : $O(N^2)$&lt;/li>
&lt;li>Tri fusion (Merge Sort) : $O(N \log N)$&lt;/li>
&lt;li>Tri rapide (Quick Sort) : $O(N \log N)$&lt;/li>
&lt;li>Tri par tas (Heap Sort) : $O(N \log N)$&lt;/li>
&lt;/ul>
&lt;p>Par exemple, la complexité temporelle $T(N)$ du tri fusion est exprimée par la relation de récurrence suivante, basée sur le paradigme « diviser pour régner » :&lt;/p>
$$
T(N) = 2T\left(\frac{N}{2}\right) + O(N)
$$&lt;p>En résolvant cette équation de récurrence à l&amp;rsquo;aide du théorème maître (Master Theorem), on en déduit la complexité idéale $T(N) = O(N \log N)$ :&lt;/p>
$$
T(N) = \Theta(N \log_2 N)
$$&lt;p>Dans l&amp;rsquo;analyse de données massives moderne et le traitement du trafic à l&amp;rsquo;échelle du web, $N$ atteint l&amp;rsquo;ordre de centaines de millions ou de milliards. Si un programmeur ignorant implémente un algorithme inefficace en $O(N^2)$, un volume de données $N = 10^6$ nécessitera $10^{12}$ (mille milliards) d&amp;rsquo;opérations de comparaison inutiles, ce qui figera et plantera de facto le système. En revanche, un algorithme en $O(N \log N)$ s&amp;rsquo;achèvera en environ $2 \times 10^7$ (20 millions) d&amp;rsquo;opérations. Prétendre « savoir programmer » sans ces fondements mathématiques cruels revient à construire un gratte-ciel sans connaître la mécanique des structures ; c&amp;rsquo;est extrêmement dangereux.&lt;/p>
&lt;h2 id="4-la-boîte-noire-de-la-gestion-de-la-mémoire-et-de-larchitecture-des-systèmes">4. La boîte noire de la gestion de la mémoire et de l&amp;rsquo;architecture des systèmes
&lt;/h2>&lt;p>Un problème plus profond est l&amp;rsquo;absence totale de compréhension de la gestion de la mémoire et de l&amp;rsquo;architecture CPU. Les apprenants qui n&amp;rsquo;ont appris que des langages de haut niveau dotés de ramasse-miettes (GC), comme Python et JavaScript enseignés aujourd&amp;rsquo;hui dans les écoles, ne se soucieront jamais de l&amp;rsquo;endroit où les variables et les objets sont placés dans la mémoire physique (RAM) (tas ou pile), comment ils sont alloués, et quand ou comment ils sont libérés.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Exemple d&amp;#39;allocation de mémoire explicite et directe et de manipulation de pointeurs en langage C
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdlib.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1000000&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Allocation dynamique et continue de mémoire dans la zone du tas (Appel système à l&amp;#39;OS)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">array&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="nf">malloc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">array&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">stderr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Memory allocation failed! Out of memory.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Initialisation du tableau via l&amp;#39;arithmétique des pointeurs
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">array&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Équivalent à array[i] = i * 2
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Libération explicite des ressources pour éviter les fuites de mémoire
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">free&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">array&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">array&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Prévention des pointeurs fantômes
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>La connaissance du concept de pointeurs (référence directe à une adresse mémoire), de la disposition des données pour maximiser le taux de réussite de la hiérarchie de la mémoire cache du CPU (caches L1/L2/L3), ainsi que des conditions de concurrence et du contrôle d&amp;rsquo;exclusion mutuelle (Mutex/Semaphore) dans des environnements multithreads est absolument indispensable pour développer des systèmes backend hautes performances, des moteurs de jeux 3D, ou des systèmes embarqués pour l&amp;rsquo;IoT. Le programme actuel du ministère de l&amp;rsquo;Éducation se limite à « faire fonctionner des applications de manière superficielle » et s&amp;rsquo;écarte considérablement de l&amp;rsquo;objectif académique originel de « comprendre les profondeurs de l&amp;rsquo;informatique ».&lt;/p>
&lt;h2 id="5-le-mur-des-bases-de-données-et-de-la-persistance--labsence-de-lalgèbre-relationnelle">5. Le mur des bases de données et de la persistance : L&amp;rsquo;absence de l&amp;rsquo;algèbre relationnelle
&lt;/h2>&lt;p>Dans les applications modernes, le stockage et la recherche de données (persistance) sont des thèmes inévitables. Cependant, une grande partie de l&amp;rsquo;enseignement scolaire se limite au « traitement des données en mémoire », qui disparaissent à la fin de l&amp;rsquo;exécution du programme. La théorie mathématique qui sous-tend les bases de données relationnelles (SGBDR) et SQL, à savoir l&amp;rsquo;« algèbre relationnelle » proposée par le Dr Edgar F. Codd, est rarement enseignée.&lt;/p>
&lt;p>Les opérations sur les bases de données sont définies par les opérations fondamentales de la théorie des ensembles :&lt;/p>
&lt;ul>
&lt;li>Sélection (Selection, $\sigma$) : Extraction des n-uplets (lignes) remplissant une condition&lt;/li>
&lt;li>Projection (Projection, $\pi$) : Extraction d&amp;rsquo;attributs (colonnes) spécifiques&lt;/li>
&lt;li>Jointure (Join, $\bowtie$) : Intersection conditionnelle de plusieurs relations&lt;/li>
&lt;/ul>
&lt;p>De plus, l&amp;rsquo;apprentissage de la structure de l&amp;rsquo;« index B-Tree », qui permet de rechercher instantanément les données cibles parmi un nombre massif d&amp;rsquo;enregistrements, constitue la meilleure application pratique des structures de données. Le B-Tree garantit une vitesse de recherche de $O(\log N)$ tout en minimisant le nombre d&amp;rsquo;E/S disque. Il est impossible de construire un système robuste sans connaître les propriétés ACID (Atomicity, Consistency, Isolation, Durability) des transactions.&lt;/p>
&lt;h2 id="6-sécurité-et-cryptographie--la-difficulté-de-la-factorisation-des-nombres-premiers-pilier-des-infrastructures-sociales">6. Sécurité et cryptographie : La difficulté de la factorisation des nombres premiers, pilier des infrastructures sociales
&lt;/h2>&lt;p>L&amp;rsquo;enseignement de l&amp;rsquo;informatique aborde une éducation superficielle à la sécurité, du type « Utilisons des mots de passe complexes » ou « Ne cliquons pas sur des liens suspects », mais n&amp;rsquo;enseigne presque jamais les mathématiques de la « cryptographie » qui soutient fondamentalement la société d&amp;rsquo;Internet.&lt;/p>
&lt;p>Les communications HTTPS et les signatures numériques que nous utilisons quotidiennement sont protégées par la cryptographie à clé publique, comme le chiffrement RSA. La sécurité du chiffrement RSA repose sur la difficulté mathématique (considérée comme un problème NP-intermédiaire) qu&amp;rsquo;« il est impossible pour un ordinateur classique actuel de factoriser d&amp;rsquo;énormes nombres entiers en nombres premiers dans un délai raisonnable ».&lt;/p>
&lt;p>Les formules mathématiques à la base du chiffrement RSA sont une belle application de la fonction indicatrice d&amp;rsquo;Euler et du petit théorème de Fermat.&lt;/p>
&lt;ol>
&lt;li>Choisir deux grands nombres premiers $p$ et $q$.&lt;/li>
&lt;li>Calculer $n = p \times q$ (cela fait partie de la clé publique).&lt;/li>
&lt;li>Calculer $\phi(n) = (p-1)(q-1)$.&lt;/li>
&lt;li>Choisir $e$ et $d$ tels que $e \times d \equiv 1 \pmod{\phi(n)}$.&lt;/li>
&lt;li>Chiffrement : $C \equiv M^e \pmod{n}$&lt;/li>
&lt;li>Déchiffrement : $M \equiv C^d \pmod{n}$&lt;/li>
&lt;/ol>
&lt;p>Ainsi, l&amp;rsquo;enseignement de la programmation ne révèle sa véritable puissance que lorsqu&amp;rsquo;il est étroitement lié à l&amp;rsquo;enseignement des mathématiques. Le processus de traduction des formules mathématiques en code et de leur implémentation sociale est l&amp;rsquo;essence même de la science.&lt;/p>
&lt;h2 id="7-le-concept-giga-school-et-les-limites-désespérantes-des-infrastructures--chromebook-et-ide-cloud">7. Le concept GIGA School et les limites désespérantes des infrastructures : Chromebook et IDE cloud
&lt;/h2>&lt;p>Pour évoquer l&amp;rsquo;enseignement de l&amp;rsquo;informatique au Japon, il est impossible d&amp;rsquo;ignorer le « Concept GIGA School », un projet national impulsé par le ministère de l&amp;rsquo;Éducation avec un budget colossal. Ce projet, qui dote chaque élève d&amp;rsquo;école primaire et de collège à travers le pays d&amp;rsquo;« un terminal par personne » et d&amp;rsquo;un environnement réseau à haut débit, était censé servir de catalyseur pour rattraper le retard numérique. Cependant, les spécifications matérielles et l&amp;rsquo;architecture des terminaux distribués constituent un frein majeur à un véritable enseignement de la programmation.&lt;/p>
&lt;h3 id="terminaux-bas-de-gamme-et-perte-de-lenvironnement-de-développement-local">Terminaux bas de gamme et perte de l&amp;rsquo;environnement de développement local
&lt;/h3>&lt;p>La plupart des terminaux déployés comme normes du concept GIGA School sont des Chromebooks, des iPads ou des appareils Windows d&amp;rsquo;entrée de gamme extrêmement bon marché. Leurs spécifications typiques sont les suivantes :&lt;/p>
&lt;ul>
&lt;li>CPU : Intel Celeron ou processeurs ARM d&amp;rsquo;entrée de gamme&lt;/li>
&lt;li>Mémoire (RAM) : 4 Go (À peine suffisant pour faire tourner un OS moderne)&lt;/li>
&lt;li>Stockage (eMMC) : 32 Go à 64 Go (Vitesse d&amp;rsquo;E/S extrêmement lente)&lt;/li>
&lt;/ul>
&lt;p>Avec ces contraintes matérielles dérisoires, il est pratiquement impossible de mettre en place un « environnement de développement local » comme le font quotidiennement les ingénieurs professionnels. Lancer des conteneurs Linux avec Docker, exécuter un IDE lourd comme Visual Studio Code avec toutes ses fonctionnalités, ou démarrer un serveur local Node.js ou Python et installer de lourdes bibliothèques provoque instantanément un épuisement de la mémoire et un gel du système.&lt;/p>
&lt;p>En conséquence, les établissements scolaires se retrouvent acculés à dépendre entièrement des IDE cloud qui fonctionnent dans le navigateur (Google Colaboratory, Replit, ou des outils Web légers propriétaires des éditeurs de manuels).&lt;/p>
&lt;pre class="mermaid">
flowchart LR
subgraph &amp;#34;Terminaux GIGA (Chromebook / iPad / Windows bas de gamme)&amp;#34;
A[&amp;#34;Navigateur Web (Rendu de l&amp;#39;UI uniquement)&amp;#34;]
end
subgraph &amp;#34;Infrastructure cloud distante (AWS / GCP, etc.)&amp;#34;
B[&amp;#34;Serveur Web de l&amp;#39;IDE Cloud&amp;#34;]
C[&amp;#34;Environnement de compilation/exécution backend&amp;#34;]
D[&amp;#34;Stockage de fichiers persistant&amp;#34;]
end
A --&amp;gt;|&amp;#34;HTTP/WebSocket通信: 学校の細い回線による深刻な遅延&amp;#34;| B
B &amp;lt;--&amp;gt; C
B &amp;lt;--&amp;gt; D
&lt;/pre>
&lt;p>La dépendance totale aux IDE cloud entraîne les graves lacunes pédagogiques suivantes :&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Incompréhension du système de fichiers et de l&amp;rsquo;architecture de l&amp;rsquo;OS&lt;/strong> : Sans environnement local, les connaissances indispensables qu&amp;rsquo;un ingénieur informatique devrait manier comme sa propre respiration, telles que la structure des répertoires, les concepts de chemins absolus et relatifs, la configuration des variables d&amp;rsquo;environnement, les permissions de fichiers et les opérations de l&amp;rsquo;OS en CLI (Command Line Interface), ne sont jamais acquises.&lt;/li>
&lt;li>&lt;strong>Latence réseau et vulnérabilité de l&amp;rsquo;infrastructure&lt;/strong> : Comme une connexion permanente est requise, dès que tous les élèves de l&amp;rsquo;école se connectent simultanément, la bande passante du réseau de l&amp;rsquo;école sature, les navigateurs gèlent et l&amp;rsquo;apprentissage s&amp;rsquo;arrête complètement, un incident qui se produit fréquemment dans tout le pays.&lt;/li>
&lt;li>&lt;strong>Privation de l&amp;rsquo;expérience du contrôle de version (Git)&lt;/strong> : Les élèves sont privés de l&amp;rsquo;occasion d&amp;rsquo;assimiler, via un écran de terminal noir, les concepts de Git et de GitHub permettant de gérer l&amp;rsquo;historique des modifications du code source et de développer en collaboration avec des équipes du monde entier.&lt;/li>
&lt;/ol>
&lt;p>Lorsqu&amp;rsquo;un ingénieur logiciel professionnel développe, la manipulation dans le terminal (shell) est un fondement absolu. Taper des commandes comme &lt;code>ls&lt;/code>, &lt;code>cd&lt;/code>, &lt;code>grep&lt;/code>, &lt;code>chmod&lt;/code>, &lt;code>git rebase&lt;/code> et expérimenter l&amp;rsquo;interaction directe et ardue avec le noyau de l&amp;rsquo;OS local est absolument nécessaire pour former de véritables talents informatiques. Se contenter de jouer dans le bac à sable d&amp;rsquo;un Chromebook ne produira jamais des ingénieurs full-stack capables d&amp;rsquo;avoir une vue d&amp;rsquo;ensemble du système.&lt;/p>
&lt;h2 id="8-un-fossé-désespéré-avec-le-reste-du-monde--le-décalage-entre-les-exigences-de-lindustrie-et-lenseignement-scolaire">8. Un fossé désespéré avec le reste du monde : Le décalage entre les exigences de l&amp;rsquo;industrie et l&amp;rsquo;enseignement scolaire
&lt;/h2>&lt;p>Le dernier défi, et non des moindres, auquel l&amp;rsquo;enseignement de l&amp;rsquo;informatique au Japon est confronté, qui peut être qualifié de crise nationale, est le déclin écrasant de sa compétitivité dans un contexte mondial.&lt;/p>
&lt;h3 id="lenseignement-féroce-de-linformatique-à-létranger">L&amp;rsquo;enseignement féroce de l&amp;rsquo;informatique à l&amp;rsquo;étranger
&lt;/h3>&lt;p>Au Royaume-Uni (UK), une matière appelée « Computing » est obligatoire dès l&amp;rsquo;âge de 5 ans (Key Stage 1) depuis 2014. Leur programme ne se limite pas à une simple « expérience de programmation », mais aborde une informatique académique et systématique très poussée, allant de la conception logique d&amp;rsquo;algorithmes à la compréhension des circuits logiques via l&amp;rsquo;algèbre de Boole, la topologie des réseaux et l&amp;rsquo;architecture matérielle.&lt;/p>
&lt;p>Aux États-Unis, il existe un programme standard strict allant de la maternelle à la fin du lycée (K-12), défini par la CSTA (Computer Science Teachers Association). Dans le cours AP (Advanced Placement) Computer Science A, suivi par les lycéens, la programmation orientée objet en Java, le polymorphisme, le traitement récursif, l&amp;rsquo;implémentation de structures de données et l&amp;rsquo;évaluation de la complexité algorithmique sont exigés à un niveau élevé, équivalent à la première année d&amp;rsquo;université. Il n&amp;rsquo;est plus nécessaire de mentionner la sévérité de l&amp;rsquo;enseignement STEM en Inde ou en Chine, ni la profondeur de l&amp;rsquo;élite qui en émerge.&lt;/p>
&lt;h3 id="le-décalage-désespérant-entre-les-compétences-requises-et-les-compétences-enseignées">Le décalage désespérant entre les compétences requises et les compétences enseignées
&lt;/h3>&lt;p>Les exigences de l&amp;rsquo;industrie moderne, en particulier des méga-entreprises mondiales (comme les GAFAM), envers les nouveaux ingénieurs logiciels nouvellement diplômés se durcissent à une vitesse effrayante d&amp;rsquo;année en année. Une expertise vaste et approfondie est requise, allant de la construction d&amp;rsquo;infrastructures cloud natives (AWS, GCP, Kubernetes) à la conception de systèmes distribués à base de microservices, l&amp;rsquo;implémentation de pipelines de Machine Learning et des connaissances pointues en sécurité.&lt;/p>
&lt;p>Le graphique ci-dessous illustre conceptuellement le gouffre désespérant entre le niveau de compétences fourni par l&amp;rsquo;enseignement scolaire actuel au Japon et le niveau exigé par la ligne de front de l&amp;rsquo;industrie.&lt;/p>
&lt;pre class="mermaid">
xychart-beta
title Compétences enseignées à l&amp;#39;école au Japon vs Niveau requis par l&amp;#39;industrie
x-axis [&amp;#34;Langages visuels&amp;#34;, &amp;#34;Syntaxe de base/variables&amp;#34;, &amp;#34;Algorithmes/Complexité&amp;#34;, &amp;#34;OS/Réseaux&amp;#34;, &amp;#34;DB/Conception de systèmes&amp;#34;, &amp;#34;Cloud/Architecture distribuée&amp;#34;]
y-axis &amp;#34;Niveau d&amp;#39;atteinte / Exigence (%)&amp;#34; 0 --&amp;gt; 100
line &amp;#34;Niveau atteint dans l&amp;#39;enseignement scolaire actuel&amp;#34; [95, 60, 15, 5, 2, 0]
line &amp;#34;Niveau exigé par l&amp;#39;industrie et la tech&amp;#34; [0, 20, 85, 90, 95, 100]
&lt;/pre>
&lt;p>Pour combler ce fossé énorme (Death Valley), un changement de paradigme radical de l&amp;rsquo;enseignement scolaire et des investissements massifs sont nécessaires. Alors qu&amp;rsquo;il y a une pénurie nationale flagrante de professeurs spécialisés en « Information », le système actuel, où des professeurs de mathématiques, de sciences ou de technologie enseignent la programmation à temps partiel et sans formation suffisante, ne pourra jamais former des ingénieurs de premier plan capables de rivaliser au niveau mondial.&lt;/p>
&lt;h2 id="9-leffondrement-de-la-valeur-du--codage--à-lère-de-lia-llm">9. L&amp;rsquo;effondrement de la valeur du « codage » à l&amp;rsquo;ère de l&amp;rsquo;IA (LLM)
&lt;/h2>&lt;p>Ce qui complique encore la situation, c&amp;rsquo;est la prolifération explosive des grands modèles de langage (LLM) comme ChatGPT et des assistants de codage IA comme GitHub Copilot. À une époque où l&amp;rsquo;IA peut instantanément générer un code parfait à partir d&amp;rsquo;instructions en langage naturel et rédiger même les codes de test, la valeur marchande d&amp;rsquo;un simple « codeur (Coder) » qui ne fait que « connaître la syntaxe Python » ou « savoir appeler une API » s&amp;rsquo;effondre rapidement.&lt;/p>
&lt;p>À l&amp;rsquo;ère de l&amp;rsquo;IA, on n&amp;rsquo;attend pas d&amp;rsquo;un ingénieur humain qu&amp;rsquo;il ait de la mémoire pour la syntaxe des langages de programmation. Les compétences exigées sont les suivantes :&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Définition des exigences et modélisation du domaine&lt;/strong> : La capacité d&amp;rsquo;extraire des problèmes complexes du monde réel à résoudre et de les modéliser en tant que système.&lt;/li>
&lt;li>&lt;strong>Conception d&amp;rsquo;architecture&lt;/strong> : La capacité de concevoir le plan d&amp;rsquo;ensemble d&amp;rsquo;un système pour garantir son évolutivité, sa disponibilité et sa maintenabilité.&lt;/li>
&lt;li>&lt;strong>Vérification mathématique et logique&lt;/strong> : La capacité de vérifier théoriquement et de prouver que le code généré par l&amp;rsquo;IA ne comporte pas de failles de sécurité ou de goulots d&amp;rsquo;étranglement de complexité.&lt;/li>
&lt;/ol>
&lt;p>Ironiquement, toutes ces compétences ne relèvent pas de la « programmation superficielle », mais des domaines profonds et abstraits de l&amp;rsquo;« informatique et des mathématiques ». Si l&amp;rsquo;éducation japonaise se contente d&amp;rsquo;enseigner des « compétences en aval facilement remplaçables par l&amp;rsquo;IA », on ne peut que qualifier cela de perte nationale.&lt;/p>
&lt;h2 id="10-vers-lintégration-des-sciences-mathématiques-et-de-la-programmation--une-proposition-pour-léducation-de-la-prochaine-génération">10. Vers l&amp;rsquo;intégration des sciences mathématiques et de la programmation : Une proposition pour l&amp;rsquo;éducation de la prochaine génération
&lt;/h2>&lt;p>Dans le futur de l&amp;rsquo;enseignement de l&amp;rsquo;informatique au Japon, il est urgent de s&amp;rsquo;éloigner de l&amp;rsquo;idée que « la programmation est un but ou un simple outil » et de revenir à « l&amp;rsquo;exploration de l&amp;rsquo;informatique en tant que science mathématique ». Les langages de programmation ne sont que des outils pour exprimer la pensée, et ce sont les structures mathématiques et logiques qui les sous-tendent qui ont une valeur universelle ne s&amp;rsquo;estompant pas avec le temps.&lt;/p>
&lt;p>Par exemple, le cœur de l&amp;rsquo;intelligence artificielle (IA) et du Machine Learning est étroitement lié à l&amp;rsquo;algèbre linéaire (calculs matriciels et tenseurs), au calcul différentiel et intégral à plusieurs variables (descente de gradient) et aux probabilités et statistiques (inférence bayésienne et théorie de l&amp;rsquo;information). L&amp;rsquo;optimisation des poids dans les réseaux de neurones du Deep Learning est formulée par la règle de dérivation en chaîne (Chain Rule) à l&amp;rsquo;aide de dérivées partielles et de la rétropropagation.&lt;/p>
$$
\frac{\partial L}{\partial w_{ij}^{(l)}} = \frac{\partial L}{\partial z_i^{(l+1)}} \cdot \frac{\partial z_i^{(l+1)}}{\partial w_{ij}^{(l)}} = \delta_i^{(l+1)} \cdot a_j^{(l)}
$$&lt;p>Ce sont les personnes capables de traduire ces équations mathématiques complexes en code et d&amp;rsquo;implémenter le calcul parallèle en l&amp;rsquo;optimisant à l&amp;rsquo;extrême tout en tenant compte de l&amp;rsquo;architecture matérielle des GPU (CUDA) et des TPU qui tireront l&amp;rsquo;industrie informatique de la prochaine génération. C&amp;rsquo;est pourquoi nous devons immédiatement cesser cet enseignement superficiel consistant à faire mémoriser par cœur une syntaxe de surface, et nous orienter vers un enseignement approfondi qui interroge les principes fondamentaux (First Principles) de l&amp;rsquo;informatique.&lt;/p>
&lt;h2 id="11-conclusion--le-chemin-escarpé-vers-une-véritable-nation-informatique-et-notre-détermination">11. Conclusion : Le chemin escarpé vers une véritable nation informatique et notre détermination
&lt;/h2>&lt;p>L&amp;rsquo;obligation d&amp;rsquo;enseigner la programmation dans les années 2020 a indéniablement constitué un pas en avant en faisant prendre conscience à la société japonaise de « l&amp;rsquo;importance de l&amp;rsquo;informatique et de l&amp;rsquo;information ». Cependant, il ne s&amp;rsquo;agit là que de simples « échauffements » dans un long voyage.&lt;/p>
&lt;p>Aller au-delà du plaisir de faire bouger un chat dans Scratch pour enseigner l&amp;rsquo;émotion ressentie devant la beauté mathématique d&amp;rsquo;un algorithme en $O(N \log N)$ et l&amp;rsquo;excitation de dialoguer avec des serveurs du monde entier via des paquets TCP depuis un écran noir de terminal. Reconstruire une nouvelle infrastructure éducative pour surmonter les contraintes matérielles du concept GIGA School, former et affecter des enseignants ayant une haute expertise en informatique, et parfois impliquer de manière audacieuse des ingénieurs professionnels externes dans l&amp;rsquo;enseignement scolaire.&lt;/p>
&lt;p>Les défis auxquels l&amp;rsquo;enseignement de l&amp;rsquo;informatique au Japon est confronté sont extrêmement profonds, tenaces et complexes. Cependant, en ne détournant pas les yeux de ces défis, et en travaillant sérieusement et en collaboration entre l&amp;rsquo;industrie, le monde universitaire et le gouvernement, si nous parvenons à construire un écosystème capable de produire en continu non pas des « travailleurs capables de coder selon un cahier des charges », mais de « véritables ingénieurs capables de concevoir et de créer des systèmes à partir de zéro », alors le Japon pourra à nouveau mener le monde en tant que véritable nation informatique.&lt;/p>
&lt;p>Comment traverser la phase de « l&amp;rsquo;après » programmation obligatoire, qui est la plus difficile et la plus importante ? C&amp;rsquo;est le moment même où notre sérieux et notre détermination d&amp;rsquo;adultes sont mis à l&amp;rsquo;épreuve.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Dans cet article, nous avons esquissé la théorie de la complexité et les limites d&amp;rsquo;infrastructure du concept GIGA School. Nous aborderons des sujets informatiques plus spécialisés (comme les algorithmes de systèmes distribués et les détails de la gestion de la mémoire de bas niveau) dans les prochains articles de cette série.&lt;/em>&lt;/p></description></item></channel></rss>