Найти тему

Экспертное мнение: "удалёнка" глазами программиста

Всем привет, меня зовут Ильдар и я занимаюсь разработкой встраиваемого программного обеспечения в «EDC Team».

Вся соль в том, что я это делаю удаленно и до того, как я попал в команду
EDC Team почти три года назад, я не мог и предположить, что это возможно со сколько-нибудь действующей эффективностью.

Что же в этом необычного, спросите вы? огромное количество программистов работают удаленно. Но тут есть, как всегда, нюансы.

В enterprise разработке или в вэб-программировании разработчики имеют дело с "чистыми абстракциями" в виде программного кода. Взаимодействие таких программ с устройствами ввода-вывода происходит через так называемый API (программный интерфейс приложений), предоставляемый операционной системой, то есть программа как бы "отгорожена" от реального мира, а всю сложность взаимодействия с физическими устройствами прячет в себе операционная система.

То есть для разработки подобных программ, по сути, нужен компьютер и нужная операционная система. В этом случае с развитием интернета физическое нахождение этого компьютера перестало иметь какое бы то ни было серьезное значение.

Но в разработке встраиваемого ПО все не так. Микроконтроллеры, которые мы программируем, ограничены в своей производительности, в объемах памяти как оперативной, так и энергонезависимой. Нет тут и операционных систем с той самой отвязкой от реального мира, и набора готовых драйверов для работы с внешними устройствами. Да, конечно, мы используем системы реального времени (freeRTOS, например), но с данной точки зрения они не являются полноценными ОС, подобными Linux или Windows.

Разработка встраиваемого ПО неразрывно связана с разработкой самого устройства. Это пограничье между "чистым" программированием и микроэлектроникой. Это мир регистров управления, интерфейсов, подтяжек, линий отправки и приема. Это постоянная работа с настройкой периферии микроконтроллера, обеспечение взаимодействия с другими цифровыми элементами на плате устройства и вне ее.

Я думаю, специалисты меня поймут, подобная разработка — это всегда работа в лаборатории. Это стол, усеянный огромным количеством различных устройств и вспомогательных инструментов. Это паяльные станции, стенды проверки, программаторы, осциллографы и логические анализаторы. Это всегда куча проводов и блоков питания. И раньше я не представлял, что мне, удаленному разработчику, возможно обходиться без всего вышеперечисленного.

Тем не менее, я почти три года разрабатываю прошивки для устройств, ни одно из которых я никогда не видел вживую и не держал в руках. И самое главное, это мне совершенно не мешает.

Так какие же условия необходимы для того, чтоб успешная удаленная разработка была возможной:

1. Конечно же, лаборатория. Она у нас есть, и еще какая!

2. Полная документация к разрабатываемым устройствам. Так ли важно мне видеть само устройство, раз я могу видеть его схему, например? Зри в корень, так сказать.

3. Отлично автоматизированное удаленное рабочее место и некоторые технические решения при разработке самих устройств, позволяют мне свободно работать с ними удаленно: перезагружать, прошивать, считывать логи, отправлять команды и т.д.

4. Самый важный и принципиальный пункт. Грамотно поставленный процесс разработки и проверки самого физического устройства. Когда устройство поступает ко мне "на стол", я могу быть полностью уверен, что вся периферия 100% работает. Подробности этого процесса, я думаю, с удовольствием опишут мои коллеги-разработчики электроники, это отдельная история.

5. Наконец, это периодическая помощь мои дорогих коллег. Подготовка автоматизированного рабочего места или сбор нужного стенда. Это делается один раз, и далее я с этим могу работать сколько моей душе угодно.

Многие разработчики встроенного ПО и руководители подобных нам команд по-прежнему считают такой формат работы либо нереализуемым в принципе, либо малоэффективным. К примеру, мои бывшие коллеги, работающие в той же сфере, всегда с удивлением слушают мои рассказы о процессе работы, качают головой и отвечают: "Хм, вряд ли мы так сможем все организовать..."

Ох как для меня теперь непривычна их точка зрения! В общем, удаленная разработка встраиваемого ПО не просто возможна, но еще и стала для меня обычным делом.