...тому, что наши разработки кто-то берет и использует.
Работаю сейчас над сопроводительными материалами к очередному релизу SObjectizer-а. Для чего перечитываю статью Павла Вайнермана "Если проект «Театр», используй акторов…", в которой речь идет об опыте применения SObjectizer-а для управления сценическим оборудованием в театре. И вот на чтении вот этого фрагмента меня вдруг "пробивает":
Был разработан «проигрыватель сценариев» который создаёт группу специальных акторов и запускает их в работу. Мы разработали два вида акторов: акторы-исполнители, предназначенные для выполнения задания для конкретного штанкета и актор-координатор, который распределяет задания между исполнителями. Причём акторы-исполнители создаются по мере необходимости, если в момент очередной команды не находится свободного. За создание и поддержание пула акторов-исполнителей отвечает актор-координатор. В итоге управление выглядит примерно следующим образом:
- оператор загружает сценарий;
- «перелистывает» его до нужной повестки (обычно просто идёт подряд);
- в нужный момент нажимает кнопку «приготовиться» по которой актору-координатору присылаются команда (сообщение) по каждому штанкету входящему в текущую повестку с параметрами движения;
- актор-координатор смотрит свой пул свободных акторов-исполнителей, берёт свободного (если нет создаёт нового) и передаёт ему задание (номер штанкеты и параметры движения);
- каждый актор-исполнитель получив задание начинает отрабатывать команду «приготовиться». Т.е. подключает двигатель и переходит в режим ожидания команды «поехали»;
- когда настаёт время, оператор подаёт команду «поехали»;
- команда «поехали» приходит координатору. Он рассылает её всем своим задействованным в текущий момент исполнителями и они начинают «исполнение».
Тут стоит отметить, что в повестке встречаются дополнительные параметры. Например начать движение с задержкой N секунд или начинать движение только после отдельной специальной команды оператора. Поэтому список состояний у каждого актора-исполнителя достаточно большой: «готов к выполнению очередной команды», «готов к движению», «задержка движения», «ожидание команды оператора», «движение», «исполнение завершено», «сбой в работе».
Почему-то именно при перечитывании этого фрагмента до меня внезапно (с) дошло, что вообще-то говоря, выбор SObjectizer-а для реализации этого всего был вовсе не обязательным. И это мягко говоря.
В принципе мы, разработчики, с пиететом относимся к инструментам от больших компаний. И это нормально. Если небезосновательное мнение, что в больших софтверных компаниях, вроде Google, Facebook, Amazon, Microsoft, Яндекс, Лаборатория Касперского и т.д., оказываются очень квалифицированные разработчики. Которым, при этом, создают отличные условия для концентрации именно на разработке софта.
И даже если не поднимать вопрос квалификации разработчиков, то остается еще и такой важный и объективный фактор, как объем, сложность и стоимость задач, которые решаются в больших компаниях. И если инструмент от какой-нибудь большой компании прошел "боевое крещение" внутри компании, то это уже многое говорит о качестве и пригодности инструмента к использованию.
Поэтому нет ничего удивительного, когда разработчики берут proxygen от Facebook или Abseil от Google. Просто потому, что это инструменты от Facebook-а и Google. Само их применение в проектах компаний таких масштабов уже служит неким знаком качества.
А вот когда для выполнения непростого и ответственного проекта выбирается кустарная разработка от никому неизвестной провинциальной конторы, грубо говоря, каких-то "Рогов и копыт", то вот это доставляет. И вызывает теплое чувство внутри.
Все-таки есть большая разница в продвижении продукта, за которым стоит большая и успешная компания, и продукта небольшой группы подвинутых на разработке гиков. Очень большая. Боюсь, мало кто это на себе вообще ощутил.
При этом, хоть описанный в статье проект далек от сложности и критичности от, скажем, системы управления Boeing 737 Max, но это вовсе не "Hello, World". Мягко говоря. И не вебня уровня какого-нибудь Интернет-форума, в котором недоступность или ограниченная функциональность в течении десятков минут не страшна от слова совсем. Вполне себе реальное оборудование и стоимость отказа в неподходящий момент высокая. И разработчики сочли возможным использовать наш продукт, посчитав его достаточно качественным, зрелым и обеспеченным должной поддержкой.
А ведь запросто могли и не счесть. Но сочли. И вот когда осознание этого факта догоняет (а догоняет-то не сразу), то что-то в голове щелкает. До дрожи в коленках ;) Не зря, получается, мы все это делали. Не зря.
Ну и отдельно хочется сказать спасибо всем innovator-ам и early adopter-ам, которые рискуют выбирать наши продукты на свой страх и риск. То, что вы делаете доказывает, что есть таки смысл в том, что делаем мы.
PS. Кстати говоря, то факт, что и SObjectizer, и RESTinio справляются с возложенными на них задачами, меня лично вовсе не удивляет. Я не из тех персонажей из анекдота "Да вы успокойтесь, софт для этого самолета делала наша фирма, поэтому он даже не вырулит на взлетную полосу". Все-таки мы делаем то, что работает. А то, что не работает, стараемся оперативно допиливать напильником ;)