Александр Навагин
Пастор секты свидетелей Xiaomi, любитель металла, футбола, рыбалки, истории. Почти инженер и историк по образованию, шут по призванию, чудак по жизни

Почему оптимизация софта постепенно ухудшается, а требования растут

Почему оптимизация нынче уже не та © Fresh Consulting
Почему оптимизация нынче уже не та © Fresh Consulting

Современная электроника содержит процессоры, состоящие из миллиардов транзисторов, и многие гигабайты памяти. Ее вычислительным мощностям еще лет 20 назад могли позавидовать не только простые пользователи, но и крупные организации, имеющие гораздо больше возможностей. Но, при этом, мы регулярно сталкиваемся с ситуациями, когда 2 ГБ оперативной памяти смартфону уже не хватает для комфортной работы, а довольно мощный компьютер не очень быстро обрабатывает фото или видео.

Лет 10 назад можно было сидеть в интернете с одноядерного компьютера, оснащенного 2 ГБ ОЗУ, а сейчас условный Chrome способен скушать 8 ГБ памяти, намекая, что и этого ему мало. Налицо вывод: требования программного обеспечения растут, а оптимизация ухудшается. Но действительно ли это так? Кроются ли причины прожорливости софта в его плохой оптимизации, или есть и другие факторы?

Почему оптимизация ПО ухудшается

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

Компьютеры были слабыми, их возможности – ограниченными, поэтому программисты пытались выжать максимум пользы с каждого такта процессора и килобайта памяти. Когда речь идет о нескольких сотнях строчек кода – разработчику просто необходимо «вылизать» его до идеала. Делать это умел узкий круг специалистов, но и потребность в таких людях была относительно невысокой.

Простое железо требовало относительно простого ПО © Softpedia
Простое железо требовало относительно простого ПО © Softpedia

Лучшие умы трудились над программными продуктами, будь то ОС, профессиональный софт или игра. Они могли в одиночку написать мощный (по меркам тех времен) продукт, отвечая за все его компоненты. Однако по мере роста потребности в ПО рос и спрос на программистов, а сама эта профессия становилась более разнообразной, многогранной.

В XXI веке в одиночку уже не написать какой-то мощный продукт самому и создавая его рабочее «ядро», и разрабатывая взаимодействие со средствами ввода/вывода, и формируя дизайн. Над высокоуровневыми продуктами трудятся десятки и сотни людей, имеющие свою узкую специализацию. Если это игра, то один специалист (или коллектив) отвечает за физику, другой – за ИИ, третий – за графику, четвертый – за сетевые возможности, пятый – прорабатывает сюжет и т.д.

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

Современно ПО — продукт работы больших коллективов  © Nikkei Asian Review
Современно ПО — продукт работы больших коллективов © Nikkei Asian Review

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

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

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

Не оптимизацией единой

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

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

Экран первого iPhone имел разрешение всего 0,15 Мп, iPhone X – 2,74 Мп. Разрешение выросло в 18 раз, следовательно, как минимум во столько должна стать мощнее и электроника, отвечающая за формирование изображения. Камера того же iPhone в 2007 вообще не умела снимать видео, а в 2018 – может снимать ролики в 4К с 60 FPS. И это тоже невозможно без многократного увеличения производительности процессора, обрабатывающего изображение.

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

Так YouTube выглядел в 2007 © web.archive.org
Так YouTube выглядел в 2007 © web.archive.org

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

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

Пока одна студия будет стараться заставить игру с графикой уровня GTA V идти на недорогих ноутбуках – другая сделает продукт с графикой нового поколения. Пусть он и будет требовательнее к ресурсам, но зато получится дешевле и выйдет раньше.


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

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