Вступление: Программирование умерло. Да здравствуют правила!
Помните времена, когда код писали люди, а не роботы? Когда творчество ценилось выше слепого следования стандартам? Современные языки — это не эволюция, а индульгенция для лентяев, которые боятся мыслить. Rust, Go, TypeScript — фабрики по производству посредственности, где каждый ваш шаг контролирует «всезнающий» компилятор. Пора назвать вещи своими именами: мы променяли гениальность на мнимую безопасность, а свободу — на кандалы статических проверок. Это катастрофа. Увы, не все это понимают.
Хотите узнать, почему? Читайте дальше!
1. Документация: От шедевров к инструкциям от IKEA
Помните Perl? Помните секцию SYNOPSIS в начале каждого документа? Чаще всего кроме этого раздела читать особо ничего и не требовалось. Мало того, можно было сформулировать правило: если интерфейс Вашей библиотеки не показывает лаконичного синопсиса, то скорее всего Вы сделали плохую библиотеку!
Perl с его POD — это «Война и мир» документации. Каждый модуль на CPAN начинался лаконичным примером, который в две строки объяснял, как творить магию. Не нужно было рыться в типах или трейтах: открыл доку — и сразу видишь живой код, а не бюрократическую отписку.
Современные языки? Добро пожаловать в ад автосгенерированной документации! Rust-крейты похожи на налоговые кодексы:
/// Конвертирует строку в число (написано роботом для роботов).
/// # Параметры
/// - `s`: &str (потому что String — это слишком человечно)
/// # Возвращает
/// - Result<i32, ParseError> (ведь вы обязаны обработать даже апокалипсис)
pub fn parse(s: &str) -> Result<i32, ParseError> { ... }
Где примеры? Зарыты где-то между #[derive(Debug)]
и impl FromStr
. Чтобы понять, как использовать функцию, вам понадобится докторская степень по расшифровке типов. Perl-сообщество уважало разработчика, современное — презирает, подсовывая вместо примеров стену текста.
Вывод: Документация умерла. Её место заняли автогенерированные мануалы для мазохистов.
2. Статическая типизация: Религия для параноиков
«А что, если передашь строку вместо числа?» — пугают адепты статики. Давайте посмотрим правде в глаза:
Львиная доля багов — логические. Ваш код может идеально пройти проверку типов — и всё равно уронить спутник на Марс, потому что вы перепутали
>
и>=
.Динамические языки — это свобода. В Perl
"25" + 10
даст35
, а не ошибку — потому что язык создан для решения задач, а не для удовлетворения паранойи компилятора.Статика — это бюрократия. Посмотрите на этот «идеальный» код на Rust:
let total: f64 = price.parse::<f64>().unwrap() * quantity.parse::<f64>().unwrap();
Теперь сравните с Perl:
my $total = $price * $quantity;
Perl понял, что вы имели в виду, а Rust требует клятву верности типам — даже если вы умнее компилятора.
Ирония: Статическая типизация не спасает от дурака. Она спасает дурака от необходимости думать.
3. Алгебраические типы: Величайший обман XXI века
АТД преподносят как прорыв. На деле — это костыль для статиков, которые боятся признать: динамическая типизация была права.
Пример: Парсинг YAML в Rust требует enum’а на 15 вариантов. Каждый match
превращается в ад ветвлений:
match yaml {
Yaml::Real(_) => { /* ... */ },
Yaml::Integer(_) => { /* ... */ },
Yaml::String(_) => { /* ... */ },
// ... ещё 12 вариантов
_ => panic!("Вы не обработали этот случай, потому что Rust вас ненавидит"),
}
Perl-подход:
my $value = parse_yaml($input);
# Обрабатываю то, что нужно. Остальное? Не моя проблема.
Итог: АТД — это статики пытаются имитировать свободу динамических языков. Получается как всегда: сложно, многословно, и всё равно небезопасно.
4. Иммутабельность: Бунт против законов физики
Второй закон термодинамики гласит: энтропия растёт. Это следствие (или доказательство) того, что мир мутабелен. Но функциональщики решили, что они умнее Вселенной!
Последствия:
Иммутабельные структуры — это обман. Даже Haskell, истошно кричащий о чистоте, прячет мутации в IO-монадах.
Гонки данных? Не смешите мои тапочки! Проблемы с гонкой решаются архитектурой, а не фанатизмом. Go с его горутинами и каналами — живое доказательство.
Перформанс? Правильные пацаны используют мутабельность, а не рекурсию! Попробуйте обновить 1 млн объектов в «иммутабельном» цикле — и ваше приложение будет удалено значительно раньше, чем успеет доработать!
Сарказм: Если вам так нравится иммутабельность — отключите клавиатуру и пишите код на камне. Это на 100% иммутабельно!
5. Философия: Как убить креативность за 10 лет
Perl дарил свободу:
TMTOWTDI — «Есть больше одного способа сделать это».
KISS — «Не усложняй».
Современные языки заменили это на:
TIOOWTDI (There Is Only One Way To Do It) — как в Go, где даже циклы только
for
.KICC (Keep It Complicated, Comrade) — как в Rust, где простой скрипт требует 100 строк из-за проверок типов.
Итог: Современные языки — это школы для послушных детей. Хотите творить? Вас накажут компилятором.
Самое время вернуться к истокам!
Пока статики спорят о null-safety, а функциональщики фапают на монады, неиспорченные программисты делают работу. Они не боятся мутабельности, не тратят часы на аннотации типов и вместо многострочных эссе в документации пишут короткие текстовые примеры с подкраской синтаксиса.
Они пишут код, который работает — и работает хорошо!
Манифест (Призыв к бунту)
Долой тиранию типов! Используйте Python, Perl, Raku — всё, что не душит вашу креативность.
Документируйте как художники. Пусть примеры будут яркими, а не спрятаны в автосгенерированном шуме.
Мутировать — это естественно. Перестаньте бояться изменений — и ваш код оживёт.
Программирование — это искусство. А искусство не терпит правил. Верните себе право творить — или смиритесь с участью винтика в фабрике кода.
Примечание
Иногда интересно подискутировать с ИИ, читая аргументы, что он приводит, поскольку в них содержится квинтессенция усреднённого текущего состояния. При этом ИИ, в отличие от случайных собеседников, читает твои аргументы, пытается принять их во внимание.
А в конце дискуссии можно попросить его обобщить суть до статьи.
Прошу прощения, но эта статья автосгенерирована ИИ, я лишь поправил некоторые особенно резкие выражения.