<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Computer Science on kenji.blog</title><link>http://kenji.blog/ru/tags/computer-science/</link><description>Recent content in Computer Science on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/computer-science/index.xml" rel="self" type="application/rss+xml"/><item><title>Текущее состояние и проблемы ИТ-образования в Японии: последствия обязательного обучения программированию</title><link>http://kenji.blog/ru/p/japan-it-education-aftermath/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/ru/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 Текущее состояние и проблемы ИТ-образования в Японии: последствия обязательного обучения программированию" />&lt;h2 id="1-введение-свет-и-тени-обязательного-обучения-программированию">1. Введение: Свет и тени обязательного обучения программированию
&lt;/h2>&lt;p>С обязательным обучением программированию в начальной школе в 2020 финансовом году, его расширением на уроках технологий и домоводства в средней школе в 2021 году и введением нового обязательного предмета «Информация I» в старшей школе в 2022 году, ИТ-образование и информатика в Японии за последние годы пережили смену парадигмы беспрецедентного масштаба. В основе этой серии политических мер лежит чрезвычайно острая и национальная необходимость: развитие логического мышления (программистского мышления) для выживания в эпоху Society 5.0 (супер-умного общества) и решение хронической проблемы нехватки высококвалифицированных ИТ-кадров в промышленности.&lt;/p>
&lt;p>Однако, если взглянуть на передовую линию образования, становится очевидным, что между идеалом, нарисованным государством, и реальностью возник огромный разрыв. Самая серьезная проблема заключается в том, что «изучение программирования как инструмента» и «освоение компьютерных наук как академической дисциплины» полностью смешиваются. Кроме того, существует множество структурных проблем, требующих решения, таких как технические ограничения, вызванные характеристиками ИТ-инфраструктуры, развернутой в масштабах всей страны, и нехватка специализированных навыков у преподавателей.&lt;/p>
&lt;p>В этой статье подведены итоги того, что произошло «после» введения обязательного программирования в Японии, и дан чрезвычайно подробный технический анализ фундаментальных и структурных проблем, с которыми ИТ-образование сталкивается прямо сейчас, с точки зрения теории компьютерных наук, аппаратных ограничений и глобальной конкурентоспособности промышленности. Это не просто рассуждение об образовании, а эссе на 10 000 символов, в котором будущее Японии рассматривается с точки зрения программной инженерии.&lt;/p>
&lt;h2 id="2-ловушка-визуального-программирования-глубокая-и-крутая-пропасть-между-scratch-и-текстовым-кодированием">2. Ловушка визуального программирования: Глубокая и крутая пропасть между Scratch и текстовым кодированием
&lt;/h2>&lt;p>Де-факто стандартом в обучении программированию в начальной школе стали языки визуального программирования (блочное программирование), типичным представителем которых является «Scratch», разработанный MIT Media Lab. Тот факт, что три базовые управляющие структуры алгоритмов: «последовательность (sequence)», «ветвление (selection)» и «цикл (iteration)», могут быть изучены визуально и интуитивно путем соединения блоков, как пазлов, с использованием интуитивно понятного графического интерфейса, является великим изобретением, которое следует высоко оценить в качестве вводного образования.&lt;/p>
&lt;p>Однако здесь кроется серьезная ловушка, так называемая «ловушка абстракции». Это жестокий факт, что «переход от визуального программирования к полноценным текстовым языкам программирования (Python, JavaScript, C++, Rust и т.д.) чрезвычайно сложен, и многие учащиеся сдаются на этом этапе».&lt;/p>
&lt;h3 id="барьер-абстракции-и-черный-ящик-компьютерных-наук">Барьер абстракции и черный ящик компьютерных наук
&lt;/h3>&lt;p>Среды визуального программирования, такие как Scratch, в высокой степени абстрагируют и намеренно скрывают (инкапсулируют) ключевые элементы, составляющие основу компьютерных наук, такие как сложный синтаксис программирования, строгие системы типов и управление жизненным циклом памяти. Это отлично подходит для снижения когнитивной нагрузки на новичков, но становится огромным препятствием при переходе к следующему этапу — настоящей инженерии. В реальной разработке программного обеспечения абсолютно необходимо понимание области видимости переменных (локальные и глобальные переменные), сложных структур данных (массивы, связные списки, хеш-таблицы, бинарные деревья поиска, графы), операций с указателями и областей памяти heap (куча) и stack (стек).&lt;/p>
&lt;p>Следующая диаграмма Mermaid визуализирует препятствия в обучении и точки отсева (drop-off), с которыми сталкиваются новички в процессе перехода от визуального программирования к полноценной информатике.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Начальная школа: Scratch (визуальный/на основе блоков)&amp;#34;] --&amp;gt; B{&amp;#34;Средняя школа: Барьер перехода к текстовым языкам&amp;#34;}
B --&amp;gt;|&amp;#34;Сдаются из-за строгих синтаксических ошибок&amp;#34;| C[&amp;#34;Отсев (Аллергия на синтаксис)&amp;#34;]
B --&amp;gt;|&amp;#34;Недостаток понимания переменных и статической типизации&amp;#34;| D[&amp;#34;Отсев (Барьер типов)&amp;#34;]
B --&amp;gt;|&amp;#34;Успешный переход&amp;#34;| E[&amp;#34;Старшая школа: Информация I (Основы Python/JavaScript и др.)&amp;#34;]
E --&amp;gt; F{&amp;#34;Барьер проектирования алгоритмов и структур данных&amp;#34;}
F --&amp;gt;|&amp;#34;Непонимание временной и пространственной сложности&amp;#34;| G[&amp;#34;Неэффективный код (Снижение производительности из-за злоупотребления O(N^2))&amp;#34;]
F --&amp;gt;|&amp;#34;Черный ящик управления памятью и ссылок&amp;#34;| H[&amp;#34;Превращение в кодера, ограничивающегося поверхностными вызовами API&amp;#34;]
F --&amp;gt;|&amp;#34;Концептуальный прорыв&amp;#34;| I[&amp;#34;Полноценное изучение CS (C/C++, Java, низкоуровневая архитектура)&amp;#34;]
I --&amp;gt; J[&amp;#34;Высококвалифицированный ИТ-профессионал, которого жаждет индустрия&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>Как ясно из этой блок-схемы, простой опыт «написания кода, который перемещает персонажей на экране» не воспитает настоящих инженеров-программистов, способных проектировать масштабируемую распределенную системную архитектуру и оптимизировать производительность до миллисекунд. Между сборкой разноцветных блоков Scratch с помощью мыши и чтением исходного кода ядра Linux на C для отслеживания поведения стека TCP/IP существует абсолютный концептуальный разрыв, который нельзя объяснить просто словами «разница в используемых языках».&lt;/p>
&lt;h2 id="3-ограничения-кодирования-без-математики-и-дискретной-логики-подход-с-точки-зрения-теории-сложности">3. Ограничения кодирования без «Математики» и «Дискретной логики»: Подход с точки зрения теории сложности
&lt;/h2>&lt;p>Самой слабой стороной и фатальным недостатком учебной программы по программированию в Японии является острая нехватка связи между «навыками кодирования» и «математикой/дискретной математикой (Discrete Mathematics)». В лучших программах по информатике (computer science) в США, Индии и других странах акцент делается на эффективности алгоритмов, математической логике и математических доказательствах, а не на самой грамматике языков программирования. Ведь код — это не что иное, как перевод математических формул.&lt;/p>
&lt;h3 id="абсолютное-доминирование-временной-и-пространственной-сложности-big-o-notation">Абсолютное доминирование временной и пространственной сложности (Big O Notation)
&lt;/h3>&lt;p>При оценке и проектировании производительности программного обеспечения нельзя избежать концепций временной сложности (Time Complexity) и пространственной сложности (Space Complexity). Асимптотическая нотация Ландау (Big O Notation) показывает, как увеличивается время выполнения и потребление памяти, когда размер данных, вводимых в алгоритм, равен $N$.&lt;/p>
&lt;p>Математически $f(x) = O(g(x))$ строго определяется следующим образом:&lt;/p>
$$
\exists C > 0, \exists x_0 > 0, \forall x > x_0, |f(x)| \le C \cdot |g(x)|
$$&lt;p>В японском ИТ-образовании, например, при изучении сортировки данных, часто встречаются случаи, когда все заканчивается простым вызовом встроенного метода &lt;code>array.sort()&lt;/code> в Python. Однако то, что действительно требуется в информационной инженерии, — это математическое понимание и доказательство того, почему простая пузырьковая сортировка никогда не используется в практических областях, и почему быстрая сортировка (Quick Sort), сортировка слиянием (Merge Sort) или Timsort принимаются в качестве стандартных библиотек.&lt;/p>
&lt;p>Ниже приведена средняя временная сложность типичных алгоритмов сортировки:&lt;/p>
&lt;ul>
&lt;li>Пузырьковая сортировка (Bubble Sort): $O(N^2)$&lt;/li>
&lt;li>Сортировка выбором (Selection Sort): $O(N^2)$&lt;/li>
&lt;li>Сортировка вставками (Insertion Sort): $O(N^2)$&lt;/li>
&lt;li>Сортировка слиянием (Merge Sort): $O(N \log N)$&lt;/li>
&lt;li>Быстрая сортировка (Quick Sort): $O(N \log N)$&lt;/li>
&lt;li>Пирамидальная сортировка (Heap Sort): $O(N \log N)$&lt;/li>
&lt;/ul>
&lt;p>Например, временная сложность сортировки слиянием $T(N)$ в рамках парадигмы «разделяй и властвуй» (Divide and Conquer) выражается следующим рекуррентным соотношением:&lt;/p>
$$
T(N) = 2T\left(\frac{N}{2}\right) + O(N)
$$&lt;p>Путем разложения и решения этого рекурсивного уравнения с использованием основной теоремы (Master Theorem) выводится идеальная сложность $T(N) = O(N \log N)$.&lt;/p>
$$
T(N) = \Theta(N \log_2 N)
$$&lt;p>При анализе современных больших данных и обработке трафика в масштабе веб-приложений $N$ достигает огромных порядков — сотен миллионов и миллиардов. Если невежественный программист реализует неэффективный алгоритм $O(N^2)$, для данных размером $N = 10^6$ потребуется $10^{12}$ (1 триллион) ненужных операций сравнения, и система фактически зависнет или рухнет. С другой стороны, с $O(N \log N)$ это будет завершено примерно за $2 \times 10^7$ (20 миллионов) операций. Утверждать «я умею программировать» без этой жестокой математической поддержки — все равно что строить небоскреб, не зная строительной механики, и это крайне опасно.&lt;/p>
&lt;h2 id="4-управление-памятью-и-превращение-системной-архитектуры-в-черный-ящик">4. Управление памятью и превращение системной архитектуры в черный ящик
&lt;/h2>&lt;p>Еще более глубокая проблема заключается в том, что понимание управления памятью (Memory Management) и архитектуры ЦП полностью отсутствует. Учащиеся, изучающие только языки высокого уровня с автоматической сборкой мусора (GC), такие как Python и JavaScript, которые в настоящее время преподаются в школах, никогда в жизни не будут задумываться о том, где в физической памяти (RAM) размещаются переменные и объекты (в куче или в стеке), как они выделяются и когда/как освобождаются.&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">// Пример явного и прямого выделения памяти и манипуляций с указателями в 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">// Динамическое непрерывное выделение памяти в куче (системный вызов к ОС)
&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">// Инициализация массива с помощью арифметики указателей
&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">// Эквивалентно 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">// Явное освобождение ресурсов для предотвращения утечки памяти (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">// Предотвращение появления висячих указателей (Dangling pointer)
&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>Концепции указателей (прямые ссылки на адреса памяти), размещение данных для максимизации частоты попадания в иерархию кэш-памяти ЦП (кэш L1/L2/L3) (Data Locality), а также знания о состоянии гонки (Race Condition) и взаимном исключении (Mutex/Semaphore) в многопоточной среде абсолютно необходимы для разработки высокопроизводительных бэкенд-систем, 3D-игровых движков или встроенных систем для IoT. Приходится признать, что нынешняя учебная программа Министерства образования, культуры, спорта, науки и технологий ограничивается «созданием поверхностных приложений» и сильно отклоняется от своей первоначальной академической цели — «понимания глубин компьютерных наук».&lt;/p>
&lt;h2 id="5-барьер-баз-данных-и-персистентности-отсутствие-реляционной-алгебры">5. Барьер баз данных и персистентности: Отсутствие реляционной алгебры
&lt;/h2>&lt;p>В современных приложениях сохранение и поиск данных (персистентность) являются неизбежными темами. Однако большая часть школьного образования ограничивается «обработкой данных в памяти», которые исчезают после завершения программы. Математическая теория, лежащая в основе реляционных баз данных (RDBMS) и SQL, а именно «реляционная алгебра (Relational Algebra)», предложенная доктором Эдгаром Ф. Коддом, преподается редко.&lt;/p>
&lt;p>Операции с базами данных определяются следующими базовыми операциями, основанными на теории множеств:&lt;/p>
&lt;ul>
&lt;li>Выборка (Selection, $\sigma$): Извлечение кортежей (строк), удовлетворяющих условию.&lt;/li>
&lt;li>Проекция (Projection, $\pi$): Извлечение определенных атрибутов (столбцов).&lt;/li>
&lt;li>Соединение (Join, $\bowtie$): Условное пересечение нескольких отношений.&lt;/li>
&lt;/ul>
&lt;p>Кроме того, изучение структуры индекса «B-Tree (B-дерево)» для мгновенного поиска нужных данных среди огромного количества записей является лучшей практикой применения структур данных. B-Tree минимизирует количество операций ввода-вывода (I/O) на диске и гарантирует скорость поиска $O(\log N)$. Невозможно создать надежную систему, не зная свойств ACID (Atomicity, Consistency, Isolation, Durability) транзакций.&lt;/p>
&lt;h2 id="6-безопасность-и-теория-криптографии-сложность-разложения-на-множители-как-опора-социальной-инфраструктуры">6. Безопасность и теория криптографии: Сложность разложения на множители как опора социальной инфраструктуры
&lt;/h2>&lt;p>Хотя обучение информационной грамотности включает поверхностное обучение безопасности, такое как «давайте использовать сложные пароли» и «давайте не будем переходить по подозрительным ссылкам», математика «теории криптографии», которая является основой интернет-общества, почти не преподается.&lt;/p>
&lt;p>Связь по протоколу HTTPS и цифровые подписи, которые мы используем каждый день, защищены криптографией с открытым ключом, такой как алгоритм RSA. Безопасность RSA зависит от математической сложности (которая считается NP-промежуточной задачей): «разложение огромных целых чисел на простые множители невозможно решить за реальное время на современных классических компьютерах».&lt;/p>
&lt;p>Математические формулы, лежащие в основе криптографии RSA, красивы и применяют функцию Эйлера (totient) и малую теорему Ферма:&lt;/p>
&lt;ol>
&lt;li>Выберите два очень больших простых числа $p$ и $q$.&lt;/li>
&lt;li>Вычислите $n = p \times q$ (это станет частью открытого ключа).&lt;/li>
&lt;li>Вычислите $\phi(n) = (p-1)(q-1)$.&lt;/li>
&lt;li>Выберите $e$ и $d$ такие, что $e \times d \equiv 1 \pmod{\phi(n)}$.&lt;/li>
&lt;li>Шифрование: $C \equiv M^e \pmod{n}$&lt;/li>
&lt;li>Расшифровка: $M \equiv C^d \pmod{n}$&lt;/li>
&lt;/ol>
&lt;p>Таким образом, обучение программированию демонстрирует свою истинную мощь только тогда, когда оно тесно связано с обучением математике. Процесс перевода математических формул в код и их внедрение в общество — вот в чем заключается истинная прелесть науки.&lt;/p>
&lt;h2 id="7-концепция-giga-school-и-безнадежные-ограничения-инфраструктуры-chromebook-и-облачные-ide">7. Концепция GIGA School и безнадежные ограничения инфраструктуры: Chromebook и облачные IDE
&lt;/h2>&lt;p>Говоря об ИТ-образовании в Японии, нельзя не упомянуть о «Концепции GIGA School», национальном проекте, на продвижение которого Министерство образования, культуры, спорта, науки и технологий потратило огромный бюджет. Ожидалось, что этот проект, который обеспечит «одно устройство на каждого ученика» и высокоскоростную сетевую среду для учащихся начальных и средних школ по всей стране, станет катализатором для преодоления отставания в цифровизации. Однако аппаратные характеристики и архитектура реально распределенных терминалов стали серьезным препятствием для полноценного обучения программированию.&lt;/p>
&lt;h3 id="низкопроизводительные-терминалы-и-потеря-среды-локальной-разработки">Низкопроизводительные терминалы и потеря среды локальной разработки
&lt;/h3>&lt;p>Многие терминалы, представленные в качестве стандартных спецификаций концепции GIGA School, — это чрезвычайно дешевые Chromebook, iPad или бюджетные устройства Windows. Их стандартные характеристики таковы:&lt;/p>
&lt;ul>
&lt;li>ЦП: Intel Celeron или дешевый процессор ARM&lt;/li>
&lt;li>Память (RAM): 4 ГБ (Минимально достаточный объем только для запуска современной ОС)&lt;/li>
&lt;li>Хранилище (eMMC): от 32 ГБ до 64 ГБ (Чрезвычайно низкая скорость ввода-вывода)&lt;/li>
&lt;/ul>
&lt;p>Из-за этих скудных аппаратных ограничений фактически невозможно создать «среду локальной разработки», которую профессиональные инженеры используют каждый день. Запуск контейнеров Linux с использованием Docker, запуск тяжелых IDE, таких как Visual Studio Code, с полной функциональностью или запуск локальных серверов Node.js/Python для установки тяжелых библиотек приведет к немедленному истощению памяти и зависанию системы.&lt;/p>
&lt;p>В результате сфера образования вынуждена полностью полагаться на облачные IDE (Google Colaboratory, Replit или легкие веб-инструменты от издателей учебников), которые работают в браузере.&lt;/p>
&lt;pre class="mermaid">
flowchart LR
subgraph &amp;#34;Терминал GIGA (Chromebook / iPad / Бюджетный Windows)&amp;#34;
A[&amp;#34;Веб-браузер (Только рендеринг UI)&amp;#34;]
end
subgraph &amp;#34;Удаленная облачная инфраструктура (AWS / GCP и др.)&amp;#34;
B[&amp;#34;Веб-сервер облачной IDE&amp;#34;]
C[&amp;#34;Среда компиляции/выполнения бэкенда&amp;#34;]
D[&amp;#34;Персистентное файловое хранилище&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>Полная зависимость от облачных IDE вызывает следующие чрезвычайно серьезные пробелы в образовании:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Непонимание файловых систем и архитектуры ОС&lt;/strong>: Поскольку у них нет локальной среды, они вообще не приобретают необходимые знания, которыми ИТ-инженеры должны владеть, как воздухом для дыхания (грамотность UNIX), такие как структура каталогов, концепции абсолютных/относительных путей, настройка переменных среды, права доступа к файлам и операции с ОС через CLI (интерфейс командной строки).&lt;/li>
&lt;li>&lt;strong>Задержки в сети и уязвимости инфраструктуры&lt;/strong>: Поскольку предполагается постоянное соединение, по всей стране часто происходят инциденты, когда вся школа получает доступ к сети одновременно, пропускная способность школьной сети исчерпывается, браузеры зависают, а обучение полностью останавливается.&lt;/li>
&lt;li>&lt;strong>Лишение опыта управления версиями (Git)&lt;/strong>: Они лишаются возможности изучить концепции Git и GitHub для управления историей изменений исходного кода и совместной разработки с командами по всему миру через черный экран терминала.&lt;/li>
&lt;/ol>
&lt;p>Когда профессиональный инженер-программист занимается разработкой, работа в терминале (оболочке) является абсолютной основой. Невозможно воспитать настоящие ИТ-кадры без приземленного опыта прямого взаимодействия с ядром локальной ОС с помощью таких команд, как &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>. Если играть только в песочнице (sandbox) Chromebook, из вас никогда не получится full-stack инженер, который может видеть систему целиком.&lt;/p>
&lt;h2 id="8-безнадежный-разрыв-с-миром-расхождение-между-требованиями-индустрии-и-школьным-образованием">8. Безнадежный разрыв с миром: Расхождение между требованиями индустрии и школьным образованием
&lt;/h2>&lt;p>Последней и, пожалуй, национальной кризисной проблемой японского ИТ-образования является колоссальное снижение конкурентоспособности в глобальном контексте.&lt;/p>
&lt;h3 id="интенсивное-образование-в-области-компьютерных-наук-в-других-странах">Интенсивное образование в области компьютерных наук в других странах
&lt;/h3>&lt;p>В Великобритании (UK) предмет под названием «Вычисления» (Computing) стал обязательным с 5 лет (Key Stage 1) еще в 2014 году. Их учебная программа не ограничивается простым «опытом программирования», а охватывает в высшей степени академическую и систематическую полноценную информатику, начиная от логического проектирования алгоритмов, понимания логических схем с использованием булевой алгебры (Boolean algebra) до сетевых топологий и аппаратной архитектуры.&lt;/p>
&lt;p>В Соединенных Штатах существует строгая стандартная учебная программа K-12 (от детского сада до окончания средней школы), установленная Ассоциацией преподавателей компьютерных наук (CSTA), а в курсе AP (Advanced Placement) Computer Science A, который проходят старшеклассники, полноценное объектно-ориентированное программирование с использованием Java, полиморфизм, рекурсия, реализация структур данных и оценка сложности алгоритмов преподаются на высоком уровне первого курса университета. Жесткость STEM-образования в Индии и Китае, а также глубина выпускаемой оттуда элиты не нуждаются в упоминании.&lt;/p>
&lt;h3 id="безнадежный-разрыв-между-требуемыми-навыками-и-тем-чему-обучают">Безнадежный разрыв между требуемыми навыками и тем, чему обучают
&lt;/h3>&lt;p>Требования, предъявляемые современной индустрией, особенно глобальными мега-венчурными компаниями и технологическими гигантами (GAFAM и др.), к новым инженерам-программистам усложняются с пугающей скоростью каждый год. Требуется обширный и глубокий опыт, включая создание облачной инфраструктуры (AWS, GCP, Kubernetes), проектирование распределенных систем с микросервисной архитектурой, реализацию конвейеров машинного обучения и глубокие знания в области безопасности.&lt;/p>
&lt;p>На следующем графике концептуально показан безнадежный разрыв между уровнем достижения навыков, предоставляемым японским школьным образованием в настоящее время, и уровнем навыков, требуемым передовой индустрией.&lt;/p>
&lt;pre class="mermaid">
xychart-beta
title Навыки в школьном образовании Японии vs Требования индустрии
x-axis [&amp;#34;Визуальные языки&amp;#34;, &amp;#34;Базовый синтаксис/переменные&amp;#34;, &amp;#34;Алгоритмы/сложность&amp;#34;, &amp;#34;ОС/Сети&amp;#34;, &amp;#34;БД/Проектирование систем&amp;#34;, &amp;#34;Облачная/Распределенная архитектура&amp;#34;]
y-axis &amp;#34;Уровень достижения / Требования (%)&amp;#34; 0 --&amp;gt; 100
line &amp;#34;Уровень достижений в современном школьном образовании&amp;#34; [95, 60, 15, 5, 2, 0]
line &amp;#34;Уровень, требуемый индустрией/технологическими компаниями&amp;#34; [0, 20, 85, 90, 95, 100]
&lt;/pre>
&lt;p>Чтобы преодолеть этот огромный разрыв (Долину Смерти - Death Valley), необходим радикальный сдвиг парадигмы школьного образования и колоссальные инвестиции. В условиях острой нехватки учителей, специализирующихся на «информатике», по всей стране, невозможно воспитать инженеров высшего уровня, способных конкурировать в мире, при нынешней системе, когда учителя математики, естественных наук или технологий и домоводства преподают программирование в свободное от основной работы время без надлежащего обучения.&lt;/p>
&lt;h2 id="9-обесценивание-кодирования-в-эпоху-ии-llm">9. Обесценивание «кодирования» в эпоху ИИ (LLM)
&lt;/h2>&lt;p>Ситуация еще больше осложняется взрывным распространением больших языковых моделей (LLM), таких как ChatGPT, и помощников по программированию на базе ИИ, таких как GitHub Copilot. В наши дни, когда ИИ может мгновенно сгенерировать идеальный код на основе инструкций на естественном языке и даже написать тестовый код, рыночная стоимость так называемых «кодеров (Coders)», которые знают только «синтаксис Python» или «как вызывать API», стремительно падает.&lt;/p>
&lt;p>В эпоху ИИ от инженеров-людей не требуется умение запоминать синтаксис языков программирования. Требуются следующие способности:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Определение требований и предметно-ориентированное моделирование (Domain modeling)&lt;/strong>: Способность выделять сложные реальные проблемы, которые необходимо решить, и моделировать их как системы.&lt;/li>
&lt;li>&lt;strong>Проектирование архитектуры&lt;/strong>: Способность составить чертеж всей системы для обеспечения масштабируемости, доступности и ремонтопригодности.&lt;/li>
&lt;li>&lt;strong>Математическая/логическая верификация&lt;/strong>: Способность теоретически проверить и доказать, что сгенерированный ИИ код не содержит дыр в безопасности или узких мест вычислительной сложности.&lt;/li>
&lt;/ol>
&lt;p>По иронии судьбы, все это области глубоких абстрактных «компьютерных наук и математики», а не «поверхностного программирования». Если японское образование обучает только «низкоуровневым навыкам, которые легко заменяются ИИ», это можно назвать лишь национальной потерей.&lt;/p>
&lt;h2 id="10-на-пути-к-интеграции-математических-наук-и-программирования-предложения-для-образования-следующего-поколения">10. На пути к интеграции математических наук и программирования: Предложения для образования следующего поколения
&lt;/h2>&lt;p>Срочной задачей японского ИТ-образования в будущем является отказ от отношения к программированию как к «цели и средству» и возвращение к «исследованию компьютерных наук как математической науки». Язык программирования — это всего лишь инструмент для выражения мыслей, а лежащая в его основе математическая и логическая структура имеет универсальную ценность, которая не меркнет с течением времени.&lt;/p>
&lt;p>Например, в основе искусственного интеллекта (ИИ) и машинного обучения тесно переплетаются линейная алгебра (матричные операции и тензоры), многомерный анализ (градиентный спуск) и теория вероятностей/статистика (байесовский вывод и количество информации). Оптимизация весов в нейронных сетях глубокого обучения формулируется через цепное правило (Chain Rule) с использованием частных производных и обратного распространения ошибки (Backpropagation).&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>Именно кадры, способные перевести такие сложные математические формулы в код и реализовать их, доведя параллельные вычисления (Parallel Computing) до максимума с учетом аппаратной архитектуры GPU (CUDA) или TPU, поведут за собой ИТ-индустрию следующего поколения. Вот почему мы должны немедленно переключиться с поверхностного образования, которое просто заставляет заучивать синтаксис, на глубокое образование, которое задается фундаментальными принципами вычислений (First Principles).&lt;/p>
&lt;h2 id="11-заключение-трудный-путь-к-истинной-ит-нации-и-наша-решимость">11. Заключение: Трудный путь к истинной ИТ-нации и наша решимость
&lt;/h2>&lt;p>Сделать программирование обязательным в 2020-х годах, несомненно, было уверенным шагом вперед в том смысле, что это заставило японское общество в целом осознать «важность ИТ и информации». Однако это лишь «разминка» на долгом пути.&lt;/p>
&lt;p>Сделать шаг вперед от удовольствия перемещать персонажа-кота в Scratch, научить восторгаться математической красотой алгоритма $O(N \log N)$ и показать радость общения с серверами по всему миру через TCP-пакеты с черного экрана терминала. Восстановить новую образовательную инфраструктуру для преодоления аппаратных ограничений концепции GIGA School, воспитать и расставить преподавателей с высокой специализацией в области CS, а иногда смело привлекать внешних профессиональных инженеров к школьному образованию.&lt;/p>
&lt;p>Проблемы, стоящие перед ИТ-образованием в Японии, чрезвычайно глубоки, укоренились и сложны. Однако, когда промышленность, академические круги и правительство серьезно объединятся для решения этих проблем, не отворачиваясь от них, и построят экосистему, способную постоянно выпускать «настоящих инженеров, способных проектировать и создавать системы с нуля», а не «рабочих, умеющих писать код только по спецификациям», Япония снова сможет возглавить мир как истинная ИТ-нация.&lt;/p>
&lt;p>Как пережить самый трудный и важный этап «после» введения обязательного обучения программированию? Именно сейчас проверяется серьезность и решимость нас, взрослых.&lt;/p>
&lt;hr>
&lt;p>&lt;em>В этой статье был представлен обзор теории сложности и инфраструктурных ограничений концепции GIGA School. Более специализированные темы по компьютерным наукам (подробности алгоритмов распределенных систем и методы управления памятью на низком уровне) будут последовательно рассматриваться в следующих выпусках этой серии.&lt;/em>&lt;/p></description></item></channel></rss>