10 навыков, необходимых сегодня разработчику встроенных систем (вольный перевод с комментариями)

в 12:29, , рубрики: микроконтроллеры, программирование микроконтроллеров

Эксперты отрасли призывают разработчиков встроенных систем (ВР) покинуть зону комфорта и приобретать новые навыки, дабы не потерять актуальность в профессии.

Если мы посмотрим на ситуацию в 1980 году, парень (а в основном контроллерами занимаются все-таки парни), который разрабатывал схему обработки смешанных сигналов, парень, который подключал МК, парень, который писал код на ассемблере и парень, который выносил прототип наружу (наверное, имеется в виду отладка -примечание переводчика), был одним и тем же человеком (я сам из таких, хотя, конечно, это началось в СССР намного позже 1980 года -пп). Все это делал в значительной степени один инженер.

По мере того, как встроенные системы становились больше и сложнее, и миллионы строк кода начали поставляться с устройством (Джек Гансли в своей статье вспоминает время, когда с IBM PC поставлялся полный исходный код BIOS — пп), наступило время деления на разработку железа, разработку прошивки и разработку ПО в рамках одного устройства.

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

Поскольку мы не желаем отстать от прогресса в области ВР, то как определить, какие навыки, которые мы можем приобрести или развить, являются наиболее актуальными сегодня?

Журнал EE Times обратился к 9 профессионалам в ВР (видимо, у них произошел сбой в адресной книге, ничем другим то, что они не обратились ко мне, я объяснить не могу — пп) и рекрутерам и попросил их рассказать, что они думают по поводу наиболее важных вещей, необходимых современному инженеру в области ВР.

Хотя мнения по поводу важности конкретных навыков разделились (я бы удивился, если бы они НЕ разделились -пп), все опрошенные сходились в одном: инженер никогда не должен прекращать учиться. (Далее следуют рекомендации от различных инженеров со стажем работы в ВР порядка десятков лет — индивидуальным стажем каждого, не всех десяти сразу -пп).

1. Изучайте технологии, которые связаны с использованием Интернета.
Если Вы умеете делать схему обработки смешанного сигнала и писать код в C или C ++, то Вы уже умеете много полезных вещей в ВР, но просто написание кода на С недостаточно во многих случаях. (Наверное, это призыв к изучению библиотек — пп).

Использование технологий, которые делают возможными Интернет подключения Ваших устройств — большой плюс для карьеры инженера. На самом деле, я в настоящее время работаю над несколькими инициативами, которые включают реализацию «виртуального» XML в ВР. (Я тоже делал такие системы и был поражен простотой и легкостью реализации подобных вещей на основе стандартных программных модулей, ну а если еще и понимать, что при этом происходит… — пп). Мы используем эту технологию для обеспечения автономной обработки транзакций мета-данных с сильно различающихся устройств, соединенных с помощью стандартных протоколов низкого уровня и собственных протоколов, чтобы влиять на сеть уровень абстракции. (Не могу сказать, что понял эту фразу до конца, может читателям повезет больше — пп).

Я предполагаю, что это должно быть что-то вроде технологии «P&P» для небольших сетевых устройств. (Кстати, в модели Edison от Intel сделан значительный шаг в этом направлении — пп).

2.У вас есть поисковая система, используйте ее.
Не тратьте свое время на изобретение колеса, пользуйтесь открытыми исходниками. Я подозреваю, что кто-то уже написал почти любой кусок кода, о который вы только могли мечтать. (Не уверен, что все, но очень много действительно написано, правда у большого количества ПО есть ФАТАЛЬНЫЙ НЕДОСТАТОК — пп).

Есть исключения, конечно, если вы занимаетесь прорывными исследованиями. Но большинство из нас работает, чтобы решить бытовые проблемы, так что пользуйтесь всем кодом, доступных через Интернет.

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

3. Узнайте что-то новое за пределами своей зоны комфорта.
Хотя следование за новейшими трендами бывает полезно и почти всегда весело, самых большие преимущества достигаются за счет углубления или расширение области знания. Примите вызов, чтобы узнать что-то за пределами своей зоны комфорта, такие как железо, опыт домена Вашей компании, или управления проектами.(Наверное, опрошенный вкладывает другой смысл в термин управление проектами — пп).

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

4. Подружитесь с ОСРВ.
Инженеры, которые освоили формальные структурные процессы разработки при использовании ОСРВ, пользуются значительным спросом и претендуют на большие зарплаты, что связано с тем, что они осознали необходимость определенной строгости в проектировании критически безопасных продуктов и глубоко приняли идеи параллелизма. Учитывая, что в любой момент CPU может запустить другую задачу, они знают, как защитить совместно используемые ресурсы, сохраняя при этом производительность. (Я смотрел немало кода для ОСРВ и далеко не весь он соответствует последней фразе. Тем не менее, применение ОСРВ даже в небольших проектах действительно может быть весьма полезным и не требует каких-либо значительных затрат на освоение и существенных ресурсов при использовании — пп).
Так что я хотел бы призвать инженеров, которые работают с небольшими устройствами, которые не работали с RTOS, получить некоторый практический опыт разработки под ними — будь то VxWorks или Micrium (или FREERTOS — пп). Я также начинаю видеть возможности применения в разрабатываемых устойствах встраиваемых Linux-систем, поскольку Linux (в целом) очень масштабируемая операционная система. Вы можете обрезать его до голого шедулера, а затем загрузить его на любом устройстве, и вы можете дорабатывать даже части ядра для большей оптимизации и функциональности.

