Найти в Дзене
PHP Боярин

Как Илон Маск перечеркнул наследие НАСА и еще кое-какое

Есть одна штука, ярче выраженная в программировании, чем, например, в строительстве.

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

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

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

В программировании (и веб-разработке в частности), чаще всего, переписать код можно в обозримые сроки. Конечно, с ростом сложности продукта возрастает и сложность переделки, но сплошь и рядом разработчики не хотят работать со старым кодом (доставшимся в наследство от предыдущих) и стремятся переписать все заново. Это называется рефакторинг: продукт не получил новых возможностей, зато теперь внутри все красивенько и можно напихать свежих костылей.

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

А еще новая архитектура может получиться изящной за счет отбрасывания незначительных, на первый взгляд, костылей. Каковые держали много больше, чем полагали разработчики обновленного продукта. Забавный пример: раньше в адаптированное к дизайну сайта сообщение об ошибке "страница не найдена" приходилось напихивать комментариев, потому что иначе Internet Explorer старых версий думал, что оно слишком короткое, и показывал свою страшную страничку вместо нашей красивой.

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

Но в какой-то момент добавление новых возможностей в старый продукт становится невозможным или крайне дорогим.

А теперь самое интересное, и как раз про Илона Маска.

В других индустриях есть своё наследие.

Есть причина, по которой США не может просто построить новую ракету "Сатурн" и запустить человека на Луну, хотя в 60-е это у них получилось. С 1969-го года прошло более 50 лет, и те, кто строил эту ракету, уже не могут помочь собрать новую.

Производственные цепочки, позволившие собрать ракету из миллиона кусочков, изменились. Нет никаких гарантий, что прокладка 135-ZZp-56, использованная на старой ракете, будет произведена в наши дни с точно теми же свойствами, что и тогда. И так миллион раз.

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

Какой вывод? Нужно строить новую ракету.

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

И вот тут пригождается таран в виде "визионера", "гения", "победителя" по имени Илон Маск.

Государство дает ему финансирование для программы SpaceX, заранее заключает контракты на будущие пуски, под обязательство создать новую ракету, не учитывающую старые контракты.

Нет старых контрактов - не надо тащить в ракету старые компоненты. Можно все собирать из новых. Минус - старых компонентов нет, прежние владельцы не дают. Нужно все собирать из новых.

Это довольно рискованный подход, но таким образом США получили за государственные деньги абсолютно новую ракету, без старых "болячек", а Илон Маск получил много-много пиара и репутацию "изобретателя". Хотя он, разумеется, ничего в ракете не изобрел.

То, что ракета в итоге полетела, позволило плюнуть на старые контракты и дало возможность воспользоваться последними достижениями техники. Могло и не выгореть. Но теперь не надо думать о том, полетит ли ракета, если мы заменим бак, произведенный по старой технологии, на новый.

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

Второй успешный рефакторинг был проведен в области автомобилестроения. Автомобили Tesla в итоге смогли поехать, и прекрасно иллюстрируют тезис "невозможно учесть все при рефакторинге": забавная история происходит с багажником Tesla Model 3 под дождем (если вы не можете посмотреть видео, перескажу коротко: открывая багажник под дождем, вы получаете в него струю воды). Это вот прямо-таки типичный баг рефакторинга, когда не учли мелочь, которую не сочли важной.

Повторюсь - товарищ Маск скорее гениальный пиарщик, чем изобретатель. Но если рефакторинг удался - продукт можно смело насыщать свежей функциональностью. Что мы сейчас и наблюдаем.