Взгляд на управление: Инженерия — это наука — это инженерия en ru

Наглядная иллюстрация инженерного и научного подходов.
- Точки зрения на продукт
- Цикл проверки гипотез
- Что почитать, когда и почему
- Нет инструкций для инженерии
- Инженерия — это наука — это инженерия
В предыдущем посте мы обсудили, что инженерия — это творческая деятельность, которая не сводится к исполнению инструкций. Поэтому для управления инженерными коллективами необходимо использовать практики, созданные для творческих коллективов.
А что может быть более творческим, чем вокально-инструментальный ансамбль наука?
Поэтому в этом посте я попытаюсь показать, что инженерия концептуально значительно ближе к науке, чем может показаться на первый взгляд. А также, что в современном мире эти дисциплины всё больше сближаются. Я бы даже поставил на то, что граница между ними сотрётся.
Оговорки
В предыдущем посте есть целый раздел, посвящённый оговоркам при обсуждении инженерии и творчества. Не буду их повторять здесь.
Если какие-то утверждения кажутся вам спорными, преувеличенными или вы не видите рассмотрения важных частных случаев, пожалуйста, первым делом прочитайте тот раздел.
Также обратите внимание, что в этом посте будет значительно больше текста со стороны инженерии, чем со стороны науки. Потому что я нахожусь со стороны инженерии и, в первую очередь, заинтересован в улучшении своей жизни :-)
Почему инженерия похожа на науку
Инженеры производят новое знание
В предыдущем посте я говорил, что инженерия производит новую информацию.
В этом же посте я хочу сделать более сильное утверждение и указать, что производимая инженерией информация — это новое знание о мире.
Есть разные определения знания, для наших целей я воспользуюсь следующим:
Знание — это организованная сильно связанная информация, которая позволяет создавать достоверные модели поведения окружающей реальности или может использоваться таковыми моделями.
- Записи о случаях взрыва различных веществ — это информация.
- Формальное описание двигателя с заданным КПД — это знание.
С философской точки зрения, инженерия и наука производят разные виды знания:
- Наука
иногдапроизводит концептуально новое знание о мире — как мир работает — структура ДНК, закон всемирного тяготения Ньютона, формула зависимости энергии от массы Эйнштейна. - Инженерия производит прикладное знание — как сделать конкретную штуку, которая будет взаимодействовать с миром предсказуемым образом — чертёж моста, код блога, который вы сейчас читаете, чертежи большого адронного коллайдера.
Наука накладывает множество ограничений на производимое знание, например, критерий новизны — знание должно быть новым для научного сообщества, а не просто полезным.
Существенная часть знаний, которые производит инженерия, не подходит под эти ограничения. Поэтому можно было бы сказать, что общего между ними нет и закрыть вопрос.
Но я хотел бы обратить внимание на следующие нюансы.
Во-первых, добыча обоих видов знаний происходит однотипно — через исследование пространства решений — и требует одного и того же набора навыков и инструментов.
Поскольку мы говорим о человеческой деятельности, то для нас как раз важнее сходство в инструментах, процессах и типах взаимодействия с конечным продуктом, чем различия в философских определениях его сути. Если что-то выглядит как утка, плавает как утка и крякает как утка, то, скорее всего, это утка.
Во-вторых, де-факто, многие научные дисциплины сейчас производят огромное количество прикладного знания, научная новизна которого стоит под вопросом, если следовать букве закона науки. В то же время, многие инженерные отрасли давно оперируют на фронтире человеческих знаний и двигают его вперёд.
Можно сказать, что границы между научным и инженерным знанием размываются.
Для примера
Большой объём работ в биоинформатике, физике, химии сейчас посвящён разработке софта или физических приборов на основе уже существующих научных знаний.
Инженерные достижения в области глубокого обучения и LLM в частности, сейчас открывают целый новый фронтир для научных исследований: от классического Computer Science, до лингвистики, психологии, когнитивных наук и философии.
Большие языковые модели — это отличный пример синергии и эмерджентности взаимодействия науки и инженерии, переплетения видов знаний:
- Физики открыли новые свойства полупроводников — наука сдвинула фронтир.
- Благодаря чему инженеры NVIDIA создали новые вычислительные архитектуры — инженерия сдвинула фронтир.
- Это позволило учёным сделать несколько концептуальных прорывов в нейронных сетях — наука сдвинула фронтир.
- После чего инженеры OpenAI отмасштабировали новые сети — инженерия сдвинула фронтир — и мы получили то, что получили.
Я бы даже сказал, что в области искусственного интеллекта граница между наукой и инженерией почти стёрта.
Это даже Elon Musk подтверждает в свойственной ему грубоватой манере:
This false nomenclature of “researcher” and “engineer”, which is a thinly-masked way of describing a two-tier engineering system, is being deleted from @xAI today.
There are only engineers.
Researcher is a relic term from academia.
Инженеры производят модели окружающей реальности
Суть примерно та же, что и в предыдущем пункте, но на чуть более высоком уровне абстракции.
Работа инженера заключается в описании на формальном языке некоторого артефакта, который будет демонстрировать необходимые свойства в заданной среде. Иногда не только в описании, но и в создании — для нужд этого текста это не существенно.
Примеры артефактов:
- Здание, которое будет устойчиво к землетрясениям в 7 баллов по шкале Рихтера, будет иметь уровень энергопотребления не выше X и будет пригодно для проживания при температурах от -30 до +50 градусов. При условии, что оно будет построено на такой-то почве, из таких-то материалов, с такими-то технологиями.
- Программа учёта налогов, которая корректно посчитает налоги согласно законам страны N в таком-то временном интервале, будет работать на платформах Windows и Linux и будет соответствовать таким-то ожиданиям пользователей по безопасности. Требования законодательства, свойства платформ, ожидания пользователей — всё части внешней среды.
Таким образом, инженерное описание артефакта, по сути, является частной моделью реальности — оно неизбежно предсказывает поведение небольшого её кусочка. Как и любая модель, оно имеет область применения, ограничения, допущения, уровень точности и прочее.
Формально
С современной точки зрения инженеры описывают 4D-системы (3D-пространство + время), которые могут включать не только физические неодушевлённые объекты, но и людей, процессы, потоки информации и прочее.
Даже спецификация гайки, формально, описывает её в 4D, так как неявно учитывает изменение свойств гайки со временем (например, износ) через указания на материалы и условия эксплуатации.
Для нужд данного эссе этот нюанс несущественен, но я всегда стараюсь давать сноску на него, так как для инженерии он критически важен.
Концептуально тем же самым занимается и наука — создаёт модели окружающей реальности, только более глобальные. Поэтому между идиоматическими научными и инженерными моделями существует небольшая разница.
Свойство модели | Наука | Инженерия |
---|---|---|
Фокус | Объяснить Почему что-то работает так, а не иначе. |
Предсказать Как должна быть устроена штука, чтобы она вела себя должным образом в конкретной среде. |
Тип | Универсальная Как всегда работает мир. |
Частная Как мир должен будет работать в очень конкретных условиях |
Примеры научных моделей: e = mc^2
, теория всего.
Примеры инженерных моделей: чертёж конкретного моста, схема микропроцессора.
Эти различия важны на практике — они могут отражаться в приоритетах, используемых инструментах и процессах — но, на мой взгляд, они не достаточно существенны, чтобы говорить о концептуальной разнице в создании моделей между наукой и инженерией.
А на самом деле…
На таблицу выше может резко среагировать и профессиональный учёный и профессиональный инженер, так как каждая дисциплина так или иначе использует оба типа моделей. В науке вы найдёте много чисто предсказательных моделей, в инженерии можно найти объяснительные модели.
Но всё-таки сложно спорить с тем, что:
- Идеальный продукт науки — это универсальная модель, которая объясняет что-то.
- Идеальный продукт инженерии — это очень специфическая, часто упрощённая модель, которая предсказывает что-то.
Однако мы живём не в идеальном мире, плюс, дисциплины стремятся друг к другу (о чём этот пост), поэтому в реальности границы размыты. Наука даже пытается бороться с предсказательными моделями, например, некоторые журналы отказываются публиковать статьи, которые не объясняют явление, а только предсказывают его. С точки зрения науки, это, скорее всего, позитивная тенденция, но, на мой взгляд, полная победа (полное разделение типов моделей) невозможна из-за природы ммм…, пусть будет, информации и мира в целом.
Инженеры действуют в условиях неопределённости
Как и учёные.
Невозможность создания чётких инструкций для инженера (см. предыдущий пост) сама по себе предполагает работу в условиях неопределённости. Но я хотел бы дополнительно остановиться на паре моментов.
Инженеры и учёные находятся в одинаковом положении по отношению к обучению и добыче знаний.
Институционализированное обучение отстаёт на 5-20 лет от SOTA практик — это справедливо и для инженерии, и для науки — специалистов для обоих областей готовят в одних и тех же университетах.
Это неизбежное зло институционализированного образования: чтобы написать хороший учебник, создать качественный курс, его автор должен получить практический опыт, а это занимает годы. Не говоря о том, что подготовка и полировка учебных материалов тоже занимает ни один год.
Поэтому специалистам приходится учиться на практике, используя одинаковые практики (извините за невольную тавтологию):
- систему менторства;
- конференции и прочий нетворкинг;
- чтение статей, блогов, книг;
- эксперименты и исследование.
Существенная разница, пожалуй, только в уровне формализации:
- Наука построила формальную всеобщую систему публикаций, менторства, установила процедуры проведения экспериментов.
- Инженерия использует, в основном, менее формальный подход.
У каждого пути есть свои плюсы и минусы, обсуждение которых выходит за рамки этого поста.
Окружающая среда всегда имеет компонент неизвестности — это также справедливо и для инженерии, и для науки.
В случае науки неизвестность происходит как из неполной информации о мире (например, в физике) так и из самой изменчивости изучаемой среды (например, в биологии или социальных науках).
В случае инженерии неизвестность в основном определяется изменчивостью среды, в которой артефакт будет использоваться:
- Динамикой регуляций (например, в медицине или финансах) — мы должны следить за их изменениями и адаптировать артефакты.
- Динамикой пользовательских предпочтений и поведения — мы не можем быть уверены, что пользователи будут готовы взаимодействовать с новым артефактом так, как они взаимодействовали с предыдущими версиями или аналогами.
- Динамикой техносферы — мы существуем не в вакууме, результат нашей работы должен корректно взаимодействовать с результатами работы других инженеров.
Ещё полвека назад изменения в окружающей среде происходили медленно — часто ими можно было пренебрегать заметное время. Но сейчас темп изменений ускорился на порядки, особенно в разработке программного обеспечения.
На мой взгляд, именно из-за возрастающей скорости изменений в окружающей среде инженерия по духу всё ближе приближается к науке и всё больше отдаляется от классического фабричного производства с исчерпывающими инструкциями — нам всё больше приходится взаимодействовать с новизной.
Пересобирая стек технологий, мы узнаём новое
На примере разработки ПО.
Современное положение дел таково, что если ваш проект длится несколько лет, то при начале следующего вы вынуждены полностью пересобирать весь стек технологий, чуть ли не от железа, пересматривать архитектуру под новые требования. Если ваш продукт живёт ещё дольше, скорее всего вам потребуется менять его технологии на ходу и это надо закладывать в планирование, архитектуру, etc.
Необходимость пересборки стека обоснована не только темпом изменений в техносфере, но и знаниями о мире, которые разработчики приобретают в процессе своей работы. Объём информации о технологиях, инструментах, архитектурах сейчас таков, что вы не найдёте двух разработчиков, которые находятся в полностью идентичном контексте и/или примут полностью идентичные решения.
Это не значит, что каждый раз вы полностью начинаете заново, но существенную часть ваших инструментов придётся заменить либо обновить — если вы хотите оставаться на фронтире и делать топовые продукты.
Соответственно, выбирая что-то новое, мы должны получить знания о принципах его работы и о его взаимодействии с окружением, с другими инструментами. Если нам везёт, у нас есть исчерпывающая документация, но обычно мы изучаем это экспериментально: делаем прототипы, изучаем поведение технологий в интересных нам сценариях, etc.
Кстати, исчерпывающей документации я в жизни не видел :-)
Инженеры познают реальность через эксперимент
Стороннему наблюдателю (да и многим внутри профессии) может казаться, что эксперимент занимает довольно малую часть инженерной работы. Но это не так.
Те же архитекторы строят макеты зданий не от избытка свободного времени. Не будем забывать и о проведении экспериментов in silico в виде всевозможных расчётов и симуляций: от определения надёжности конструкций до симуляций устойчивости серверной инфраструктуры к (D)DoS-атакам.
Инженеры работают в условиях бо́льшего экономического и временного давления, следуют менее формальным процессам. Это приводит к изменению формы эксперимента и стиранию границы между экспериментом и реализацией.
Во-первых, целью инженера обычно является не создание на 100% SOTA артефакта, а создание «достаточно хорошего» артефакта в заданных ограничениях (по времени, деньгам, ресурсам). Поэтому мы можем пренебрегать частью экспериментов, если мы понимаем, что «хорошо известное» решение будет «достаточно подходящим».
Но это не значит, что экспериментов не было. Прежде чем стать «хорошо известным» решением, это решение прошло через множество реализаций, которые и были экспериментами, подтвердившими его свойства и сделавшими его «хорошо известным».
Во-вторых, мы смотрим на стоимость эксперимента в сравнении со стоимостью исправления последствий ошибки. Если стоимость эксперимента выше стоимости исправления ошибки, то мы можем пренебречь экспериментом как отдельной активностью. Вместо этого мы ставим эксперимент сразу на «живом пациенте».
Для стороннего наблюдателя это может выглядеть как отсутствие эксперимента, но на самом деле это просто более рисковое экспериментирование.
Пример из моей практики
Начиная новый проект на последней работе, я выбрал делать собственную реализацию оркестрации распределённых транзакций вместо использования одного из готовых решений.
Сделано это было по следующим причинам:
- Не были известны все требования к нашему продукту.
- Время на надёжное исследование готовых решений (с учётом пункта 1) было значительно больше, чем время на реализацию первой версии собственного решения.
- Оркестрацию нужно было делать либо сразу (одной из первых систем проекта), либо в будущем мучительно на неё мигрировать, поэтому окно возможности было довольно узким — несколько недель.
- Оркестрация была ключевым компонентом системы, в случае выбора неверной базовой технологии исправление ошибки было бы либо дорогим, либо невозможным.
- Большинство сторонних систем не совпадали по технологиям со стеком команды, значит нам было бы сложно понимать их поведение, поддерживать и модифицировать их.
Соответственно, выбор был между:
- Отказаться от оркестрации и пожертвовать важными гарантиями, которые она даёт.
- Рискнуть и выбрать случайное готовое решение, которое может оказаться фатально несовместимым с будущими требованиями.
- Реализовать собственную систему с минимальной функциональностью, после чего доводить её до ума, собирая данные о её удобстве и эффективности с живого проекта, то есть экспериментируя.
Я выбрал третий вариант. Ретроспективно, на мой взгляд, правильно, хотя копий вокруг этого решения было сломано много.
Отчасти именно поэтому разработку ПО часто сравнивают с собиранием самолёта в полёте — мы пробуем решения сразу на запущенных продуктах с готовностью быстро откатить, заменить или доработать внесённые изменения, если данные показывают нежелательный результат.
Вот так это всё выглядит в инженерных фантазиях.
Соответственно, частью хорошей инженерной работы является организация архитектуры продукта и процессов таким образом, чтобы они позволяли проводить эксперименты быстро и с минимальными издержками.
В настоящее время, в некоторых областях разработки ПО (например, в веб-сервисах, онлайн-играх), возможно организовать работу с постоянно идущими десятками параллельных экспериментов (как бизнесовых, так и технических). И это, само по себе, сейчас считается лучшей практикой.
Почему наука похожа на инженерию
На схожесть инженерии и науки можно посмотреть и с другой стороны.
Поскольку я не учёный и хуже понимаю научную сторону вопроса, ограничусь только базовыми наблюдениями. Было бы интересно услышать мнение профессиональных учёных по этому поводу.
Возрастает доля предсказательных моделей
На мой взгляд, эта тенденция была и до взлёта машинного обучения, но сейчас она стала куда заметней. Особенно, если смотреть на применение глубокого обучения и LLM, у которых проблемы с объяснениями, но огромный потенциал в предсказательной силе, что ведёт к появлению систем вроде AlphaFold или недавней симуляции динамики жидкости от DeepMind.
Я вижу ситуацию так, что наука может быть и хотела бы сосредоточиться сугубо на объяснительных моделях, но реальность сейчас такова, что предсказательные модели зачастую оказываются более полезными и практически применимыми.
Идея не нова
Станислав Лем ещё в Сумме технологии в 1960-х годах писал, что человечество может отойти от объяснительных моделей в сторону предсказательных.
Книга очень интересная — выдающийся футурологический труд, который остаётся актуальным даже через 60 лет после написания. Причём не только остаётся актуальным, но и во многом сбывается.
Книга обязательна к прочтению — одна из немногих, которые я перечитывал несколько раз и, возможно, буду перечитывать ещё.
Возрастает роль инженерных практик в науке
Сразу два явления толкают науку в сторону большего использования инженерных практик.
Во-первых, усложняются научные инструменты и процессы — это требует выстраивания всё более сложных пайплайнов для проведения экспериментов, сбора и анализа данных.
Научный пайплайн, по сути, является инженерным артефактом (включает в себя устройства, софт, данные, конфигурацию всего этого добра, даже людей), а значит требует инженерных навыков и практик для его создания и поддержки.
Во-вторых, возрастают требования к воспроизводимости научных результатов (причины этого затрагивать не будем), как же как и контроль за их соблюдением.
Это, помимо научных практик, направленных на воспроизводимость экспериментов, требует использования инженерных практик, направленных на воспроизводимость артефактов, которые сопровождают научные эксперименты и научную работу в целом.
В итоге производство инженерных артефактов становится неотъемлемой частью научной работы, что проявляется в разных формах:
- В виде дополнительных требований к публикациям: предоставление
работающегокода, данных (понятных и человеку и машине)ж публичные демо как best practice, etc. - В виде коллаборации над проектами с открытым кодом для создания наборов инструментов с детерминированным согласованным поведением. От библиотек общего назначения вроде SciPy до специализированных наборов инструментария вроде Bioconductor для биоинформатики.
- В виде создания публичных хранилищ стандартизированных наборов данных: Gene Expression Omnibus, Wiki Pathways, etc.
Общие проблемы науки и инженерии
Кое в чём инженерия и наука сближаются, а в кое в чём они уже почти слились воедино, например, в проблемах.
Проблемы эти — следствия родственных целей и методов — настолько заезжены, что я их просто перечислю, без влезания в детали.
Перекос в сторону оглашения позитивных результатов и замалчивания негативных. В науке это известно как проблема публикационного смещения. Инженерия, как всегда, не особо стремится формализовать свои проблемы, но все мы знаем, что ситуация та же. Все любят писать, как круто они чего-нибудь отрефакторили, если метрики положительные, но попробуйте найти пост о неудачном рефакторинге.
Закон Конвея портит жизнь людям в обеих областях. Организационная структура влияет и на то, что вы исследуете, и на то, что вы проектируете.
Общие этические проблемы: как не навредить, как сохранить данные людей в безопасности. Масштаб этих проблем примерно одинаков.
Оценка компетенции коллег — особенно на высоком уровне, когда человека нужно судить не по знанию стандартизированного базиса, а по способности к обучению, к оперированию мета-понятиями, к организации труда и управлению знаниями, к принятию долгоиграющих решений и действиям в условиях неопределённости, etc.
Индекс Хирша — интересный и полезный инструмент для решения этой проблемы, но он далеко не идеален — имеет свои недостатки.
Прозрачность работы коллективов — как для их сотрудников, так и для внешних наблюдателей. Никто не знает, чего там конкретно делают как вон-те-вон инженеры, так и вон-те-вон учёные.
Допустим, инженерия и наука близки
Надеюсь, я достаточно убедительно показал, что это так.
Что же из этого следует?
То, что мы можем учиться друг у друга, заимствовать успешные практики.
Не мне учить учёных, что заимствовать у нас, инженеров, зато у меня есть некоторые мысли по поводу того, что мы, инженеры, можем заимствовать у учёных.
Про это поговорим в следующем посте.
Этот пост является частью серии
- Предыдущий пост: Нет инструкций для инженерии
- Первый пост: Точки зрения на продукт