Закон Старджона гласит: «Ничто не может всегда идти правильно». Рано или поздно всё ломается.
Это естественная причина, почему софт ухудшается с каждым годом. Иначе и быть не могло. Кодовая база растёт, количество ошибок увеличивается, проекты просто тонут в багах.
Взять недавний случай с багом в Windows Defender, который вызывал тормоза Windows. Крайне показательная история. Да, этот баг обнаружили, но в кодовой базе остались такие же. Мы этого не знаем наверняка, но вполне логично предположить, что количество скрытых багов растёт пропорционально кодовой базе. Поэтому софт всё больше тормозит со временем. Это естественный процесс, почти как закон природы.
▍ Софт становится хуже
Достаточно посмотреть на стартовое меню Windows 11 — и вы всё поймёте. Куда мы пришли и почему. Там полный набор всего худшего, что породило человечество, самого тормозного и бесполезного программного обеспечения: WhatsApp, TikTok, Xbox, Instagram и так далее.
Всё это предустановлено в систему. Для детей, пенсионеров и всех остальных, кто устанавливает Windows. Вот куда мы пришли. Более того, ОС пытается показать вам рекламу и склонить к покупке Microsoft 365. Это уже не операционная система, а продукт, действующий не в интересах пользователя. Такую систему в оригинальном виде просто нельзя ставить невинным, неподготовленным людям, потому что жалко людей… Лучше поставить простой дистрибутив Linux или скачать его модифицированную сборку.
Linux здорового человека
Раньше казуальные игры казались простыми и милыми: тетрис, пасьянс, минёр. А что сегодня? Всё напичкано рекламой и внутриигровыми покупками. Дети уже привыкли и не понимают, что всё должно быть иначе… они выросли в эпоху рекламы, инфлюенсеров и пропаганды — наверное, у них в раннем детстве сформировались фильтры против всего этого. Иначе никак.
На разжиревший софт накладываются ужасные интерфейсы. Например, самый простой способ потерять свою работу под Windows — случайно нажать стандартную кнопку Undo Copy (Отменить перемещение) в контекстном меню Проводника Windows. И вы безвозвратно потеряете абсолютно всю работу, которую сделали над перемещённой копией файла за день. Один случайный щелчок мыши — и всё пропало.
О хаосе с путями файлов в Windows на Хабре уже рассказывали. Там практически бесконечное количество способов сослаться на одну и ту же папку:
C:\CHAMELEON
c:\chameleon
C:\/\\//\\\///Chameleon
C:\Windows\..\Users\..\Chameleon
\\localhost\C$\Chameleon
\\127.0.0.1\C$\Chameleon
\\?\C:\Chameleon
\\.\C:\Chameleon
\\.\UNC\localhost\C$\Chameleon
\\?\Volume{59e01a55-88c5-411e-bf0a-92820bdb2549}\Chameleon
\\.\GLOBALROOT\Device\HarddiskVolume4\Chameleon
- и так далее
И всё это необходимо поддерживать! Отсюда и баги, и тормоза…
Ещё одна причина плохого ПО — это воображаемые проблемы, которые ставят перед собой разработчики. Иногда они погружаются в мир иллюзий и начинают решать проблемы, которых в реальности не существует.
Разработка ПО бывает настолько невыносимо скучной, что программисты ищут спасение в решении воображаемых проблем, о котором их никто не просил. Примерно как дети ищут спасение от скуки в вымышленных мирах научной фантастики, а женщины — в любовных романах. И это свойство не только отдельных разработчиков, но и менеджеров, которые ищут оправдание своему существованию. И целых отделов разработки, которым нужно
Количество воображаемых проблем, которые может создать для себя инженер-программист, зависит только от его воображения и мастерства программирования.
Вместо того, чтобы написать простой и быстрый инструмент для решения одной задачи, он создаёт увесистую клюкву, универсальный комбайн, или «идеально расширяемую» архитектуру. Отсюда и корни у постоянно тормозящих программ, которые становятся всё жирнее и медленнее.
Четверть века назад Windows NT 3.51 на процессоре 600 МГц (128 МБ RAM) запускала мгновенно большинство программ.
Те времена далеко в прошлом. Сегодняшние многоядерные CPU с 8 ГБ RAM на такое уже не способны. Что тут говорить, если почти любой современный сайт загружается с задержкой в несколько секунд, как Twitter на КДПВ.
В мире мобильных приложений ситуация не лучше. Они жиреют с каждым годом. А некоторые разработчики настолько криворукие, что их приложение будет обновляться каждые пять минут (по 250 МБ). Практически все популярные приложения шпионят за пользователями.
Люди не глупые. В глубине сознания кроется мысль, что 99% работы совершенно бессмысленно и требуется только для оправдания чьей-то чужой работы. Но большинству трудно это честно признать, а обычно и невозможно. Люди блокируют такие мысли и продолжают свою рутину, стараясь не задумываться о смысле.
▍ Везде некомпетентность и хаос
Собственно, это проблема не только софтверной разработки. Если посмотреть на жизнь трезвым взглядом, то придётся признать: хаос и некомпетентность — они везде, в любой сфере, какую ни возьми. Мы все — уверенные в себе идиоты. Эффект Даннинга — Крюгера проявляется повсеместно.
Отсутствие научных знаний — это наивное детское мышление. Взрослые люди не понимают, как устроена реальность с точки зрения психологии, биологии, социологии, даже физики и химии. Поэтому делают неправильные предположения о причинах явлений окружающего мира. Из-за неверной интерпретации возникают неадекватные реакции на окружающие стимулы. В результате вокруг нас движутся хаотичные массы абсолютно неразумно действующих агентов, которые реагируют на действительность наивно как дети.
Будущее всегда непредсказуемо. В любой момент может случиться что угодно, мы живём в условиях практически абсолютного хаоса. Вы думаете, что решаете сложную задачу, а она может оказаться нерешаемой в принципе. Практически всегда реальность оказывается хуже, чем мы ожидали. Любое дно пробивается. Абсолютно любое. Невозможно избежать боли и страданий, смерти близких и потери друзей. Только приняв это, можно освободиться и сконцентрироваться на работе.
Уверенность в себе не спасает от ошибок, а иногда увеличивает их количество. См. статью «Алгоритмические стратегии суждения лежат в основе завышенных самооценок эффективности» (Elanor Williams, Justin Kruger, Journal of Personality and Social Psychology, 2013).
Прямая связь между одобрением правила и благоприятной самооценкой, а также опосредованная связь между ними через фактическую согласованность решений в качестве медиатора (consistency), источник
Люди склонны выбирать определённые стратегии поведения и следовать им. При этом уверенность человеку придаёт не столько правильность стратегии, сколько неуклонная приверженность ей (чёткое следование правилам). Во время экспериментов Крюгера/Уильямс большую уверенность в своих результатах демонстрировали пользователи с наихудшими результатами, которые наиболее чётко и последовательно соблюдали свою стратегию.
Большинство людей чётко и неуклонно верят в теории заговора, вред прививок, мировое правительство и так далее, их невозможно переубедить. Вера в справедливый мир — вообще универсальное когнитивное искажение. Из неё вытекает уверенность, что каждая жертва сама виновата в своих неприятностях.
В то же время люди привыкают жить со злом и не замечают его, пока кто-то посторонний его не уничтожит. В качестве примера можно привести блокировщики рекламы. Люди долгое время жили с рекламой в интернете и мирились с ней. Они говорили, что реклама необходима, что это легальный бизнес. А потом появились блокировщики рекламы — и теперь трудно представить жизнь без них.
Всегда есть возможность что-то сделать.
▍ Быстрый софт
На свет то и дело появляются образцы быстрого и хорошо оптимизированного ПО, которое выбивается из современной моды на разжиревших неторопливых монстров.
Некоторые примеры:
- Linen.dev — альтернатива Slack/Discord с клиентом 500 КБ (в gzip'е). Обратите внимание на список оптимизаций. Среди них — оптимизация
react-icons
с 200 до 10 КБ, замена библиотек (HeadlessUI, клиент AWS S3, _loadash Union) кастомным кодом, перенос части функциональности на бэкенд. Полная раскладка на кликабельной диаграмме:
- SourceHut: набор опенсорсных инструментов для веб-разработки, без использования JavaScript, без трекинга и прочих излишеств. Только самые быстрые и лёгкие инструменты. Набор создан в мае 2022 года специально по запросам общественности (сейчас в публичной альфа-версии).
- Список крутого опенсорсного софта по философии suckless.
Ещё говорят, что будущее веб-разработки за HTMX. Этот инженерный подход предполагает перенос части рендеринга HTML на сервер, при этом сохраняя интерактивность на странице и обеспечивая крайне низкую задержку. HTMX выступает в качестве альтернативы одностраничным приложениям (SPA), которые полагаются на библиотеки и фреймворки типа React и Angular.
Всё это делается простыми способами с минимальным использованием JavaScript либо вовсе без него. Писать приложения можно на любом языке.
Пример списка TODO на Clojure (HTMX):
Ничего особенного, похоже на SPA. Перезагрузка страницы отсутствует, всё максимально плавно и интерактивно. Разница в том, что здесь никакого JavaScript, в том числе ClojureScript.
Недавно HTMX вошёл в двадцатку проектов, принятых в Github Accelerator. Кстати, большинство этих проектов ориентированы на веб-разработку, там ещё много интересного.