Как стать автором
Обновить

Раздувание кода стало астрономическим

Программирование *Клиентская оптимизация *
Перевод
Автор оригинала: cliffski

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

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

… но по сути, речь идёт о том, что нужно зарегистрировать несколько файлов, считать их, загрузить, а затем закрыть соединение и записать в файл лога, всё ли прошло успешно, а если нет, то что именно случилось. В этом нет ничего сложного, и даже я писал с нуля подобный код при помощи Wininet API и PHP на сервере, общающемся с моей базой данных MySQL. Наверно, моя система была не такой надёжной, как системы уровня энтерпрайза, однако поддерживала сотни тысяч загруженных файлов, их верификацию, скачивание и логирование. Наверно, это работа для одного кодера на две-три недели?

Специальный инструмент загрузки на сервер, которым я пользуюсь сегодня, суммарно имеет 230 МБ клиентских файлов и задействует 2,7 тысяч файлов для управления этим процессом.

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

Проблема в том, что, скорее всего, этот аплоадер не отличается ни от одного подобного современного ПО, созданного любой другой крупной компанией. А, кстати, он выдаёт сообщения об ошибках и на текущий момент не работает.

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

Вы можете написать программу, которая загружает файлы на сервер надёжно, быстро и безопасно, и для этого потребуется двенадцатая часть от этого количества кода. Это может быть один файл, просто единственный маленький .exe. Ему не нужны сотни и сотни DLL. Это не только возможно, это легко, и такое решение будет более надёжным, эффективным и удобным в отладке, к тому же (подчеркну) оно на самом деле будет работать.

Можно подумать, что на разбухание кода жалуются старые программисты за пятьдесят (вроде меня), потому что они старые и ворчливые. И я осознаю это. Но старые и ворчливые жалуются на код, который работает на 50% медленнее, чем нужно, или на код, который на 50% больше нужного. Однако ситуация вышла далеко за эти рамки. Мы достигли черты, после которой, как мне искренне кажется, 99,9% кода в файлах на наших PC абсолютно бесполезны и даже, чёрт побери, никогда не исполняются. Код просто лежит в пакете из 65 DLL, просто потому, что кодер хотел сделать что-то тривиальное, например, сохранить битовое изображение и *понятия не имел, насколько это просто*, поэтому импортировал целую кучу bloatware, чтобы решить задачу.

Как я и говорил, на самом деле мне не стоит сердиться за это на молодых программистов. Именно так их и учили. Они понятия не имеют, что такое высокая производительность или разработка с учётом ограничений. Если скажешь им, что в первой Elite была огромная галактика, космические бои в 3D, система развития карьеры, торговля и тысячи исследуемых планет, и при этом игра умещалась в 64 КБ, то они услышат вас, но не осознают пропасть между этим и тем, что мы имеем сегодня.


Почему для меня это важно?

Меня волнует это по множеству причин, и не в последнюю очередь потому, что если для выполнения задачи вам нужно в две тысячи раз больше кода, то он хотя бы должен работать. Но более важно то, что я осознаю: 99,9% процессорного времени моего огромного мощнейшего PC совершенно бесполезны. Он выполняет миллиарды операций в секунду, просто чтобы простаивать. Поэтому сейчас он должен находиться в сверхнизком режиме энергопотребления, все вентиляторы должны молчать, потому что всё, что я делаю — это занимаюсь проверкой орфографии, вводя текст в WordPress.

Ха. WordPress.

Сегодня компьютеры настолько быстры, что мы должны были бы воспринимать их как абсолютную магию. Всё, что бы вы ни могли представить, должно успевать происходить за 1/60 секунды. Тем не менее, когда я нажимаю на значок громкости ноутбука Microsoft Surface, то вижу задержку: машина постепенно создаёт новый элемент интерфейса пользователя, разбирается, какие значки отрисовывать, а затем они появляются и становятся интерактивными. На это уходит время. Кажется, около половины секунды, что в масштабах времени процессора близко к миллиарду лет.

Если сейчас (по консервативным оценкам) 99% ресурсов наших PC тратится впустую, мы впустую тратим и 99% потребляемой компьютером энергии. Это абсолютно преступно. И для чего же эти траты? Понятия не имею, но если взглянуть в диспетчер задач, то можно увидеть тонну разбухшей программной ерунды, которая бог знает чем занимается. Я всего лишь печатаю этот пост для блога. В Windows запущено 102 фоновых процесса. Моей графической карте NVIDIA в настоящий момент принадлежат 6 из них, а некоторые из них имеют подзадачи. Чтобы делать что? У меня не запущена игра, я пользуюсь практически тем же набором функций драйвера видеокарты, что и двадцать лет назад, но зачем-то необходимы 6 процессов.

Web View Microsoft Edge тоже нужны 6 процессов, как и самому Microsoft Edge. И я даже не пользуюсь Microsoft Edge. Кажется, я открывал вчера файл SVG, и вот пожалуйста — 12 бесполезных кусков кода впустую занимают память и, наверно, к тому же опрашивают ЦП.

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

Лично я думаю, что дальше всё будет только хуже, потому что крупные тупые, бесполезные технологические компании наподобие Facebook, Twitter, Reddit и т. п. — наихудшие примеры этой тенденции. Скоро каждый из тысяч работающих в этих компаниях «программистов» будет использовать машинное обучение для копипейста раздутого, забагованного, расползающегося фуфла с Github в свой код. Просто для того, чтобы сложить два числа, понадобится 32 DLL, 16 служб Windows и миллиард строк кода.

У Twitter две тысячи разработчиков. Tweetdeck иногда отказывается загружать столбец пользователей. Это происходит уже четыре года. Уверен, что никто из кодеров не представляет, почему это происходит, а код в его основе — это просто куча раздутого скопипащенного навоза.

Предлагая название темы по тексту ссылки, Reddit не может справиться с амперсандом, точкой с запятой и символом фунта. На дворе 2022 год. Вероятно, у компании тоже две тысячи разработчиков. Очевидно, ни один из них не способен заставить правильно работать парсер текста. За что платят всем этим людям?

Когда-то был золотой век программирования, когда у нас были ограничения на память и ЦП. Сегодня мы живём в яме неэффективности и огромной траты ресурсов. Это очень печально.
Теги:
Хабы:
Всего голосов 413: ↑399 и ↓14 +385
Просмотры 86K
Комментарии Комментарии 848