Спустя 6 лет я докопался до ядра компьютера, и там была математическая формула

от автора

UPD: Это значительно переработанная новая версия статьи. Прошлая статья получила плохой фидбек (3 минуса, 0 лайков, 3 закладки, и 1 умеренно комплиментарный коммент от юзера-математика, который получил на 4 плюса больше чем моя статья).

Мне показалось это довольно загадочным, ибо сама идея статьи мне кажется довольно интересной, но я заметил, что глава про автобиографию явно перегружена, многочисленные детали в ней не помогают повествованию, так что я решил ее ужать до нескольких абзацев, плюс добавил оглавление, и небольшое дополнение в самом начале, остальное в статье не менялось.


Было лето 2022 года, я ехал на автобусе до технического колледжа, где проходили лекции по языку Go, которые мне оплатил работодатель. И тогда у меня возникла ясная мысль: среди этих единиц и нулей есть что-то очень важное лично для меня, и мне нужно до этого докопаться.

И недавно я до этого докопался — самым неожиданным для себя образом. Про это и будет статья, самая концептуальная из всех, которые я писал.

В школе я недолюбливал математику как предмет, в отличие от физики (и геометрий, это часть математики наравне с алгеброй в школе, но она всегда для меня была гораздо более понятной, чем ее «брат»), имевшей дело с вещами, которые можно было визуализировать и представить в голове.

С математикой, как мне казалось, все обстояло по-иному: мы имели дело с очень абстрактными вещами, которые не имеют аналогов в реальном мире, и чем в более старшие классы мы переходили, тем явнее мне это виделось. Все это казалось какой-то абстрактной чушью, которую описывает такой же бессмысленный набор букв.

И не могу сказать, что это только проблема образования и учителей, которые так подавали материал. По факту эта аллергия на предмет была вызвана исключительно тем, что я «прогулял» фундаментальную часть математики как способа описания.

Иначе я бы понял, что математика изначально берет упрощенную модель реальности, выводит из нее базовые примитивы — точки, линии, фигуры и пр. — и пытается непротиворечиво развить отношения между этими примитивами.

Впрочем, школа для меня сама по себе была крайне агрессивной и неблагоприятной средой обитания, и это тоже важно учитывать.

Но начнем по порядку.

Оглавление

Init()

В 2020 году, окончательно заскучав на ветеринарно-санитарной экспертизе, я начал искать занятие, для которого хватило бы обычного ноутбука. Веб-дизайн и 3D-моделирование меня не зацепили, зато простейший калькулятор на Python, собранный по туториалам во встроенном IDLE, совершенно пленил. Дальше обучение шло обрывками: бесплатные проекты для знакомых, телеграм-боты, первый проваленный заказ, а спустя год — программа-дашборд для подрядчика нефтегазовой компании.

В начале 2022-го я устроился Python-разработчиком в веб-студию и впервые попал в настоящее кодерское окружение. Проект был связан с GPT-3 и нейросетями — с этого момента ИИ стал одной из моих главных областей интереса. Однако после начала известных нехороших событий американские заказчики перестали иметь возможность платить, и в августе я остался без работы.

Следующие полгода ушли на изучение Go и неудачные собеседования. Я хотел попасть в ИИ, но без профильного образования и глубокого знания математики оказался никому не нужен; единственный серьезный шанс закончился провалом на техническом интервью. В начале 2023 года я пришел на собеседование программистом микроконтроллеров в небольшое приборостроительное предприятие.

Параллельно мне предложили тестовое на PHP-разработчика: оба задания я сделал с помощью ChatGPT, но на PHP-вакансию взяли другого кандидата, а заводское начальство мою работу одобрило. Так я совершенно случайно стал программистом микроконтроллеров.

За три года на заводе я погрузился в схемотехнику и электронику, работал со STM32, ESP32 и AVR, а параллельно писал графические интерфейсы на Lazarus и Java. Именно там я основательно прокачал понимание компьютера на фундаментальном уровне. В конце 2025 года я перешел в более комфортную компанию с высокой зарплатой, начал писать на Хабр и активнее заниматься пет-проектами, хотя по существу продолжаю делать то же самое.

Я начинал с поверхности — Python и веб-разработки, — но обстоятельства постепенно вели меня вниз по слоям абстракции, пока я не добрался до микроконтроллеров, схем и транзисторов. Этот путь сверху вниз и привел меня к нынешнему пониманию компьютера.

Момент истины

Тупой шортс на ютубе

Как обычно, просматривая шортсы на ютубе, я натолкнулся на отрывок из фильма «Люси» Люка Бессона. Там главная героиня с гиперинтеллектом рассказывала умным людям мира сего какую-то псевдонаучную теорию: математика — это фигня, а главное во Вселенной — время.

Автор фильма, не имея какого-либо технического бэкграунда, нес какую-то околесицу через персонажа и делал это с очень умным видом. Мне это показалось тупостью, и я какое-то время об этом думал.

