О неинженерном подходе к инженерным задачам
Попалась мне на гдаза игра Factorio. Игра, нужно сказать, очень впечатляющая. Фабула такова, что вы терпите крушение на звездолёте на незнакомой планете. Звездолёт вдребезги и у вас на руках только твердотопливный бур и плавильная печка. Вам необходимо, в одиночку, создавая всё более сложные средства производства, пройти весь путь индустриальной цивилизации, чтобы построить новый звездолёт.
Вам предстоит создать и освоить ленты транспортёров, автоматические манипуляторы, создание электростанций и сборочных цехов.
Игра начинается с беготни между месторождениями, где ставятся первые агрегаты и ручной загрузки их ресурсами. Затем — первые автоматические заводы. Затем — оказывается, что для производства деталей следующего уровня, необходимо поставить 20+ плавильных печей или сборочных цехов и здесь вы встречаетесь, во-первых, с вопросом логистики, потому что начальная лоскутная инфраструктура не предназначена для такого масштабирования, а, во-вторых, вся эта куча хлама имеет свою производительность и потребность в деталях на единиц-секунду продукции, поэтому планирование объёмов и доставки тоже имеет значение.
В довершение, местная фауна под действием загрязнения мутирует и начинает на вас нападать.
В общем, игра более чем достойная и имеет массу поклонников.
Однако, самый показательный момент в ней, чётко характеризующий наше технологическое общество и все его перспективы — это бешенная популярность игры среди программистов и пафосное их обращение «товарищи инженеры». А вот давайте-ка этот момент разберём подробнее, чтобы выяснить, кто у нас нынче инженеры и какие скилы сейчас в инженерной моде.
Ну, во-первых, а также во вторых и в-третьих, главный скилл этой игры — планирование. Вы должны планировать территорию для развития, должны численно планировать загрузку линий, должны планировать, когда на вас нападут, должны планировать фазы технологического перехода… планировать и планировать.
Во-вторых, вы должны строить. Строить, строить и строить. Большую часть времени — руками. И, конечно, облегчать себе этот труд, делая «шаблоны», по которым вы будете строить… тоже руками.
Ну, т.е., зафигачить фабрику на 100 элементов, используя шаблон-кальку с предыдущей и радуясь, что у вас есть для этого удобный опорный документ.
Всё это время вы двигаетесь по энциклопедической карте научных открытий (вероятно, этот артефакт тоже остался у вас с разбитого звездолёта).
Люди, вы серьёзно? Вы считаете это инженерией? Способность прогнозировать и производить по мануалу тучу повторяющихся действий… Вы. Считаете. Инженерией.
Я Вас огорчу, хотя многие, вероятно, не поймут.
Инженерия — это о том, как всего этого не делать.
Вообще всего, что перечисленно. Без исключений.
А если придётся, то… сказать решительное НЕТ! и всё равно не делать.
Инженерия — это про то, как сделать один раз. Отдать и в следующий раз делать что-то другое.
Инженерия — это про то, как сделать не по мануалу, а вопреки мануалу, преодолевая его ограничения.
Инженерия — это про то, как делать средства производства, которые будут делать средства производства.
Инженерия — это про то, как проскочить 10 обязательных стадий развития.
Инженерия — это про то, как автоматизировать даже те действия, которые нужно сделать один раз. Просто потому что времени займёт столько же, но не так занудно.
Инженерия — это про то, как запустить то, что в принципе не может работать.
Теперь давайте посмотрим на что похожа современная индустрия разработки программного обеспечения.
Во-первых, это, конечно, вопрос планирования. Сколько человек придёт на сервис, сколько данных соберётся, с какой скоростью они будут обрабатываться…
Во-вторых, это про точное знание тысячи мануалов. По развёртыванию приложения, по распаковке пакетов, по запаковке пакетов, по запуску препороцессоров, по публикации, по обновлению, по документированию, по тому, какие кавычки нужно использовать, по тому, в какой каталог складывать библиотеки, по ежедневным стендапам и по еженедельным шабашам.
Т.е., спору нет, всё это не просто полезные, а чертовски необходимые вещи, без которых не построить… ничего в духе Factorio. Потому что это придумали не инженеры. Это придумали чуваки с Factorio в голове. Для них не в тягость, когда 100 элементов по мануалу и радость, когда мануал есть. Для них нормально этот мануал ещё и помнить наизусть. Но это не инженерия.
А как будет строить инженер? А инженер будет строить так, чтобы всего этого было не нужно. Ни планирования, ни расчёта. В этом фокус. Вам должно быть удобно в любой момент времени. И когда используете, и когда строите. Конечно, это не позволяет решать ряда задач, так необходимых для… для денег и для управления. Но вот только инженерия — это про то, что не надо управлять тем, что само работает и про то, как дать людям пользу, а не препятствовать её раздаче, прося за неё деньги. В этом и был смысл похороненого нынче движения GNU/OpenSource.
Тогда что же это, если не инженерия?
А это научный подход, или, иначе, так называемая, «жреческая» деятельность. Индустрия, основанная на знаниях. А не на проектировании. Так создавались Египетские пирамиды.
Плохо ли это?
Отнюдь. Это позволяет что-то делать по мануалу.
Хорошо ли это?
Для массовости — хорошо.
А для развития — это пушной зверь и погибель. Потому что так можно делать только то, что определимо в пределах мануала. И чем больше мы наваливаем сверху и сбоку компонентов, тем сложнее становится из этой обусловленной мути выбраться. Закончиться этот процесс, следовательно, может, только одним способом — похоронами ВСЕЙ сложившейся индустрии. Без исключений и изъятий. В один, без преувеличения, прекрасный момент, про неё все забудут. И это будет не какой-то постепенный переход, это будет именно момент, точка слома. Ещё вчера это был почётный труд на миллиарды человеко-часов, а сегодня — хлоп, и это стало непонятным куском песка и камня, воздвигнутым толпой египетских рабов, которые даже не понимали, чего строят и для чего. Просто хреначили, чтобы хреначить. А сегодня кто-то задал вопрос «а для чего?» и все разбрелись в поисках смысла.
Вот, кстати, ещё одно про инженерию — она не для того, чтобы просто хреначить, она всегда для того, чтобы чтото поменялось в реальном мире. К добру, к худу — это уж как получится. Но нет физических изменений — нет и инженерного дела.
С инженерным приветом…
Прекрасная статья. Инженер радуется.
А какие составлящие должны сойтись в точке конвергенции, чтобы случился этот момент?
Новый принцип получения энергии, новая форма социальных отношений, новая вера, …
Формально момент уже случился. На завиральные идеи без практической цели больших средств будут выделять всё меньше. Вектор в российских ИТ уже сменился на хозяйский — лет на 20.
А вот что снесёт индустрию глобализованных систем — это пока вопрос.
Вероятнее всего, что глобальные сети и решения посыплются из за санкционного и прочего логистического давления обстоятельств. Если экономика с этим не справится, то пойдёт вынужденное перераспределение нагрузки по хранению и обработке данных на периферические системы, консолидируемые в динамические сети.
Но это пока только версия — может и справится. Тогда мы этот подход увидим сильно позже.