5. Диверсифицируйте свои навыки и двигатйтесь вверх по стеку.
Если вы все еще работаете с голым кодом или на небольших микроконтроллеров, советую поработать с драйверами Linux, что позволит Вам легче перейти к Android позже. (Не очень понял, зачем мне потребуется Android, но как говорится, от тюрьмы и от сумы не зарекайся — пп). И, хотя это, возможно, менее значимо, — если вы привыкли работать в больших системах, попробовать работать с голым кодом.

Перемещение вверх по стеку: сделайте мобильное приложение или освойте back end сервера. Это даст вам новыю знания и осознание перспективы.

И познакомьтесь с оборудованием с открытым исходным кодом. Проекты, которые я делал 8 лет назад, требовали, чтобы я создавал свой собственный HW и тому подобное, так что я не мог сосредоточиться на собственно развитии алгоритма. Сегодня есть много законченных плат (вероятно имеются в виду комплекты развития — пп), которые позволяют мне сосредоточиться на уникальной части разработки.

Конечно, это может заставить меня думать, что все мои прошлые разработки прошивок стали ненужными и работать с платами стало не так весело, как раньше, но нам следует принять изменения правил игры. К сожалению, это одновременно означает, что я встречаю все меньше и меньше людей с конкретными навыками (видимо имеется в виду способность к разработке с нуля — пп), а те, кто есть, буквально вымирают.

6. Знайте привычное ПО в совершенстве, но не забывайте про новые компиляторы.
Совсем неплохо знать несколько языков (надеюсь, языков программирования, иначе мне следовало бы покинуть профессию — пп), некоторые рекомендуют изучать один новый язык каждый год. (Не уверен, что это действительно хорошая идея, я постоянно путаю парадигмы JAVA и C++). Тем не менее, в то время как чистые программисты должны изучать языки с учетом специфических потребностей, встроенные инженеры должны смотреть шире. Глубокое понимание C или C ++ является критическим, но знание новейшего модного языка (я один думаю о С++14? — пп) не столь важно, как новой модной процессорной технологии.

Что важно знать о процессорах, что они являются основой для ВР. Поскольку у нас ограниченные ресурсы системы, мы должны понимать, что действительно есть у нас в распоряжении. Новый и изящный язык, типа Go, может быть невероятно мощным, но вполне возможно, что он не будет работает в нашей системе с ограниченными ресурсами. (Кстати, был весьма поражен, насколько компактные конструкции порождает С++, по крайней мере под IAR для ARM архитектуры. Ничего лишнего и весь синтаксис классов и всего прочего просто испаряется в конечном коде. Так что и с Go может все будет не так плохо — пп).

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

7. Не бойтесь свободного ПО.
Существуют тысячи программных пакетов, которые клиенты хотят интегрироваться в свои системы, так что в этой области инженеры ВР должны чувствовать себя комфортно.

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

8. Развивайте систему инженерного мышления.
Критично важно для ВР быть системно ориентированным. Я видел ряд проектов, которые сильно пострадали от того, что не было ясно определеных базовых требований, стратегии развития и проверки соответствия на ранних стадиях проектирования. И каждый инженер должен приобрести хорошие навыки управления проектами, на тот случай, когда вам будет предложено взять на себя обязательство по срокам. Наличие возможности разумно объяснить технические и проектные риски будет служить Вам хорошим подспорьем в Вашей карьере.

9. Развивайте навыки коммуникации (как на словах, так и в графике).
Инженеры всех типов должны быть в состоянии эффективно выражать свои мысли и идеи, и часто лучший способ сделать это — графический способ. Слишком часто я спросил младших инженеров объяснить концепцию устройства и наблюдал, как они бродят вокруг да около, будучи не в состоянии сосредоточиться на том, что они пытаются объяснить. (Кстати, не надо забывать и об эффекте резинового утенка — пп).

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

Можете ли вы себе представить задание для разработчика, который пишет программное обеспечение для контроллера, в котором разъясняется, как работает машина, которой контроллер должен управляет, используя текстовый документ? (Я могу, я такие задания видел, и даже по ним работал — пп).

Mindmapping является одним из моих любимых методов фиксации и визуализации моих идей и мыслей, и я использую iThoughts, MindMapping приложение для Ipad почти каждый день. (А я даже не знаю что это такое — пп).

10. Осваивайте беспроводную связь.
Единственное, что я бы порекомендовал инженерам ВЗ освоить в ближайшие 1-3 года — это беспроводная связь, в частности, Wi-Fi и / или BLE.

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

Нашим встроенным системам будет необходимо взаимодействовать с приложением на смартфоне или интернет-сервисами на их основе, чтобы сделать что-нибудь — общаться с пользователем, получить обновление прошивки, устранить проблему и т.д.

Может быть, пока и рановато утверждать, что WiFi и BLE скоро будет так же распространен, как UART сегодня (UART вчера, сегодня USB, но это личное мнение, выраженное в частной беседе — пп), но тенденция налицо и в любом случае это достаточно хороший инструмент, чтобы иметь в вашей сумке инструментов.

От переводчика:
Не следует писать в комментариях, что это 10 пунктов не содержат ничего нового (я сам в одном месте не удержался, но удалять не стал) — в конце концов, вся математика есть тавтология. В конце концов все рекомендации исходят от людей с богатым опытом, занимающих определенное место в индустрии ВР, и уже только поэтому заслуживают внимания.

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

Автор: GarryC

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js