И во время этого думания произошло нечто странное. Я задумался о самой сущности математики, и именно в этот момент случился один из самых мощных инсайтов в моей жизни. Как будто я вставил в свою базу данных недостающее ребро, и разрозненные до этого фрагменты знания стали очень быстро собираться в единую упакованную модель.

Задача про кухонную доску

Ахтунг! Тут будут формулы, если вас такое не устраивает, то кликните сюда для пропуска главы.

Чтобы вы лучше поняли суть этого инсайта, я опишу несложный мысленный эксперимент.

Представим реально существующую доску квадратной формы, которая лежит на столе. А теперь уберем стол, гравитацию, трение и даже обьем, и прочие физические характеристики, которые могут помешать дальнейшей задаче. Клонируем эту доску 5 раз, а теперь нужно их расположить с оригиналом в пространстве таким образом, чтобы по итогу получился куб.

Итак, у нас в пустоте висит доска — без стола, гравитации и даже объёма. Что от неё осталось после того, как мы убрали всю физику? Только форма, в данном случае квадрат.

И чтобы математически описать этот квадрат, сначала нужно договориться, где он находится. Выберем один угол доски и объявим его началом координат — точкой (0, 0, 0) Введём три воображаемые линии, которые идут через начало координат, их еще называют координатные оси:

  • ось (X) направим вдоль одной стороны доски;

  • ось (Y) — вдоль соседней.;

  • ось (Z) — перпендикулярно доске, или грубо — просто торчит вверх.

Сторону доски объявим единицей — метры и сантиметры остались в физическом мире вместе со столом. Теперь доска — это множество точек:

S = \{(x, y, 0) : x \in [0,1],\ y \in [0,1]\}

Запись читается так: S — это множество, состоящее из всех точек вида (x, y, 0), у которых первая координата — любое вещественное число от 0 до 1, вторая — тоже любое от 0 до 1, а третья всегда ноль. По факту и x, и y принадлежат к множеству между 0 и 1.

Деревянный предмет превратился в список символов. Этот трюк — переводить фигуры в числа — придумал Декарт в XVII веке, и называется он аналитической геометрией. С этого момента доску можно не рисовать, а вычислять.

Теперь — что значит «расположить доски в пространстве»? Нам достаточно всего два разрешённых действия: перенести и повернуть. Перенос — это сложение: к каждой точке прибавляем вектор t. Поворот — это умножение на матрицу R размером 3×3. Любое положение доски записывается одной конструкцией:

S′ = R·S + t

Теперь разберем эту конструкцию более подробно.

Штрих рядом с S означает результат преобразования той же сущности. S — доска до, S′ — та же доска после того, как её повернули и сдвинули. Чисто технически эту переменную можно было назвать как угодно, но для большей читабельности имеет смысл оставить связь с прошлой переменной.

t — это вектор переноса, и содержит он три числа: t = (tₓ, t_y, t_z) — на сколько сдвинуть вдоль оси X, на сколько вдоль Y и на сколько вдоль Z. Измеряется всё в наших единицах, то есть в сторонах доски: других единиц в этом мире не осталось. t = (0, 0, 1) читается «вдоль X не двигать, вдоль Y не двигать, вдоль Z поднять на одну сторону доски».

R — это матрица поворота, таблица 3×3 из девяти чисел. Откуда девять: поворот — операция линейная, а значит, его полностью определяет то, куда он отправляет три вектора координатных осей. Три оси по три координаты — девять чисел, и матрица — просто эти три ответа, записанные столбцами. Умножение R на точку собирает из них новое положение: «икс раз туда, куда уехала ось X, плюс игрек раз туда, куда уехала ось Y, плюс зет раз туда, куда уехала ось Z». А синусы и косинусы внутри — координаты повёрнутых осей: конец единичного вектора при повороте на угол θ оказывается в точке (cos θ, sin θ) — это буквально определение синуса и косинуса на окружности.

Теперь собираем куб — пусть он занимает пространство от 0 до 1 по всем трём осям.

Дно — исходная доска, она уже лежит где надо. Но даже ничего-не-делание математика заставляет оформить явно: R — единичная матрица, поворот на ноль градусов, t = (0, 0, 0).

Крышка — чистый перенос: R единичная, t = (0, 0, 1). Каждая точка (x, y, 0) уезжает в (x, y, 1).

Передняя стенка — а вот здесь нужен поворот: поставим доску вертикально, крутанув её на 90° вокруг оси X. Матрица поворота вокруг X выглядит так:

| 1    0       0    || 0  cos θ  −sin θ  || 0  sin θ   cos θ  |

Вот они слева направо — те самые синусы и косинусы. Оказывается, это шестерёнки поворота. Подставляем θ = 90°: косинус обнуляется, синус становится единицей:

| 1  0   0 || 0  0  −1 || 0  1   0 |

Умножаем на точку (x, y, 0) — и получаем (x, 0, y). Доска встала вертикально. Это передняя грань.

Оставшиеся три грани собираются из тех же двух глаголов: задняя — это передняя, сдвинутая на (0, 1, 0); боковые — поворот вокруг оси Y плюс, для правой, перенос на (1, 0, 0).

Итоговая формула куба:

