Сможет ли компиляция спасти цепочки поставок?
Под компиляцией я подразумеваю искусство создания компиляторов, то есть компьютерных программ, которые переводят исходный код на другой язык. Немногие люди вне круга программистов знают, что делает компилятор, и немногие люди внутри круга программистов знают, как разрабатывается компилятор. Сначала проблемы компиляции кажутся далекими (чтобы сказать по меньшей мере) от проблем цепочек поставок. Однако в настоящее время в Lokad это именно компиляционные вещи, которые спасают ситуацию; один проект цепочки поставок за другим.
Бесстыдная реклама: программисты с навыками компиляции не растут на деревьях, и мы нанимаем. Хотите работать над важными вещами? Ну, в следующий раз, когда ваш самолет опоздает из-за отсутствия детали, или в следующий раз, когда вам понадобится лекарство, которого нет в наличии, просто помните, что вы могли бы изменить ситуацию, присоединившись к Lokad :-)
Цепочки поставок сложны, безумно сложны. Глобализация увеличила возможности поиска поставщиков, но задержки стали длиннее и более непредсказуемыми, чем когда-либо. Каналы продаж также увеличиваются: есть физические магазины, интернет-магазины, маркетплейсы, реселлеры, оптовики, … И теперь, благодаря Amazon, каждый везде ожидает, что все будет заказано и получено за ночь. Ожидания поставок выше, чем когда-либо.
Подход к проблемам цепочек поставок с использованием чего-то менее выразительного, чем полноценный язык программирования, не работает. Точно так же, как программирование с использованием конструктора Lego не сработает, проблемы цепочек поставок не поместятся в флажки и выпадающие списки. Это не мешает поставщикам программного обеспечения попытаться, заметьте. Решения, которые включают более 1000 таблиц, каждая таблица имеет в среднем около 100 полей, слишком распространены. И хотя клиентская компания использует только около 1% функциональной области решения, ей все равно приходится справляться с его всеобъемлющей сложностью.
Компиляция спасает ситуацию, потому что она предоставляет огромное количество знаний и ноу-хау при создании высококачественных абстракций, предназначенных в качестве инструментов для решения статистических и комбинаторных задач (и не только). И большинство проблем цепочек поставок оказываются именно статистическими и комбинаторными. Например, в Lokad, введя алгебру распределений, мы смогли “разобраться” с сложными проблемами срока поставки, которые сопротивлялись нашим более прямым подходам через функции упакованного программного обеспечения.
То, что отличает языковые возможности от, скажем, обычных функций приложения (wysiwyg), заключается в том, что языковые возможности гораздо меньше зависят от специфики конкретной задачи, чем их аналоги функций приложения. Например, рассмотрим ситуацию, когда ваша логика обнаружения нехватки товара не работает в конкретном случае с ультра-сезонными продуктами. Если функция реализована с помощью языковой конструкции, то всегда можно сузить область данных до тех пор, пока функция не будет работать именно там, где это предполагается; возможно, динамически настраивая область с помощью ад-хок численного анализа. В отличие от этого, с функцией приложения вы ограничены вариантами фильтрации, которые были встроены в эту функцию. Функции приложения подходят только в том случае, если ваши проблемы узкие и хорошо определены, что на самом деле очень не похоже на оптимизацию цепочки поставок.
В цепочке поставок программирование блестит, потому что:
- Проблемы одновременно являются высоко числовыми и очень структурированными
- Цепочки поставок модульны, и эту модульность нужно использовать
- Количество переменных значительно, но не ошеломляюще
- Критически важно подогнать проблемы под их точную форму
Немного забавно наблюдать, как многие поставщики программного обеспечения постепенно переосмысливают программирование. По мере углубления и усложнения пользовательского интерфейса, с возможностью добавления фильтров, опций, предварительной или последующей обработки, шаблонных оповещений, мониторов КПЭ, пользовательский интерфейс постепенно становится программируемым и достигает точки, где только программист может его понять (именно благодаря его предыдущим навыкам программирования). Программируемый, но весьма запутанный способ.
Компиляция - это искусство усиления инженерных навыков: нужно создавать абстракции и языковые конструкции, которые упрощают решение проблем. Как сказал Брайан Керниган: “Все знают, что отладка вдвое сложнее написания программы. Так что если вы такой умный, каким можете быть при написании, как вы ее отлаживаете?” Та же логика применима к оптимизации цепочки поставок, потому что это по сути то же самое, что и написание кода. Ну, в Lokad это буквально одно и то же.
Конвенциональная мудрость в области информационных технологий гласит, что сначала следует автоматизировать простые части, оставив человеческим экспертам бороться с более сложными элементами. Однако в цепочке поставок этот подход каждый раз проваливается. Самые сложные части цепочки поставок почти всегда являются самыми затратными и требуют немедленного внимания. Простые части могут позаботиться о себе с помощью инвентаризации мин/макс или Канбана. Точно так же, как вы не будете создавать программное обеспечение для автономных автомобилей, улучшая программное обеспечение для автоматической работы поездов, вы не можете решить сложные проблемы цепочки поставок, улучшая программное обеспечение, изначально разработанное для решения простых задач.
Естественно, только компиляция недостаточна для решения проблем цепочки поставок. Стоит также упомянуть машинное обучение, обработку больших данных и значительное количество человеческих навыков. Однако во всех случаях тщательно проработанные высококачественные абстракции значительно помогают. Машинное обучение гораздо проще, когда входные данные хорошо подготовлены. Обработка больших данных также намного проще, когда вычисления легко поддаются высокой степени параллелизации.