Продолжаем обобщать и передергивать
Евгений Трифонов накатал ответку на мой старый Software Disenchantment! На что у меня есть несколько замечаний, по мелочам и по существу.
Готов поверить, что Word в 2020-м запускается медленнее, чем консольный редактор vi в 1983-м
Интересное искажение восприятия, в котором все консольное считается ультра-быстрым, а все гуевое по-умолчанию медленным. Word очень неплохо оптимизирован на startup time как раз. Вот видео посовременнее, вот из 2010 (на железе 2010!). Как и веб-страница facebook. Несмотря на раздутость по функциям обоих. А те же vim/emacs, обвешанные плагинами, могут вполне себе долго запускаться. Или вот, например, command-line prompts, которые рисуются до 1000мс после КАЖДОЙ команды.
Да, приложения за 10 лет выросли в разы. Но объём места за то же время вырос в СОТНИ раз. То есть жить стало в десятки раз лучше.
Ну вот к этому-то и был мой основной вопрос. Мы получили выигрыш в 100 раз за счет hardware. К hardware вопросов нет. Но потеряли 10 раз в software. И хотя в сумме мы вроде как в выигрыше, к software вопросы остались! В чем причина? Неужели это обязательно? Хорошо что жить стало в десятки раз лучше, но могло бы ведь и в сотни? Так почему не стало? Мы точно знаем что могло, потому что старые приложения сохранились и работают — быстро, четко, компактно на современном железе. Зачем делать хуже, если мы уже знали, как делать лучше?
Моя цель здесь — не раскритиковать конкретный пост, а показать общий подход: мы часто заявляем «приложения разбухли/затормозили без веских причин», не до конца понимая эти причины.
У меня кстати вопросы к размеру приложений пропали после того, как фейсбук переписал мессенжер. То есть раньше я думал, там действительно что-то неладно, что такие толстые приложения получаются. Типа, фотку олега тинькоффа в 4k забыли удалить. Или статически влинковали Oracle DB, причем сразу четыре разные версии. Но нет, это банально количество кода. Переписанный с нуля текстовый чатик начинается с 360 000 строк кода в фейсбуке. Это все обычные cкомпилированные классы, просто их так вот много. Вот столько они пишут. Большие компании — большие проблемы, I guess.
А если поискать более глубокие причины, то найдется очень простой ответ: единственный более-менее промышленно практикуемый способ работы с кодом — добавление нового кода. Не улучшение, не переделывание, не замена, не удаление. Добавление. Вот и имеем что имеем.
Да, легенды говорят, где-то в далеких горах еще существует rewrite from the scratch, и он действительно может улучшить положение дел, но это скорее экзотика, о которой видят сны электропрограммисты.
(Про то, что бывают и полезные улучшения) Когда в Android ввели Adaptive Battery («умное» определение, каким приложениям можно есть аккумулятор в фоне), замеряли ли вы, изменилось ли энергопотребление вашего телефона?
Yeah, Android is..interesting. Reminders come late, sometimes hours late. Dig deep in the settings in order to MAYBE fix it. It's a battery optimization thing
Who thought of that? We'll optimize battery life by NOT REMINDING YOUT IN TIME ABOUT THINGS YOU ASKED TO BE REMINDED OF!
Когда Google Play Protect в фоновом режиме заботится о вашей безопасности, вспоминаете ли вы, что раньше этого не было?
Здесь это приводится как пример оправданного улучшения и даже чуть ли не прогресса, но я лично наоборот, вспоминаю, что у меня iOS и macOS и там как-то без антивирусов все тоже неплохо работает. Так что да, постоянно задумываюсь, что с андроидом и виндоус не так, что им необходимантивирус.
(про то, что раздутие приложений тщательно планируется) Где-то люди в рабочее время вдумчиво взвешивали все плюсы и минусы, обсуждали их друг с другом, и пришли к выводу «плюсы перевешивают». А потом приходим мы, понятия не имеем, что там было на весах, тратить время на вдумчивое изучение не собираемся, видим только изменившийся размер — и делаем из него уверенный вывод «всё испортилось».
Если ты попросил стакан молока, а разработчики возвели рядом с твоим домом молочный завод, то почему бы и не удивиться — вы там адекватные вообще? Можно быть прекрасными людьми, все обсуждать друг с другом, приходить к выводам и получить совершенно неадекватный результат в итоге. И абсолютно нормально за такую адекватность спросить. И нет, «мы все обсуждали» не достаточная причина.
Заявления об «испортившемся софте» звучат так, будто раньше разработчики экономили вычислительные мощности, а сейчас они все плевать хотели на оптимизацию.
Я думаю, разработчики не сильно изменились в плане количества усилий. Но старые программы рассчитывались на старые компьютеры, и потому на современных летают. Вопрос, собственно, только в том, почему тогда не летают новые?
А поскольку я по работе связан с конференциями для разработчиков и пересекаюсь с многими из них (причём из разных стеков), я вижу, какие темы их заботят. О чём они слушают доклады, о чём общаются и пишут посты.
Про перформанс действительно хорошо делать доклады. Приятно прийти и в комфортной, безопасной среде среди таких же daydreaming коллег послушать сладкие сказки и помечтать о том, что у кого-то, возможно, где-то есть быстрые программы. На практике же об оптимизациях вспоминают скорее в последнюю очередь, и только когда совсем уж прижмут пользователи или конкуренты. А надо наоборот.
Производительность JavaScript через подзорную трубу
Ха-ха-ха, производительность и JavaScript в одном предложении, лол! Славу Егорова бесконечно уважаю, но надо правильно понимать message его докладов: они про то, что чтобы заставить JS в каких-то, очень специально отобранных случаях, достойно себя вести, нужно быть минимум compiler инженером, который над самим V8 и работает.
Кому лучше от древнего мастерства пятиярусных кроватей, если при этом пригласить друга в гости некуда? Не пора ли овладевать новым мастерством выбора king size-кровати?
Намек на нетрадиционные отношения? Одобряю!
По-моему, из-за Slack переживают в основном айтишники, которым оперативка нужна для других тяжёлых задач.
Ну у не-айтишников просто в целом нет денег на такие макбуки, на которых бы Slack вообще запустился.
Slack — это и есть рояль. Окей, он ест много памяти, но слышали ли вы, чтобы не-айтишники жаловались на него, как когда-то жаловались на Photoshop? По моим ощущениям, у обычных пользователей уже достаточно пространства, чтобы этот «рояль» не мешал им «пройти по комнате». Да, можно заменить на пианино и сэкономить место. Но если живёшь во дворце, и с годами площадь дворца становится ещё больше, то зачем?
Зачем вообще останавливать раздутие программ? Например, чтобы телефон или ноутбук 2017 года, с которыми все прекрасно физически, не превратились в тыкву три года спустя? Они же не изнашиваются за 3 года, процессор смазывать не нужно, пиксели из экрана не выпадают, память не засоряется. Нет НИ ОДНОЙ причины менять телефоны и ноутбуки так часто, кроме софтверной. Если железо ТАК сильно продвинулось (а оно продвинулось), я бы хотел воспользоваться этим преимуществом и покупать ноутбук за $200, а не за $1000, например, и чувствовать себя адекватно. Пользоваться программами, например. Я многого прошу, да?
(про Year 2000 problem) Но потом, много лет спустя, другим людям пришлось потратить кучу ресурсов на то, чтобы разобраться с последствиями этого решения и предотвратить проблемы.
Слава богу, с сегодняшними приложениями такой проблемы нет. С высокой доли вероятности, через десять лет ничего из них просто не запустится!
Если вы упоролись по выравниванию данных, и ваше приложение стало чуть-чуть меньше и быстрее, но вы потратили на это неделю, которая могла бы уйти на полезную фичу, то вы сделали пользователю лучше или хуже?
Я же прошу не о выдрачивании всего и вся, не о неделях работы ради 0.01% выигрыша, не призываю срочно переходить на C++ и бегать с дизассемблером каждое утро. Мне хочется приземленных совершенно вещей: чтобы программы под себя не ходили, например. В том же переписывании мессенжера видно, что все их суперуспешные по стандартам индустрии достижения, которые они получили, связаны только с тем, что они порезали абсолютно дикую хуйню и ересь из прошлой кодбазы и просто сделали нормально. Это не какие-то супертехнологии, а базовые совершенно вещи: переиспользовать код! Юзать одну базу, а не десять! Планировать! Разговаривать между отделами!
Моя претензия лишь к тому, что в связи с этими проблемами возникает какая-то радикальная секта, верящая в скорый конец света из-за разрастания софта. В этой секте переписывают историю («раньше всё быстрее работало!»), недопонимают происходящее («а почему это Windows с годами так выросла, там же ничего особо и не поменялось»), говорят о разработчиках незаслуженные вещи («они не хотят ничего оптимизировать») и ударяются в крайность «давайте экономить каждый байт, даже когда это сделает пользователям хуже». Давайте не будем так делать.
Ну а я закончу цитатой из твита @amyhoy:
users
will
never
create
DEMAND
for
better
software
you
have
to
fucking
CHOOSE
DISCIPLINE
to
create
it