<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Programming Education on kenji.blog</title><link>http://kenji.blog/es/tags/programming-education/</link><description>Recent content in Programming Education on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/es/tags/programming-education/index.xml" rel="self" type="application/rss+xml"/><item><title>Estado Actual y Desafíos de la Educación de TI en Japón: Las Consecuencias de la Programación Obligatoria</title><link>http://kenji.blog/es/p/japan-it-education-aftermath/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/es/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 Estado Actual y Desafíos de la Educación de TI en Japón: Las Consecuencias de la Programación Obligatoria" />&lt;h2 id="1-introducción-la-luz-y-la-sombra-que-trajo-consigo-la-programación-obligatoria">1. Introducción: La luz y la sombra que trajo consigo la programación obligatoria
&lt;/h2>&lt;p>La educación en TI e informática en Japón ha experimentado un cambio de paradigma de una escala sin precedentes en los últimos años, con la educación en programación haciéndose obligatoria en las escuelas primarias en el año fiscal 2020, la expansión en tecnología y economía doméstica en las escuelas secundarias en 2021 y el nuevo curso obligatorio &amp;ldquo;Información I&amp;rdquo; en las escuelas secundarias superiores en 2022. En la base de esta serie de políticas existe un requisito nacional extremadamente urgente: fomentar el pensamiento lógico (pensamiento computacional) para sobrevivir en la era de la Sociedad 5.0 (sociedad súper inteligente) y resolver la escasez crónica de talento avanzado en TI en la industria.&lt;/p>
&lt;p>Sin embargo, si miramos a la primera línea del campo de la educación, se hace evidente que se ha creado una enorme brecha entre el ideal dibujado por el país y la realidad. El problema más grave es que el &amp;ldquo;aprendizaje de la programación como medio&amp;rdquo; se confunde completamente con el &amp;ldquo;estudio de las ciencias de la computación como disciplina&amp;rdquo;. Además, existe una montaña de problemas estructurales por resolver, como los límites técnicos debidos a las limitaciones de las especificaciones de la infraestructura de TI desarrollada simultáneamente en todo el país, y la falta de un conjunto de habilidades profesionales de los profesores que enseñan.&lt;/p>
&lt;p>En este artículo, resumimos el &amp;ldquo;después&amp;rdquo; de hacer obligatoria la educación en programación en Japón, y desenmarañamos los problemas esenciales y estructurales de la educación en TI que enfrentamos en curso, de manera extremadamente detallada y técnica, desde la perspectiva de la teoría de las ciencias de la computación, las limitaciones de la arquitectura de hardware y la competitividad industrial global. No es una mera teoría educativa, sino una discusión de 10,000 caracteres que considera el futuro de Japón desde la perspectiva de la ingeniería de software.&lt;/p>
&lt;h2 id="2-la-trampa-de-la-programación-visual-la-zanja-profunda-y-empinada-desde-scratch-a-la-codificación-de-texto">2. La trampa de la programación visual: La zanja profunda y empinada desde Scratch a la codificación de texto
&lt;/h2>&lt;p>Lo que reina como un estándar de facto en la educación de programación en las escuelas primarias son los lenguajes de programación visual (programación basada en bloques), representados por &amp;ldquo;Scratch&amp;rdquo; desarrollado por el MIT Media Lab. El uso de una interfaz gráfica intuitiva para combinar bloques como un rompecabezas para aprender de forma visual e intuitiva las tres estructuras básicas de control algorítmico de &amp;ldquo;secuencia&amp;rdquo;, &amp;ldquo;selección&amp;rdquo; e &amp;ldquo;iteración&amp;rdquo; es un gran invento que debe ser altamente valorado como educación introductoria.&lt;/p>
&lt;p>Sin embargo, hay un problema grave aquí, una &amp;ldquo;trampa de la abstracción&amp;rdquo;, por así decirlo. Es el hecho cruel de que &amp;ldquo;la transición de la programación visual a un lenguaje de programación basado en texto real (Python, JavaScript, C++, Rust, etc.) es extremadamente difícil, y muchos estudiantes se frustran en esta etapa&amp;rdquo;.&lt;/p>
&lt;h3 id="el-muro-de-la-abstracción-y-la-caja-negra-de-las-ciencias-de-la-computación">El muro de la abstracción y la caja negra de las ciencias de la computación
&lt;/h3>&lt;p>Los entornos de programación visual como Scratch abstraen altamente y ocultan intencionalmente (encapsulan) los elementos importantes que forman la base de la informática, como la sintaxis compleja de la programación, los sistemas de tipos estrictos y la gestión del ciclo de vida de la memoria. Si bien esto es excelente para reducir la carga cognitiva para los principiantes, se convierte en un gran obstáculo al pasar al siguiente paso de la ingeniería real. Esto se debe a que en el campo real del desarrollo de software, la comprensión del alcance de las variables (variables locales y globales), estructuras de datos complejas (matrices, listas enlazadas, tablas hash, árboles de búsqueda binaria, grafos), operaciones de punteros y memoria del montón (heap) y de la pila (stack) son absolutamente esenciales.&lt;/p>
&lt;p>El siguiente diagrama Mermaid visualiza los obstáculos de aprendizaje y los puntos de deserción que enfrentan los principiantes en el proceso de transición de la programación visual a las ciencias de la computación a gran escala.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Escuela primaria: Scratch (Visual/Basado en bloques)&amp;#34;] --&amp;gt; B{&amp;#34;Muro de transición a lenguajes de texto en secundaria&amp;#34;}
B --&amp;gt;|&amp;#34;Frustración por errores de sintaxis estrictos&amp;#34;| C[&amp;#34;Abandono (Alergia a la sintaxis)&amp;#34;]
B --&amp;gt;|&amp;#34;Falta de comprensión sobre variables y tipado estático&amp;#34;| D[&amp;#34;Abandono (Muro de los tipos)&amp;#34;]
B --&amp;gt;|&amp;#34;Transición exitosa&amp;#34;| E[&amp;#34;Escuela secundaria superior: Información I (Fundamentos de Python/JavaScript, etc.)&amp;#34;]
E --&amp;gt; F{&amp;#34;Muro de diseño de algoritmos y estructuras de datos&amp;#34;}
F --&amp;gt;|&amp;#34;Falta de comprensión de la complejidad temporal y espacial&amp;#34;| G[&amp;#34;Código ineficiente (Degradación del rendimiento por O(N^2))&amp;#34;]
F --&amp;gt;|&amp;#34;Caja negra de gestión de memoria y referencias&amp;#34;| H[&amp;#34;Codificador que termina en llamadas superficiales a API&amp;#34;]
F --&amp;gt;|&amp;#34;Avance conceptual&amp;#34;| I[&amp;#34;Aprendizaje avanzado de CS (C/C++, Java, arquitectura de bajo nivel)&amp;#34;]
I --&amp;gt; J[&amp;#34;Profesional avanzado de TI que la industria anhela&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>Como se desprende claramente de este diagrama de flujo, el simple hecho de acumular experiencia en &amp;ldquo;escribir código que mueve personajes en una pantalla&amp;rdquo; no criará verdaderos ingenieros de software capaces de diseñar arquitecturas de sistemas distribuidos escalables y optimizar el rendimiento a nivel de milisegundos. Existe una desconexión absoluta en la comprensión conceptual, que no se puede explicar con las simples palabras &amp;ldquo;diferencia en el lenguaje utilizado&amp;rdquo;, entre la tarea de combinar bloques coloridos en Scratch con un mouse y la tarea de descifrar el código fuente en lenguaje C del núcleo de Linux y rastrear el comportamiento de la pila TCP/IP.&lt;/p>
&lt;h2 id="3-los-límites-de-la-codificación-sin-matemáticas-y-lógica-discreta-un-enfoque-desde-la-teoría-de-la-complejidad-computacional">3. Los límites de la codificación sin &amp;ldquo;Matemáticas&amp;rdquo; y &amp;ldquo;Lógica Discreta&amp;rdquo;: Un enfoque desde la teoría de la complejidad computacional
&lt;/h2>&lt;p>La debilidad más grande y quizás un defecto fatal en el plan de estudios de la educación en programación de Japón, es la abrumadora falta de conexión entre las &amp;ldquo;habilidades de codificación&amp;rdquo; y las &amp;ldquo;matemáticas y matemáticas discretas&amp;rdquo;. En la educación de ciencias de la computación de primer nivel en países como Estados Unidos e India, se hace mayor hincapié en la eficiencia algorítmica, la lógica matemática y las demostraciones matemáticas que en la propia gramática de los lenguajes de programación. Esto se debe a que el código no es más que una traducción de fórmulas matemáticas.&lt;/p>
&lt;h3 id="el-dominio-absoluto-de-la-complejidad-de-tiempo-y-espacio-notación-big-o">El dominio absoluto de la complejidad de tiempo y espacio (Notación Big O)
&lt;/h3>&lt;p>Al evaluar y diseñar el rendimiento del software, no se puede evitar el concepto de complejidad temporal (Time Complexity) y complejidad espacial (Space Complexity). La notación asintótica de Landau (Notación Big O) muestra cómo el tiempo de ejecución y el consumo de memoria aumentan cuando el tamaño de los datos de entrada de un algoritmo es $N$.&lt;/p>
&lt;p>Como definición matemática, $f(x) = O(g(x))$ se define estrictamente de la siguiente manera:&lt;/p>
$$
\exists C > 0, \exists x_0 > 0, \forall x > x_0, |f(x)| \le C \cdot |g(x)|
$$&lt;p>En la educación en informática en Japón, al aprender a ordenar datos, por ejemplo, se ve con frecuencia el caso de simplemente llamar al método incorporado &lt;code>array.sort()&lt;/code> en Python y darlo por terminado. Sin embargo, lo que realmente se requiere como ingeniería de la información es comprender matemáticamente y demostrar por qué un simple Bubble Sort nunca se usa en áreas prácticas, y por qué Quick Sort, Merge Sort o Timsort se adoptan como bibliotecas estándar.&lt;/p>
&lt;p>A continuación se muestra la complejidad temporal promedio de los algoritmos de ordenamiento representativos.&lt;/p>
&lt;ul>
&lt;li>Ordenamiento de burbuja (Bubble Sort): $O(N^2)$&lt;/li>
&lt;li>Ordenamiento por selección (Selection Sort): $O(N^2)$&lt;/li>
&lt;li>Ordenamiento por inserción (Insertion Sort): $O(N^2)$&lt;/li>
&lt;li>Ordenamiento por mezcla (Merge Sort): $O(N \log N)$&lt;/li>
&lt;li>Ordenamiento rápido (Quick Sort): $O(N \log N)$&lt;/li>
&lt;li>Ordenamiento por montículos (Heap Sort): $O(N \log N)$&lt;/li>
&lt;/ul>
&lt;p>Por ejemplo, la complejidad temporal $T(N)$ del Merge Sort se expresa mediante la siguiente relación de recurrencia, de acuerdo con el paradigma de Divide y Vencerás.&lt;/p>
$$
T(N) = 2T\left(\frac{N}{2}\right) + O(N)
$$&lt;p>Al expandir y resolver esta relación de recurrencia recursiva utilizando el Teorema Maestro (Master Theorem), se deriva la complejidad ideal de $T(N) = O(N \log N)$.&lt;/p>
$$
T(N) = \Theta(N \log_2 N)
$$&lt;p>En el análisis moderno de Big Data o el procesamiento de tráfico a escala web, $N$ se convierte en un orden masivo de cientos de millones a miles de millones. Si un programador ignorante implementa un algoritmo ineficiente de $O(N^2)$, para datos de $N = 10^6$, se requerirían asombrosamente $10^{12}$ (un billón) de operaciones de comparación inútiles, y el sistema se congelaría o colapsaría virtualmente. Por otro lado, un enfoque $O(N \log N)$ se completaría en unos $2 \times 10^7$ (20 millones) de operaciones. Afirmar &amp;ldquo;saber programar&amp;rdquo; sin este apoyo matemático cruelmente necesario es como construir un rascacielos sin conocer la mecánica estructural, lo cual es extremadamente peligroso.&lt;/p>
&lt;h2 id="4-la-caja-negra-de-la-gestión-de-memoria-y-la-arquitectura-del-sistema">4. La caja negra de la gestión de memoria y la arquitectura del sistema
&lt;/h2>&lt;p>Como un problema de un nivel aún más profundo, existe el hecho de que la comprensión de la gestión de memoria (Memory Management) y la arquitectura de la CPU está completamente ausente. Los estudiantes que solo han aprendido lenguajes de alto nivel con recolección de basura (GC) como Python y JavaScript, que se enseñan actualmente en las escuelas, nunca en su vida sabrán dónde se colocan las variables y los objetos en la memoria física (RAM) (si en el área del montón o en el área de la pila), cómo se asignan, o cuándo y cómo se liberan.&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">// Ejemplo de asignación de memoria explícita y directa y operaciones de punteros en 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">// Asignar memoria dinámicamente de forma continua en la región del montón (Llamada al sistema del 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;¡Fallo en la asignación de memoria! Sin memoria.&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">// Inicialización del arreglo mediante aritmética de punteros
&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">// Equivalente a 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">// Liberación explícita de recursos para prevenir fugas de memoria (Memory Leak)
&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">// Prevenir punteros colgantes (Dangling Pointers)
&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>El concepto de punteros (referencias directas a direcciones de memoria), la disposición de datos (Data Locality) para maximizar la tasa de aciertos de la jerarquía de memoria caché de la CPU (Caché L1/L2/L3), y el conocimiento sobre condiciones de carrera (Race Condition) y control de exclusión (Mutex/Semaphore) en entornos multihilo son conocimientos absolutamente indispensables al desarrollar sistemas de backend de alto rendimiento, motores de juegos 3D o sistemas integrados para IoT. Se debe decir que el plan de estudios actual del Ministerio de Educación, Cultura, Deportes, Ciencia y Tecnología se centra en &amp;ldquo;hacer funcionar aplicaciones superficiales&amp;rdquo;, desviándose significativamente del objetivo académico original de &amp;ldquo;comprender los abismos de las ciencias de la computación&amp;rdquo;.&lt;/p>
&lt;h2 id="5-el-muro-de-las-bases-de-datos-y-la-persistencia-la-ausencia-del-álgebra-relacional">5. El muro de las bases de datos y la persistencia: La ausencia del álgebra relacional
&lt;/h2>&lt;p>En las aplicaciones modernas, guardar y buscar datos (persistencia) es un tema inevitable. Sin embargo, gran parte de la educación escolar se detiene en el &amp;ldquo;procesamiento de datos en la memoria&amp;rdquo;, que desaparece una vez finalizada la ejecución del programa. Rara vez se enseña la teoría matemática detrás de las bases de datos relacionales (RDBMS) y SQL, a saber, el &amp;ldquo;álgebra relacional&amp;rdquo; propuesta por el Dr. Edgar F. Codd.&lt;/p>
&lt;p>Las operaciones de bases de datos se definen por las siguientes operaciones básicas basadas en la teoría de conjuntos:&lt;/p>
&lt;ul>
&lt;li>Selección (Selection, $\sigma$): Extracción de tuplas (filas) que satisfacen una condición&lt;/li>
&lt;li>Proyección (Projection, $\pi$): Extracción de atributos específicos (columnas)&lt;/li>
&lt;li>Reunión (Join, $\bowtie$): Intersección condicional de múltiples relaciones&lt;/li>
&lt;/ul>
&lt;p>Además, aprender la estructura de los índices &amp;ldquo;B-Tree (Árbol B)&amp;rdquo; para buscar instantáneamente los datos deseados en grandes volúmenes de registros es la mejor práctica de aplicación de estructuras de datos. B-Tree garantiza una velocidad de búsqueda de $O(\log N)$ minimizando el número de E/S de disco. Uno no puede construir sistemas robustos sin conocer las propiedades ACID de las transacciones (Atomicidad, Consistencia, Aislamiento, Durabilidad).&lt;/p>
&lt;h2 id="6-seguridad-y-teoría-criptográfica-la-infraestructura-social-sustentada-por-la-dificultad-de-la-factorización-prima">6. Seguridad y teoría criptográfica: La infraestructura social sustentada por la dificultad de la factorización prima
&lt;/h2>&lt;p>Aunque en la educación sobre alfabetización informacional se brinda educación de seguridad superficial como &amp;ldquo;hagamos contraseñas complejas&amp;rdquo; o &amp;ldquo;no hagamos clic en enlaces sospechosos&amp;rdquo;, casi nunca se enseñan las matemáticas de la &amp;ldquo;teoría criptográfica&amp;rdquo; que sustenta fundamentalmente a la sociedad de Internet.&lt;/p>
&lt;p>Las comunicaciones HTTPS y las firmas electrónicas que usamos a diario están protegidas por sistemas de cifrado de clave pública como RSA. La seguridad del cifrado RSA se basa en la dificultad matemática (considerada un problema NP-intermedio) de que &amp;ldquo;la factorización de enteros gigantes no se puede resolver en un tiempo realista con las computadoras clásicas actuales&amp;rdquo;.&lt;/p>
&lt;p>Las fórmulas matemáticas que forman la base del cifrado RSA son hermosas y aplican la función indicatriz de Euler y el pequeño teorema de Fermat.&lt;/p>
&lt;ol>
&lt;li>Seleccionar dos grandes números primos $p$ y $q$&lt;/li>
&lt;li>Calcular $n = p \times q$ (esto forma parte de la clave pública)&lt;/li>
&lt;li>Calcular $\phi(n) = (p-1)(q-1)$&lt;/li>
&lt;li>Elegir $e$ y $d$ tales que $e \times d \equiv 1 \pmod{\phi(n)}$&lt;/li>
&lt;li>Cifrado: $C \equiv M^e \pmod{n}$&lt;/li>
&lt;li>Descifrado: $M \equiv C^d \pmod{n}$&lt;/li>
&lt;/ol>
&lt;p>De esta forma, la educación en programación demuestra su verdadero poder sólo cuando está estrechamente vinculada a la educación matemática. El proceso de traducir fórmulas matemáticas en código e implementarlas en la sociedad es la verdadera esencia de la ciencia.&lt;/p>
&lt;h2 id="7-la-iniciativa-de-escuela-giga-y-los-desesperantes-límites-de-la-infraestructura-chromebook-y-los-ide-en-la-nube">7. La iniciativa de Escuela GIGA y los desesperantes límites de la infraestructura: Chromebook y los IDE en la nube
&lt;/h2>&lt;p>Al hablar de la educación en TI en Japón, no se puede obviar la &amp;ldquo;Iniciativa de Escuela GIGA&amp;rdquo;, promovida por el Ministerio de Educación, Cultura, Deportes, Ciencia y Tecnología con un enorme presupuesto. Este proyecto nacional, que proporciona &amp;ldquo;un dispositivo por estudiante&amp;rdquo; y entornos de red de alta velocidad a estudiantes de primaria y secundaria de todo el país, se esperaba que sirviera como catalizador para recuperar el retraso en la digitalización. Sin embargo, las especificaciones de hardware y arquitectura de los dispositivos realmente distribuidos se han convertido en un grave impedimento para una educación en programación en toda regla.&lt;/p>
&lt;h3 id="dispositivos-de-baja-especificación-y-la-pérdida-de-entornos-de-desarrollo-locales">Dispositivos de baja especificación y la pérdida de entornos de desarrollo locales
&lt;/h3>&lt;p>Muchos de los dispositivos introducidos como especificaciones estándar bajo la Iniciativa GIGA School son Chromebooks, iPads o dispositivos Windows económicos de muy bajo costo. Sus especificaciones estándar son las siguientes:&lt;/p>
&lt;ul>
&lt;li>CPU: Intel Celeron o procesadores ARM económicos&lt;/li>
&lt;li>Memoria (RAM): 4GB (Una capacidad apenas suficiente para ejecutar un sistema operativo moderno)&lt;/li>
&lt;li>Almacenamiento (eMMC): 32GB a 64GB (Velocidades de E/S extremadamente lentas)&lt;/li>
&lt;/ul>
&lt;p>Debido a esta pobre restricción de hardware, es prácticamente imposible construir un &amp;ldquo;entorno de desarrollo local&amp;rdquo; que los ingenieros profesionales usan a diario. Iniciar contenedores Linux con Docker, ejecutar IDE pesados como Visual Studio Code con todas sus funciones, o iniciar servidores locales de Node.js o Python e instalar bibliotecas pesadas conducirá inmediatamente al agotamiento de la memoria y la congelación del sistema.&lt;/p>
&lt;p>Como resultado, la primera línea educativa se ve obligada a depender completamente de los IDE en la nube basados en el navegador (Google Colaboratory, Replit o herramientas web ligeras propias de los editores de libros de texto, etc.).&lt;/p>
&lt;pre class="mermaid">
flowchart LR
subgraph &amp;#34;Terminales GIGA (Chromebook / iPad / Windows Económico)&amp;#34;
A[&amp;#34;Navegador Web (Solo renderizado de UI)&amp;#34;]
end
subgraph &amp;#34;Infraestructura en la nube remota (AWS / GCP, etc.)&amp;#34;
B[&amp;#34;Servidor Web del IDE en la Nube&amp;#34;]
C[&amp;#34;Backend Entorno de Compilación/Ejecución&amp;#34;]
D[&amp;#34;Almacenamiento de archivos persistente&amp;#34;]
end
A --&amp;gt;|&amp;#34;Comunicación HTTP/WebSocket: Retrasos severos debido a las conexiones lentas en las escuelas&amp;#34;| B
B &amp;lt;--&amp;gt; C
B &amp;lt;--&amp;gt; D
&lt;/pre>
&lt;p>La dependencia total de los IDE en la nube provoca deficiencias extremadamente graves desde el punto de vista educativo:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Ignorancia de los sistemas de archivos y la arquitectura del sistema operativo&lt;/strong>: Como no hay un entorno local, los estudiantes nunca adquieren conocimientos esenciales (alfabetización en UNIX) que un ingeniero de TI debería manejar con la naturalidad de respirar, como estructuras de directorios, conceptos de rutas absolutas y relativas, configuración de variables de entorno, permisos de archivos y operaciones del sistema operativo en CLI (Interfaces de Línea de Comandos).&lt;/li>
&lt;li>&lt;strong>Latencia de red y vulnerabilidades de la infraestructura&lt;/strong>: Como se asume una conexión constante, hay numerosos incidentes en todo el país donde el ancho de banda de la red de la escuela se ve abrumado en el momento en que todos los estudiantes acceden simultáneamente, causando que los navegadores se congelen y el aprendizaje se detenga por completo.&lt;/li>
&lt;li>&lt;strong>Privación de la experiencia de control de versiones (Git)&lt;/strong>: Se les niega la oportunidad de asimilar los conceptos de Git y GitHub para gestionar historiales de cambios de código fuente y desarrollar cooperativamente en equipos de todo el mundo a través de una pantalla negra de terminal.&lt;/li>
&lt;/ol>
&lt;p>Cuando los ingenieros de software profesionales desarrollan, las operaciones en el terminal (shell) son una base absoluta. Sin la ardua experiencia de ejecutar comandos como &lt;code>ls&lt;/code>, &lt;code>cd&lt;/code>, &lt;code>grep&lt;/code>, &lt;code>chmod&lt;/code>, y &lt;code>git rebase&lt;/code> e interactuar directamente con el núcleo del sistema operativo local, nunca se logrará el verdadero desarrollo de talento informático. Jugar en el entorno aislado (sandbox) de un Chromebook no creará ingenieros full-stack con una visión general del sistema.&lt;/p>
&lt;h2 id="8-la-brecha-desesperada-con-el-mundo-la-divergencia-entre-los-estándares-de-la-industria-y-la-educación-escolar">8. La brecha desesperada con el mundo: La divergencia entre los estándares de la industria y la educación escolar
&lt;/h2>&lt;p>El último y que podríamos considerar un problema de crisis nacional al que se enfrenta la educación informática japonesa, es el abrumador declive de la competitividad en un contexto global.&lt;/p>
&lt;h3 id="la-feroz-educación-en-ciencias-de-la-computación-en-otros-países">La feroz educación en ciencias de la computación en otros países
&lt;/h3>&lt;p>En el Reino Unido (UK), desde 2014, una asignatura llamada &amp;ldquo;Computing&amp;rdquo; se ha vuelto obligatoria desde los 5 años (Key Stage 1). Su plan de estudios va más allá de una simple &amp;ldquo;experiencia de programación&amp;rdquo; y aborda la ciencia de la computación académica, sistemática y rigurosa, desde el diseño lógico de algoritmos y la comprensión de circuitos lógicos con álgebra booleana hasta las topologías de red y la arquitectura de hardware.&lt;/p>
&lt;p>En Estados Unidos, existe un riguroso plan de estudios estándar K-12 (desde jardín de infantes hasta el último año de secundaria) establecido por la CSTA (Computer Science Teachers Association), y en AP (Advanced Placement) Computer Science A que toman los estudiantes de secundaria, se requiere programación orientada a objetos de nivel avanzado con Java, polimorfismo, procesamiento recursivo, implementación de estructuras de datos y evaluación de la complejidad de algoritmos, todo con altos estándares equivalentes al nivel del primer año de la universidad. La feroz educación STEM en India y China y el enorme estrato de élite producido a partir de allí apenas necesitan mencionarse.&lt;/p>
&lt;h3 id="la-brecha-desesperada-entre-las-habilidades-demandadas-y-las-habilidades-enseñadas">La brecha desesperada entre las habilidades demandadas y las habilidades enseñadas
&lt;/h3>&lt;p>Los requisitos que la industria moderna, en particular las megacorporaciones y gigantes tecnológicos que operan globalmente (GAFAM, etc.), demandan a los ingenieros de software recién graduados se vuelven más sofisticados a una velocidad aterradora cada año. Se requiere una experiencia amplia y profunda, como la construcción de infraestructura nativa de la nube (AWS, GCP, Kubernetes), el diseño de sistemas distribuidos con arquitecturas de microservicios, la implementación de canalizaciones de aprendizaje automático y un alto nivel de conocimiento de seguridad.&lt;/p>
&lt;p>El siguiente gráfico muestra conceptualmente la desconexión desesperada entre los niveles de habilidades proporcionados por la educación escolar japonesa actual y los niveles de habilidades exigidos por la vanguardia de la industria.&lt;/p>
&lt;pre class="mermaid">
xychart-beta
title Habilidades provistas en escuelas japonesas vs. Habilidades demandadas por la industria
x-axis [&amp;#34;Lenguajes visuales&amp;#34;, &amp;#34;Sintaxis básica/Variables&amp;#34;, &amp;#34;Algoritmos/Complejidad&amp;#34;, &amp;#34;OS/Redes&amp;#34;, &amp;#34;BD/Diseño de sistemas&amp;#34;, &amp;#34;Nube/Arquitectura distribuida&amp;#34;]
y-axis &amp;#34;Logro / Demanda (%)&amp;#34; 0 --&amp;gt; 100
line &amp;#34;Nivel de logro en la educación escolar actual&amp;#34; [95, 60, 15, 5, 2, 0]
line &amp;#34;Nivel requerido por la industria/empresas tecnológicas&amp;#34; [0, 20, 85, 90, 95, 100]
&lt;/pre>
&lt;p>Para cerrar esta enorme brecha (El Valle de la Muerte), se requiere un cambio de paradigma radical en la educación escolar y una inversión masiva. En una situación donde los profesores especializados en &amp;ldquo;Información&amp;rdquo; escasean abrumadoramente en todo el país, y donde los profesores de matemáticas, ciencias, o tecnología y economía doméstica enseñan programación a tiempo parcial sin un entrenamiento adecuado, es absolutamente imposible producir ingenieros de primer nivel que puedan competir globalmente.&lt;/p>
&lt;h2 id="9-el-colapso-del-valor-de-la-codificación-en-la-era-de-la-ia-llm">9. El colapso del valor de la &amp;ldquo;codificación&amp;rdquo; en la era de la IA (LLM)
&lt;/h2>&lt;p>Complicando aún más la situación está la proliferación explosiva de modelos de lenguaje grandes (LLM) como ChatGPT, y asistentes de codificación de inteligencia artificial como GitHub Copilot. En una época en la que la IA puede generar instantáneamente un código perfecto e incluso escribir código de prueba a partir de instrucciones en lenguaje natural, el valor de mercado de los llamados &amp;ldquo;codificadores&amp;rdquo;, que simplemente &amp;ldquo;conocen la sintaxis de Python&amp;rdquo; y &amp;ldquo;saben cómo hacer llamadas de API&amp;rdquo;, está cayendo rápidamente.&lt;/p>
&lt;p>Lo que se exigirá de los ingenieros humanos en la era de la IA no es la memoria sintáctica de los lenguajes de programación. Son las siguientes capacidades:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Definición de requerimientos y modelado de dominios&lt;/strong>: La capacidad de extraer los problemas complejos de la realidad a resolver y modelarlos como un sistema.&lt;/li>
&lt;li>&lt;strong>Diseño de arquitecturas&lt;/strong>: La capacidad de esbozar el diseño de todo un sistema garantizando la escalabilidad, alta disponibilidad y facilidad de mantenimiento.&lt;/li>
&lt;li>&lt;strong>Verificación matemática y lógica&lt;/strong>: La capacidad de verificar lógicamente y demostrar si el código generado por IA no tiene vulnerabilidades de seguridad ni cuellos de botella de complejidad computacional.&lt;/li>
&lt;/ol>
&lt;p>Irónicamente, todos estos están dentro de los dominios profundos y abstractos de la &amp;ldquo;ciencia de la computación y las matemáticas&amp;rdquo;, en lugar de una &amp;ldquo;programación superficial&amp;rdquo;. Si la educación japonesa solo está enseñando &amp;ldquo;habilidades en procesos aguas abajo que son fácilmente reemplazables por la IA&amp;rdquo;, debe considerarse una pérdida nacional.&lt;/p>
&lt;h2 id="10-hacia-una-fusión-de-ciencias-matemáticas-y-programación-propuesta-para-la-educación-de-la-próxima-generación">10. Hacia una fusión de ciencias matemáticas y programación: Propuesta para la educación de la próxima generación
&lt;/h2>&lt;p>La tarea urgente para la educación informática de Japón en el futuro es salir del enfoque de la &amp;ldquo;programación como fin/medio&amp;rdquo; y volver a una &amp;ldquo;exploración de las ciencias de la computación como ciencias matemáticas&amp;rdquo;. Los lenguajes de programación no son más que herramientas para expresar pensamientos, y es la estructura matemática y lógica subyacente la que tiene un valor universal que nunca se desvanecerá sin importar cómo cambien los tiempos.&lt;/p>
&lt;p>Por ejemplo, el núcleo de la inteligencia artificial (IA) y el aprendizaje automático está intrincadamente entrelazado con el álgebra lineal (operaciones con matrices y tensores), el cálculo multivariable (descenso de gradiente) y la estadística de probabilidad (estimación bayesiana e información). La optimización de pesos en redes neuronales de aprendizaje profundo (Deep Learning) se formula utilizando la regla de la cadena (Chain Rule) y la retropropagación con derivadas parciales.&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>Es el talento capaz de traducir tales fórmulas matemáticas avanzadas en código, e implementar y optimizar drásticamente la computación paralela (Parallel Computing) teniendo en cuenta la arquitectura de hardware de GPU (CUDA) y TPU lo que liderará a la industria de la tecnología de la información de la próxima generación. Es por eso que debemos abandonar de inmediato la educación superficial que solo hace memorizar sintaxis a los estudiantes, y debemos girar hacia una educación profunda que indague en los principios fundamentales (First Principles) del cálculo.&lt;/p>
&lt;h2 id="11-conclusión-el-escarpado-camino-hacia-una-verdadera-nación-de-ti-y-nuestra-determinación">11. Conclusión: El escarpado camino hacia una verdadera nación de TI y nuestra determinación
&lt;/h2>&lt;p>No hay duda de que hacer que la educación en programación fuera obligatoria en la década de 2020 fue un paso firme al lograr que la sociedad japonesa en general reconociera la &amp;ldquo;importancia de la TI y la información&amp;rdquo;. Sin embargo, esto es un mero &amp;ldquo;calentamiento&amp;rdquo; en un largo viaje.&lt;/p>
&lt;p>Dar un paso adelante desde la diversión de mover un personaje de gato en Scratch para que se emocionen con la belleza matemática de un algoritmo $O(N \log N)$ y enseñarles la emoción de comunicarse con servidores de todo el mundo a través de paquetes TCP desde la pantalla negra de la terminal. Debemos reconstruir una nueva infraestructura educativa para superar las limitaciones de hardware de la Iniciativa GIGA School, fomentar y colocar instructores con experiencia avanzada en CS, y en ocasiones, involucrar valientemente a ingenieros profesionales externos en la educación escolar.&lt;/p>
&lt;p>Los desafíos que enfrenta la educación de TI en Japón son extremadamente profundos, arraigados y complejos. Sin embargo, no debemos apartar la mirada de estos desafíos, y cuando la industria, la academia y el gobierno colaboren seriamente para abordarlos y puedan construir un ecosistema que produzca continuamente no &amp;ldquo;trabajadores que solo pueden escribir código de acuerdo a las especificaciones&amp;rdquo;, sino &amp;ldquo;verdaderos ingenieros que pueden diseñar y crear sistemas desde cero&amp;rdquo;, Japón sin duda volverá a liderar el mundo como una verdadera nación de TI.&lt;/p>
&lt;p>Cómo lucharemos a través de la fase más importante y difícil del &amp;ldquo;después&amp;rdquo; de hacer obligatoria la programación. Ahora mismo, se está poniendo a prueba la seriedad y determinación de los adultos.&lt;/p>
&lt;hr>
&lt;p>&lt;em>En este artículo describimos en términos generales la teoría de la complejidad computacional y los límites de infraestructura de la Iniciativa GIGA School. En futuras publicaciones de esta serie cubriremos temas aún más especializados en ciencias de la computación (como detalles sobre algoritmos de sistemas distribuidos y métodos de gestión de memoria de bajo nivel).&lt;/em>&lt;/p></description></item></channel></rss>