Да. В значительной степени. И я бы никогда не осмелился выдвинуть это мнение, когда основал Lokad почти десятилетие назад.

Под компиляцией я подразумеваю искусство создания компиляторов, то есть программ, которые переводят исходный код на другой язык. Немногие вне круга программистов знают, что делает компилятор, и немногие из программистов понимают, как он устроен. Сначала вопрос компиляции казался далеким (мягко говоря) от проблем цепочек поставок. Однако сегодня именно технологии компиляции продолжают спасать положение, проект за проектом в сфере цепочек поставок.

Без стеснения: инженеры-программисты с навыками компиляции не растут на деревьях, и мы набираем сотрудников. Хотите работать над действительно значимыми проектами? В следующий раз, когда ваш самолет опоздает из-за отсутствия детали, или в следующий раз, когда нужное вам лекарство будет распродано, просто вспомните, что вы могли бы изменить ситуацию, присоединившись к Lokad :-)

Цепочки поставок сложны, чертовски сложны. Глобализация увеличила возможности поиска поставщиков, но задержки стали длиннее и непредсказуемее, чем когда-либо. Каналы продаж также умножаются: существуют физические магазины, интернет-магазины, торговые площадки, ретейлеры, оптовики и т.д. И теперь, благодаря Amazon, все, везде, ожидают, что все будет заказано и получено за одну ночь. Ожидания к цепочкам поставок выше, чем когда-либо.

Решать задачи цепочек поставок с использованием чем-либо меньшей выразительности, чем предлагает полноценный язык программирования, не удается. Точно так же, как не случится программирование на Лего, проблемы цепочек поставок не вписываются в чекбоксы и выпадающие списки. Это, заметьте, не мешает поставщикам ПО пытаться. Решения, включающие более 1000 таблиц, каждая из которых содержит около 100 полей в среднем, встречаются повсеместно. И хотя клиентская компания использует всего около 1% функционала решения, им всё равно приходится справляться с его всепроникающей сложностью.

Компиляция спасает положение, поскольку она предоставляет обширную базу знаний и опыта в создании высококачественных абстракций, служащих мощными инструментами для решения статистических и комбинаторных задач (и не только). И большинство проблем цепочек поставок именно статистические и комбинаторные. Например, в Lokad, благодаря введению алгебры распределений, нам удалось “прижать” сложные проблемы с сроками поставки, которые сопротивлялись нашим более прямым подходам через стандартные возможности ПО.

То, что отличает языковые возможности от, скажем, обычных возможностей приложений (wysiwyg), заключается в том, что языковые возможности гораздо менее чувствительны к специфике конкретной задачи, чем их аналоги в приложениях. Например, рассмотрим ситуацию, когда ваша логика обнаружения отсутствия товаров дает сбой в случае ультра-сезонных продуктов. Если функциональность реализована через языковую конструкцию, вы всегда можете сузить объём данных до тех пор, пока функция не начнет работать именно там, где это требуется; возможно, динамически корректируя область с помощью специального числового анализа. В противовес этому, в случае с функциональностью приложения вы застряли с вариантами фильтрации, встроенными в эту функцию. Функции приложений подходят только если ваши задачи узкие и четко определенные, что, по сути, совсем не характерно для оптимизации цепочек поставок.

В цепочках поставок программируемость сияет, потому что:

  • Проблемы одновременно высоко числовые и очень структурированные
  • Цепочки поставок модульны, и эту модульность необходимо использовать
  • Количество переменных значительное, но не чрезмерное
  • Точное соответствие формы проблем имеет решающее значение

Несколько забавно наблюдать, как многие поставщики ПО постепенно заново изобретают концепцию программируемости. По мере того, как пользовательский интерфейс становится всё глубже и сложнее, с возможностью добавления фильтров, опций, хуков для предварительной или последующей обработки, шаблонных оповещений, KPI-мониторов, пользовательский интерфейс постепенно превращается в программируемую вещь, и доходит до того, что только программист может в этом разобраться (именно благодаря его или её уже существующим навыкам программирования). Программируемо, да, но в крайне запутанной форме.

Компиляция – это искусство усиления инженерных навыков: необходимо создавать абстракции и языковые конструкции, которые упрощают мышление при решении проблем. Как знаменитый Брайан Кернихан однажды заметил: Все знают, что отладка программы в два раза сложнее её написания. Так если вы пишете её настолько умно, насколько это возможно, как же вы сможете её отладить? Та же логика применима к оптимизации цепочек поставок, потому что, по сути, это то же самое, что и написание кода. По крайней мере, в Lokad это буквально то же самое.

Традиционная ИТ-мудрость гласит, что сначала следует автоматизировать простые задачи, оставляя сложные элементы на плечи человеческих экспертов. Однако в цепочках поставок этот подход безоговорочно оборачивается неудачей каждый раз. Самые сложные элементы цепочек поставок почти всегда оказываются самыми затратными, требующими неотложного внимания. Простые задачи могут решаться самостоятельно с помощью управления запасами по методу min/max или Kanban. Как вы не станете создавать программное обеспечение для автономных автомобилей, совершенствуя ПО для автоматизированного управления поездами, так и трудные задачи цепочек поставок нельзя решить, совершенствуя программы, изначально предназначенные для решения простых задач.

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