Всем привет, меня зовут Ильдар и я занимаюсь разработкой встраиваемого программного обеспечения в «EDC Team».
Вся соль в том, что я это делаю удаленно и до того, как я попал в команду EDC Team почти три года назад, я не мог и предположить, что это возможно со сколько-нибудь действующей эффективностью.
Что же в этом необычного, спросите вы? огромное количество программистов работают удаленно. Но тут есть, как всегда, нюансы.
В enterprise разработке или в вэб-программировании разработчики имеют дело с "чистыми абстракциями" в виде программного кода. Взаимодействие таких программ с устройствами ввода-вывода происходит через так называемый API (программный интерфейс приложений), предоставляемый операционной системой, то есть программа как бы "отгорожена" от реального мира, а всю сложность взаимодействия с физическими устройствами прячет в себе операционная система.
То есть для разработки подобных программ, по сути, нужен компьютер и нужная операционная система. В этом случае с развитием интернета физическое нахождение этого компьютера перестало иметь какое бы то ни было серьезное значение.
Но в разработке встраиваемого ПО все не так. Микроконтроллеры, которые мы программируем, ограничены в своей производительности, в объемах памяти как оперативной, так и энергонезависимой. Нет тут и операционных систем с той самой отвязкой от реального мира, и набора готовых драйверов для работы с внешними устройствами. Да, конечно, мы используем системы реального времени (freeRTOS, например), но с данной точки зрения они не являются полноценными ОС, подобными Linux или Windows.
Разработка встраиваемого ПО неразрывно связана с разработкой самого устройства. Это пограничье между "чистым" программированием и микроэлектроникой. Это мир регистров управления, интерфейсов, подтяжек, линий отправки и приема. Это постоянная работа с настройкой периферии микроконтроллера, обеспечение взаимодействия с другими цифровыми элементами на плате устройства и вне ее.
Я думаю, специалисты меня поймут, подобная разработка — это всегда работа в лаборатории. Это стол, усеянный огромным количеством различных устройств и вспомогательных инструментов. Это паяльные станции, стенды проверки, программаторы, осциллографы и логические анализаторы. Это всегда куча проводов и блоков питания. И раньше я не представлял, что мне, удаленному разработчику, возможно обходиться без всего вышеперечисленного.
Тем не менее, я почти три года разрабатываю прошивки для устройств, ни одно из которых я никогда не видел вживую и не держал в руках. И самое главное, это мне совершенно не мешает.
Так какие же условия необходимы для того, чтоб успешная удаленная разработка была возможной:
1. Конечно же, лаборатория. Она у нас есть, и еще какая!
2. Полная документация к разрабатываемым устройствам. Так ли важно мне видеть само устройство, раз я могу видеть его схему, например? Зри в корень, так сказать.
3. Отлично автоматизированное удаленное рабочее место и некоторые технические решения при разработке самих устройств, позволяют мне свободно работать с ними удаленно: перезагружать, прошивать, считывать логи, отправлять команды и т.д.
4. Самый важный и принципиальный пункт. Грамотно поставленный процесс разработки и проверки самого физического устройства. Когда устройство поступает ко мне "на стол", я могу быть полностью уверен, что вся периферия 100% работает. Подробности этого процесса, я думаю, с удовольствием опишут мои коллеги-разработчики электроники, это отдельная история.
5. Наконец, это периодическая помощь мои дорогих коллег. Подготовка автоматизированного рабочего места или сбор нужного стенда. Это делается один раз, и далее я с этим могу работать сколько моей душе угодно.
Многие разработчики встроенного ПО и руководители подобных нам команд по-прежнему считают такой формат работы либо нереализуемым в принципе, либо малоэффективным. К примеру, мои бывшие коллеги, работающие в той же сфере, всегда с удивлением слушают мои рассказы о процессе работы, качают головой и отвечают: "Хм, вряд ли мы так сможем все организовать..."
Ох как для меня теперь непривычна их точка зрения! В общем, удаленная разработка встраиваемого ПО не просто возможна, но еще и стала для меня обычным делом.