# pro.01_20 Диалектико-теоретические требования к языку

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

Философские основания языка программирования: диалектико-материалистический подход.

## Онтология языка

Что такое программа с точки зрения диалектического материализма:

> Программа — это форма организации материи в информационной сфере.

- Она не существует в идеальном мире Платона.
- Она не порождение чистого разума, оторванного от практики.
- Она — продукт человеческого труда, направленный на преобразование объективной реальности (аппаратуры, данных, социальных процессов).

> `Программа — это материализованная логика, выраженная в коде; выполняется на машине, которая изменяет реально существующий мир.`

Следовательно, `язык программирования` — инструмент труда, подобный молоту для рабочего или плугу для крестьянина в одной своей проекции. И материализованное знание общества, подобно книге в библиотеке.

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

## Эпистемологический вопрос

Как язык отражает реальность?

Диалектический материализм утверждает: `сознание отражает бытие во всех доступных проекциях`.

Применительно к языку:

> 💡 Хороший язык — тот, который наиболее адекватно отражает структуру объективной реальности, в которой работает программа.

Это означает:

- Если реальность параллельна (множество процессов), язык должен поддерживать параллелизм без избыточных или вычурных абстракций.
- Если реальность обладает состояниями и реальность переходит из одного состояния в другое (серверы, базы данных), язык должен моделировать состояние безопасно и явно.
- Если реальность ошибочна (падения, сетевые сбои), язык должен встраивать устойчивость как норму, а не как решение `ad hoc`.
- Язык не должен искажать реальность ради "элегантности" или "чистоты" — это идеализм, враг материализма.

## Противоречие между формой и содержанием

В каждом языке — борьба формы и содержания:

- Хочется иметь красивый, лаконичный код;
- Машина требует чёткости и эффективности;
- Язык должен быть универсальным;
- Но реальность требует специализации;

Диалектический синтез: `проекция должна служить смыслу, а не доминировать над ним`.

Пример идеалистического перекоса:

> ⚠️ Язык, где всё выражается через монады, но никто не может написать HTTP-сервер за 10 минут.

Язык, где синтаксис "чист", но производительность падает в 10 раз. Это как построить прекрасный дворец, который замедляет проход посетителей, потому что эскалатор всегда едет навстречу.

Платоновские пещерные люди смотря на тени на стене не понимают истинного смысла теней. Это то, от чего старается уходить `prolet`.

## Язык как производительная сила

В информационной эпохе язык программирования — производительная сила.

- Он увеличивает производительность труда программиста;
- Он определяет скорость и качество создания программ;
- Он влияет на распределение ресурсов (энергия, память, время).

Следовательно, разработка языка — с одной стороны акт индивидуального творчества, с другой стороны -- акт коллективной значимости.

Капиталистический подход: язык, который делает программиста зависимым от проприетарных платформ (`Swift`, `C#` в прошлом).

Общественно-коллективный подход: язык, который освобождает труд от частной зависимости, делает его коллективным, доступным, прозрачным (`Python`, `Rust`, `Lua`).

> `Язык должен быть орудием освобождения умственного труда, а не инструментом эксплуатации через зависимость.`

## Язык и сознание: формирование "программиста нового типа"

Карл Маркс как-то сказал: *"Условия, которые изменяют людей, — это практика."*

Язык программирования, как инструмент познания мира, изменения мира и воспитания формирует мышление программиста.

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

> 💡 Язык — это педагогический инструмент.

Новый язык должен:

- Развивать комплексное статическое и динамическое мышление;
- Поощрять коллективную разработку, как преобладающий способ производства на практике;
- Обучать ответственности за код (в том числе — экологической, социальной).

Философская позиция не отменяет практику, но делает её **сознательной и целевой**.

Например: `Инженер должен выбирать между элегантностью и производительностью, зная, что выбор влияет на социальные последствия`.

## Философские принципы проектирования языка как постулаты

На основе диалектического материализма следуют шесть фундаментальных принципов:

### Принцип объективности

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

### Принцип противоречия

Язык должен не избегать противоречий, а позволять их осознанно разрешать (например, безопасность vs производительность — через явные аннотации).

### Принцип историчности

Язык должен учитывать исторические материальные обстоятельства каждого момента времени своего существования

### Принцип временной необратимости

Язык должен следовать принципу необратимости вдоль оси времени. Нельзя использовать то:

- чего ещё нет;
- и то, чего уже нет.

### Принцип развития

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

### Принцип практики

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

### Принцип единства теории и практики

Язык должен объединять математическую строгость (теория типов, логика) и практическую применимость (встраиваемость, производительность). Но математическая строгость при этом должна находить отражение в реальной практике.

### Принцип коллективизма

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

## Критика идеалистических течений в языках программирования

Чтобы укрепить философский фундамент, необходимо разоблачить идеалистические отклонения:

### Платонизм типов

> `"Типы существуют в идеальном мире"`

Типы — инструмент для предотвращения ошибок в реальных системах.

### Культ элегантности

> `"Код должен быть красив"`

Код должен быть работающим, понятным, безопасным. И только потом -- по возможности красив.

### Аскетизм (минимализм ради минимализма)

`"Меньше — значит лучше"`

Меньше — если это служит практике, а не догме.

### Техноэлитаризм

`"Только избранные поймут этот язык"`

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

Все эти течения — отражение эгоистического индивидуализма в программировании.

Вывод: `язык как орудие революционной смены парадигмы в сознании`

> 📙 Разработка языка программирования — не инженерная утилитарная задача, а акт философский, политический, имеющий глубокое влияние на сам способ существования общества.

Разрабатываемый язык:

- Будет материалистическим — опирается на реальность,
- Диалектическим — разрешает противоречия,
- Практическим — служит делу преобразования мира,
- Коллективистским — строится и используется сообществом.
- Педагогическим — служит построению нового способа мышления разработчиков.
