Проблемы современной разработки. Часть 5: Ложь
Один из семи смертных грехов, стал частью ИТ-индустрии еще на ранних этапах и присутствует до сих пор. Своего рода соцкультурное явление, поломавшее немало судеб. Вообщем сейчас будет мой очередной рассказ.
О чем это все
Допустим вам надо купить дрель.
Вы приходите в магазин инструментов, где вам предлагают варианты исходя из требований и количества денег.
Чем будет отличаться дорогой вариант от дешевого?
Качеством исполнения, долговечностью и набором опций.
Чем обеспечивается долговечность и качество?
Техпроцессом и дорогими материалами — в первую очередь качественной сталью.
Все просто и достаточно очевидно, причем очевидно всем участникам: производителю, продавцу и покупателю.
Да да, покупатель прекрасно знает что берет хреновый товар за низкую цену, осведомлен о последствиях и принимает риски вроде быстрого износа.
Вообщем все просто и однозначно.
Конечно есть определенный уровень лжи и тут, есть сила рекламы и раскрутки, липовая сертификация и фиктивные тесты — но это погрешность, а не суть продукта.
Воздух оптом
Я уже раскрывал тему про то что такое программы на самом деле и как они работают изнутри. Поэтому повторяться не буду и сфокусируюсь в этот раз на бизнесовой части — что такое софт с точки зрения бизнеса и продаж.
Все характеристики ПО, которые вы видите в рекламных буклетах являются вымышленными — «свободно интерпретируемыми», если быть уж совсем толерантным точным.
По-сути счастливая семья на плакате пырит в несчастный PC с вендой лишь в ожидании положительных эмоций.
А большая часть списков справа состоит из набора софта же, а не технических характеристик PC.
Вот так делается коммерция в ИТ — через эмоции:
Вы хотите айфон
Конечно же вы хотите айфон — на свете сейчас нет наверное человека, который бы не хотел себе айфон.
Даже будь он папуасом или трижды гиком, работающим в секретном бункере глубоко под землей — он все равно желает и жаждет его получить, вопрос лишь в цене и самой возможности.
Как и почему у Apple такое получилось?
Есть и всегда были телефоны, в чем-то превосходящие любой айфон:
быстрее, с лучшей камерой, с большим количеством памяти, дольше держащие батарею и тд и тп — одни флагманы Самсунга чего стоят.
Но сила продукции Эппл абсолютно точно не в технологиях и инновациях, их сила в эмоциях:
как айфон ощущается в руке, как работает тачпад, скролл, выбор приложений — это все одно сплошное проработанное удобство.
Сами приложения — к ним предъявляются жесткие требования по отзывчивости, по UI/UX и так далее, пройти проверку и выложить свое поделие в официальный магазин очень непросто.
Но как вы понимаете, там где эмоции — там обязательно и темные паттерны, заставляющие непрерывно покупать.
А вслед за ними и общий подход к продукту и разработке:
скрытие деталей, ввод в заблуждение и постепенный переход в откровенное на#балово.
Управляют ведь всем этим одни и те же люди, поэтому и нельзя сделать клиентоориентированный и хорошо продаваемый софт без на#балова и темных паттернов.
Как поход к венерологу после борделя.
Вообщем ниже я раскрою самые популярные формы лжи, имеющие отношение к разработке софта.
Но вы должны понимать, что поскольку абсолютно все характеристики ПО являются выдуманными либо субъективными — «ложь» также является относительной.
Начнем с наверное самого популярного.
Ложь производительности
Очень легко и просто выдать в рекламе что-то из серии «наш софт самый смелый быстрый и производительный» и вам абсолютно ни-че-го за это не будет.
При определенном старании утрутся даже т.н «эксперты».
На которые можно списать любые проблемы.
А ведь для софта внешними факторами являются:
диски, память, шины данных, процессоры, сеть, операционная система вместе с другим прикладным ПО.
Словом — практически все что есть вообще.
Можно легко и просто ваять вот такие красивые графики, старательно опуская влияние внешних факторов:
Достаточно в одном из тестов включить например антивирус или какую-то фоновую проверку системы или обновления или поставить медленный диск — все, вы получите ощутимую и видимую разницу.
Но это все достаточно очевидные вещи, есть кое-что куда более глубокое.
Эффективное оборудование
Если у вас есть хотя-бы школьное понимание что такое компьютер — вам наверняка известно что «там внутри» есть процессор, память, жесткий диск и всякие контроллеры ввода-вывода.
Более продвинутые пользователи знают про южный и северный мост, разные типы памяти (например с контролем четности), разные порты и так далее.
Вообщем у вас есть ощущение что внутри некая логичная структура, которая может быть легко разбита на верхнеуровневые блоки, связанные между собой проводами.
Вновь вас разочарую, но это нихера не так.
Пройдемся по самому банальному (все же я не эксперт по компьютерному железу)
Процессор и его волосатые ядра
Как вы наверное помните, с какого-то момента марка процессора перестала означать частоту его работы, появились т.н «ядра» — несколько виртуальных процессоров, которые со стороны операционной системы стали отображаться как отдельные процессоры.
Но как 9 женщин не родят ребенка за месяц — точно также 9 ядер никогда не смогут суммировать свою производительность в одно ядро.
Это особенно заметно на каких-то расчетных задачах с кучей матана — без специальных оптимизаций все ваши расчеты будут вычисляться лишь одним ядром.
Да, на свете существуют суперкомпьютеры и параллельные вычисления, но вот только расчетная логика для них пишется специальным образом — для возможности разбивки на маленькие кусочки и параллельного выполнения на разных вычислительных юнитах.
Вообщем то что ОС общего назначения с софтом, не разработанным специально для параллельной обработки может масштабировать задачи на все ядра является чистой маркетинговой ложью.
Чтобы скрыть этот обман, планировщик ОС раскидывает запускаемые задачи по разным ядрам, чтобы в результате общий график загрузки CPU выглядел как при низкой загрузке.
Это причина по которой уже лет 10 нельзя увидеть 100% загрузку процессора в менеджере задач в Windows, только если лезть в настройки и отображать загрузку по конкретным ядрам.
Энергосберегающий режим
В наше толерантное время «тотальной экономии ради всего хорошего» стало как-то неприлично работать на полной мощности.
Плюс повсеместное распространение ноутбуков, кое-где даже с пассивным охлаждением.
Вообщем это все привело к тому, что для достижения декларируемой максимальной производительности процессора, нарисованной на его коробке надо серьезно постараться.
В первую очередь это про отключение режима энергосбережения, что делается далеко не так просто, поскольку этот режим на самом деле «виртуальный» — это комбинация из настроек как ОС так и всех ключевых драйверов:
видеокарты, дисков, WiFi, bluetooth, USB-портов и так далее.
Т.е. вам нужно по-факту сначала отключить, а затем проверить производительность ВСЕХ ключевых устройств, прогнав тесты.
Как думаете какой процент пользователей это умеют?
Поэтому максимальная производительность «из коробки» — еще одна маркетинговая ложь.
Жесткий диск
Вот тут вы наверное думаете что все очень просто — ну диск и диск. На вид как кирпич, подключил и порядок.
К сожалению внутреннее устройство современных дисков — п#здец какое сложное.
Начнем с того что любой современный диск — фактически мини-компьютер со своей внутренней ОС, с несколькими типами памяти внутри и сложной логикой на тему автоматической коррекции ошибок.
По-сути диск сам решает что и куда ему записывать для максимальной производительности — с его диска точки зрения.
Как вы можете догадаться — при таких раскладах скорость чтения (а тем более скорость записи) может очень сильно меняться случайным образом в произвольный момент времени.
И никакого способа на это повлиять из пользовательского софта не существует.
Едем дальше, в больших современных SATA дисках обязательно есть огромный SSD кеш, например для 2Тб SATA это может быть 10Гб встроенного SSD.
Делается это ради красивых показателей производительности в тестах на скорость чтения/записи — то что вы можете наблюдать в рекламных буклетах.
Получается что если объем данных укладывается по размеру в этот SSD-кэш — вы наблюдаете чудесные цифры скорости, как только кеш заполнился и пошла запись на основной магнитный диск — получаете падение в 10 раз.
Вот такая она, нарисованная маркетологами производительность.
Видеокарта
Если бы я играл в видеоигры или майнил биткойны — рассказ был бы длиннее, но даже опыта одной офисной работы и разработки хватит для описания нескольких интересных моментов.
Встроенное видео
Наверное вы в курсе что для офисных компьютеров и ноутбуков существуют т.н «встроенные видеокарты», не в виде отдельной платы, вставляемой в слот расширения, а в виде специального чипа на материнской плате.
Они имеют куда более низкую производительность и нужны по-сути лишь для того «чтоб было» — для минимальной графической нагрузки от офисных приложений.
Но куда менее известный факт, что такое встроенное видео достаточно недавно стали реализовывать прямо в процессоре, непосредственно на кристалле, как часть общей схемы.
Поэтому задачи современного процессора уже далеко за пределами выполнения ассемблерных инструкций.
Вот тут есть пара роликов от Intel, описывающих архитектуру современных процессоров, если кому вдруг интересно.
В чем проблема со всей этой встроенностью с точки зрения производительности?
Во-первых своей видеопамяти у таких встроенных карт фактически нет, поэтому чип вынужден «арендовать» под видеопамять часть обычной, которая мало того то сильно медленее, так еще и доступ к ней является внешним с точки зрения процессора — идет через шину и южный мост.
Поэтому чем больше такой карте выделяется памяти — тем тормознее все работает.
Во-вторых, поскольку встроенное видео является частью процессора — любая работа с даже простенькой графикой этот процессор капитально нагружает.
Это отлично видно на примере браузера и сайта с WebGL анимацией, на встроенной видеокарте зарузка CPU сразу подскакивает до небес, даже при очень простой сцене.
Но естественно с точки зрения маркетинга «все работает», а встроенное видео называется «высокопроизводительной видеокартой»:
They were known as Intel Extreme Graphics and Intel GMA. As part of the Platform Controller Hub (PCH) design, the northbridge was eliminated and graphics processing was moved to the same die as the central processing unit (CPU).
Две видеокарты (Hybrid Graphics)
В какой-то момент стали массово выпускать т.н «игровые ноутбуки», с мощной видеокартой, вроде как для игор.
Но поскольку из чипа процессора встроенное видео никто убирать не собирался — получилось что видеокарт везде стало две.
Были реализованы механизмы переключения между видеокартами, разной степени кривизны, с общей сутью:
приложения, требующие производительности (они же игры да) запускаются на мощной дискретной видеокарте, а весь остальной «офисный мусор» — на медленной встроенной.
Зато встроенная карта не сажает батарею за час работы и не греется.
Но как вы понимаете, все эти навороты лишь усложнили жизнь разработчикам и добавили новый класс ошибок — «догадайся на какой именно видеокарте оно запустилось» и почему.
На практике это означает что теперь есть 50% шанс получить близкую к нулю производительность в 3D-графике, просто запустив вашу софтвину на неправильно выбранной видеокарте.
Ложь обратной совместимости
Что такое «обратная совместимость»?
Это в общем случае — возможность запуска и правильной работы устаревшего приложения в новом окружении: новой ОС, c новым рантаймом и так далее.
Думаю что после фразы «правильная работа» стало очевидно что обеспечить 100% обратную совместимость невозможно технически — никаких сил не хватит.
Есть знаменитое письмо Линуса Торвальдса про стабильное API, полностью оно выложено вот тут:
This is being written to try to explain why Linux does not have a binary kernel interface, nor does it have a stable kernel interface.
Вообщем Линус пишет про то что стабильное API это нонсенс и неправильно.
Исходя из своего опыта разработки, могу сказать что ситуация бесконечного использования бинарника «write once — run everywhere» это точно такой же нонсенс и противоестественно для современной ИТ-системы.
Все слишком быстро устаревает, на уровне даже прикладного софта вроде JVM, .NET, не системного — даже тут происходит постоянное удаление устаревших функций, что очевидно ломает эту самую совместимость.
Поэтому пункт про обратную совместимость ныне редкость — ныне куда чаще пишут про долгий цикл поддержки, который как раз и означает выпуск новых сборок ПО с учетом изменений в окружении.
Но если вы вдруг снова увидите фразу «100% совместимость» — знайте что это чистая незамутненная ложь.
Ложь масштабируемости
Выше я уже упомянул что масштабируемость не бывает автоматической, что для достижения масштабируемости да и самой возможности запуска параллельной обработки — софт нужно специальным образом написать.
Даже если это десктоп и речь лишь про использование нескольких процессоров на одной и той же машине.
Далеко не каждая прикладная задача вообще может масштабироваться.
Ну смасштабируйте например графический интерфейс. Заодно узнаете почему у игры Quake не было многопоточности вообще.
Тем не менее, на регулярной основе появляются маркетинговые заявления про автоматическую масштабируемость, в том числе у софта реализующего клиентский интерфейс да.
Ложь безопасности
Про то что «безопасность это процесс» слышали многие, но осознают смысл этой фразы — единицы.
Поэтому для широких масс было понаделана туева гора разнообразных галочек, гайдов, окошек, переключателей — создающих эффект контроля над персональными данными, приватностью и безопасностью.
Естественно что к реальности это никакого отношения не имеет.
сколько из читающих знает где у вас хранятся файлы cookie и как они вообще выглядят?
А в них ведь хранятся сессионные ключи — та самая ваша «авторизация», которая показывает вам ваши приватные посты в Фейсбуке, не пуская всех остальных.
Вообщем «безопасность софта» это такая же сугубо виртуальная метрика как например «удобство» — точно также не имеет ни четких критериев ни границ ни измеряемых показателей.
Ложные выводы
Вообщем дорогие мои телезрители — вот такое оно, это ваше ИТ.
Когда-то вышедшее из математики и инженерных расчетов, из точных расчетов и цифр, ныне скатившееся практически в шаманство и экзотерику.
Современное ИТ — про выдуманные, уже чисто маркетинговые термины вроде «Serverless», не отражающие ни суть ни технический смысл.
Про выдуманные показатели и характеристики, которые можно трактовать как угодно. Про конференции и митапы, которые больше напоминают сборища религиозных фанатиков.
С другой стороны, когда твой товар это воздух — по-другому наверное просто нельзя.
Когда-нибудь все это говно рухнет под собственной выдуманной сложностью и убогостью, но видимо случится это очень не скоро.
А пока приходится во всем этом плавать жить и как-то работать.