F₁ ∪ F₂ ∪ … ∪ F₆

где

Fᵢ = Rᵢ·S + tᵢ

Один квадрат и шесть пар «поворот + перенос». Всё. Получается полый куб.

А теперь оглянемся на инструменты, которые понадобились: координаты, векторы, матрицы, тригонометрия. Откройте оглавление учебников алгебры и геометрии за 10–11 класс — это оно и есть.

Что по итогу

Полученные расчеты — это и есть математика в ее простейшем и первозданном виде. Фактически мы берем упрощенную модель реального мира и на основе базовых примитивов оттуда — точек, линий, фигур и т. д. — строим непротиворечивую воображаемую модель.

И самое удивительное здесь в том, что эта воображаемая модель часто с поразительной точностью предсказывает процессы, которые происходят в мире настоящем.

По сути, последние 6 лет я занимался именно что математикой, просто я это так не называл. Собственно, сам компьютер является математической структурой, которая может производить новые математические структуры, и реализовано это в кремнии, в физическом мире.

И это не говоря уже о том, что все отцы-основатели — от Ады Лавлейс и Бэббиджа до Тьюринга с фон Нейманом — в первую очередь были гениальными математиками, и сам компьютер появился как результат решения математических задач.

Но чтобы раскрыть этот тезис глубже, мы кратко разберем, как компьютер вообще появился.

Находясь у Ядра Машины

Компьютер изобрели дважды, с разницей в сто лет, — и оба раза на бумаге это делали гениальные математики.

Первый раз — Лондон, 1830-е. Навигационные и логарифмические таблицы тогда считали вручную люди-вычислители — и ошибались, а по этим таблицам ходили корабли. Чарльз Бэббидж начал с механического калькулятора для таблиц, но в 1834-м замахнулся на большее.

Его Аналитическая машина — уже полноценный компьютер: «склад» на тысячу сорокозначных чисел (память), «мельница» для операций над ними (процессор), условные переходы, циклы и программа на перфокартах, подсмотренных у ткацкого станка Жаккара. Всё это — из латуни и шестерёнок, с приводом от пара. Точная механика XIX века такой проект не потянула, и машина так и не была построена. Она осталась чертежом — математической моделью, которой не досталось физической реализации.

Ада Лавлейс, ученица Огастеса Де Моргана — того самого, чьи законы вы применяете каждый раз, когда раскрываете !(a && b), — в 1843 году перевела статью итальянского инженера Менабреа об Аналитической машине и снабдила её примечаниями втрое длиннее оригинала. В примечании G лежит расписанный по шагам алгоритм вычисления чисел Бернулли, с циклом и рабочими переменными. Первая опубликованная программа — написанная для машины, которой не существовало.

За это Аду называют первым программистом. Титул формально верен, но он прячет самое интересное. Он рисует картину, будто Ада пересекла границу между математикой и программированием. А границы не было. Ада занималась математикой — причём математикой о математике: она описала поведение математической структуры, которая сама производит математические структуры. Это и есть компьютер, суть которого уместилась в одно предложение.

Второй раз компьютер изобрели в 1936-м — и с противоположного конца. Алан Тьюринг не собирался ничего строить: он решал Проблему разрешимости Гильберта — существует ли механическая процедура, которая про любое математическое утверждение скажет, доказуемо ли оно. Чтобы ответить, надо было сначала строго определить, что вообще такое «механическая процедура».

Тьюринг взял человека-вычислителя (слово computer тогда означало профессию) с карандашом, бумагой и инструкцией — и абстрагировал его до предела: бесконечная лента из ячеек, головка чтения-записи, конечная таблица состояний.

И доказательство состоялось: ответ Гильберту — «нет», существуют задачи, которые не решит никакая вычислительная машина. Компьютер родился побочным эффектом теоремы о границах самой математики. Причём в той же статье описана универсальная машина — та, что читает с ленты описание любой другой машины и исполняет её.

Программа здесь впервые перестала быть частью устройства и стала просто данными — строкой символов, которую можно хранить, копировать и скармливать машине, как любой другой ввод. По этому принципу сейчас работает и ноутбук, и телефон, и любая другая компьютерная техника.

Оставалось отлить эти принципы в железе — но это уже история фон Неймана, который, к слову, статью Тьюринга прекрасно знал, и так же был гениальным математиком своей эпохи.

Как вы можете понять, история происхождения компьютера чуть более, чем полностью состоит из математики, и двигали ее люди, которые решали именно что математические задачи. История компьютера — это не история железа, к которому позвали математиков. Это история математики, которая очень долго ждала своего железа.

Заключение

Я пока только думаю, что делать со свалившимся с неба откровением, но, пожалуй, первым делом перечитаю учебники алгебры за 10-й и 11-й классы — уже с пониманием того, что описанные там структуры вообще значат.

Статья получилась дико экспериментальной даже по моим меркам, и не уверен, что она людям зайдет, но решил рискнуть.

А тем временем статья подходит к концу. До новых встреч!

ссылка на оригинал статьи https://habr.com/ru/articles/1065688/