Рубрика:
Карьера/Образование /
Рынок труда
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Вакансия: программист встроенного ПО под Linux
Огромное количество устройств управляется встроенным программным обеспечением. Это касается интернета вещей, автомобильных операционных систем, сетевого оборудования и прочей различной электроники. Большую популярность в отрасли имеет операционная система Linux. Мы обратились к представителям компаний, чтобы выяснить, каких кандидатов они видят на позиции программиста встроенного программного обеспечения под Linux
- Программист встроенного ПО под Linux: какими знаниями и навыками должен обладать?
- Инструментарий программиста встроенного ПО под Linux?
- Каковы требования компании к уровню образования потенциальных сотрудников?
- Какие требования предъявляться к опыту работы?
- Есть ли специфические требования, которые обусловлены спецификой деятельности компании?
Роман Стороженко, Embedded Developer, ранее в SK Hynix, сейчас – стартап в области Embedded
1-2. Я отвечу эти на два вопроса сразу.
Во-первых, необходимы знания, которые нужны каждому Linux-разработчику в не зависимости от специализации:
- понимание хотя бы в общих чертах архитектуры ядра;
- умение собирать ядро и понимать систему его сборки;
- знание C, Make;
- знание userpspace-программирования. Не обязательно отлично знать POSIX, но нужно понимать что это. Понимать Linux API и вызов его напрямую или через libc. Также нужно знать shell-скрипты;
- для отладки необходимо уметь пользоваться виртуальными машинами. Тут на выбор: Мirtual Иox, VMware, qemu. Последний не так прост для запуска, так как запускается через командную строку и обладает широчайшим набором опций. Можно также использовать его же через virsh;
- Git. Без знания этой cvs невозможна эффективная работа с разными версиями ядра.
Есть знания, необходимые для embedded-специализации:
- знание различных аппаратных архитектур. Чаще всего в настоящее время это ARM;
- умение пользоваться приемами отладки для embedded. Здесь помогут всякие специализированные аппаратные отладчики, анализаторы шин, протоколов и т.д. Ну и, конечно, в самом простом случае порт uart и программа minicom для вывода отладочной информации;
- Yocto project;
- Build root;
- Das U-Boot.
О навыках: основные навыки любого Linux-разработчика это любознательность, способность к эффективной коммуникации и способность к поиску и систематизации информации из разных источников. Также необходим навык эффективного чтения кода.
Дело в том, что ядро Linux это живой развивающийся проект, и, к сожалению, просто невозможно взять и собрать всю информацию в одной или нескольких книгах и сказать – вот ты их прочитал, что-то попробовал и теперь знаешь все. Много нового появляется, существует куча источников информации – начиная от специализированных сайтов типа lwn.net и заканчивая почтовыми рассылками, посвященными различным подсистемам ядра. Все это нужно эффективно мониторить и уменить применить для решения своей задачи. Но бывает так, что нет вообще информации по какой-то фиче ядра, только несколько строк описаний вприсланном патче. И вот тогда придется лезть в код ядра и самостоятельно разбираться.
3. Как правило, компании требуют высшее техническое образование, хотя бывают и исключения. Очень важно знание английского. Хотя бы на уровне intermediate. И это совершенно оправданно. Сейчас большинство компаний работают с зарубежными заказчиками или сами являются зарубежными корпорациями. Поэтому английский надо учить добросовестно, и чем раньше начнете, тем лучше.
4. Основное требование, которое предъявляют компании, помимо, конечно, хороших навыков программирования в embedded, это несколько лет работы в этой области.
Самый минимум, который я встречал, – это 3 года. Часто стандартно требуют 5 лет. Но встречал я требования и в 8 лет, и даже в 10.
И это объясняется тем, что достаточно серьезный опыт действительно необходим. И он не приобретается так, как он может быть приобретен в более «попсовых» областях, вроде веба, – выучил очередной «самый модный и современный фреймворк», сделал один-другой тестовый проектик – и добро пожаловать. Нет, к сожалению, так не получится. Здесь нужна долгая и кропотливая работа и приобретение многих смежных знаний.
Но есть и плюсы у этого высокого порога вхождения – каждый Linux-специалист, и embedded в том числе, очень востребован и всегда находится в списке потенциальных кандидатов у большинства серьезных компаний.
К сожалению, этот высокий порог вхождения не каждому по плечу, особенно если приходится не начинать с этого, а переходить из другой области.
Позволю себе дать совет двум категориям людей: студентам и уже устоявшимся специалистам, которые хотят сменить свою область деятельности на embedded.
Студентам. Если хотите работать в этой области, то начинайте еще с университета. Затем можно год-другой поработать в каком-нибудь НИИ для набора опыта. Также многие именитые компании с удовольствием возьмут студентов сразу после института или аспирантов. Не упустите такую возможность, тогда можно обойтись и без НИИ. Не стоит сооблазняться высокими зарплатами, которые предлагают некоторые аутсорсинговые веб-компании. Да, они, конечно, будут очень выгодно отличаться от того же НИИ – тут кроме зарплат будет и красивый офис, и самокаты, и смузи, и, возможно, даже зарубежные командировки. И, конечно, можно этим сооблазниться. Мой совет – не делайте этого. Надо работать на перспективу. Отдав 2–3 года работе на перспективу, вы будете достойно оценены ведущими корпорациями или молодыми амбициозными стартапами – и будете там заниматься действительно интересными вещами и развиваться как специалист. А те, кто сооблазнились высокими зарплатами здесь и сейчас на вебе, так и останутся noname-аутсорсерами, изучающими очередной «самый лучший фреймворк». Имейте терпение и обязательно будете вознаграждены.
Состоявшимся специалистам в другой области. Итак – есть потенциальный барьер минимум в 3 года работы, а время есть только по вечерам. Что же делать? На мой взгляд, тут есть два варианта: во-первых, делать патчи в ядро. Добиться принятия хотя бы некоторых. Это резко повысит ваши шансы. Ну и второй путь, более сложный – сделать какой-нибудь проект самостоятельно. Сейчас для этого есть все шансы – железо с Linux на борту (например, Raspberry PI) дешево и почти любой проект доступен любителям. Идеально, если совместить эти два подхода. И, конечно же, вам понадобится очень серьезное терпение, будет много отказов и неудач, но если не опустите руки, то своего добьетесь. У меня, например, на переход в embedded из веба ушло более 2 лет...
5. Как правило, это зависит от того, какой проект делает компания. Условно говоря, если вы делаете storage девайс, будет подразумеваться хорошее знание IO стэка Linux, а если, к примеру, роутер – то тут, конечно, основной упор будет сделан на сетевой стек. Ну и так далее. Как правило, это явно указывается в описании вакансии.
Вячеслав Баринов, эксперт-инженер Московского исследовательского центра Samsung
1. Разработчику встроенного ПО невозможно не уметь программировать на языке C, не менее важны понимание принципов работы аппаратной части и особый навык – умение отлаживать код методом «пристального взгляда», так как не везде можно добраться с отладчиком. Причем важно уметь и не бояться разбираться в том, что внутри кода, разбираться и в чужом коде, без этого сейчас не представить работу в команде в проекте.
2. Современный разработчик не пишет код «голыми руками», мы пользуемся возможностями, которые предоставляют компилятор, отладчик, скриптовые языки (bash/Python), стандартные утилиты командной строки (grep/find/sed/awk).
3. Как правило, для работы в Исследовательском центре Samsung в Москве требуется высшее образование. При приеме на позицию разработчика кроме собеседования кандидаты должны решить достаточно сложные задачи по программированию.
4. Прежде всего – это наличие опыта разработки на C. Безусловный плюс для кандидата – это наличие собственных исправлений и дополнений в код Open Source-проектов, принятых сообществом.
5. Samsung – большая компания, и умение работать в команде, взаимодействовать с разными подразделениями, а также знание внутренних процедур являются важными навыками.
Александр Шлапаков, разработчик ПО встраиваемых систем в Нейролаб
1. Программист встроенного ПО под Linux должен обладать следующими знаниями и навыками:
- Отличные знания языка Си.
- С++.
- Структуры данных и алгоритмы.
- Знание и понимание архитектуры ВС в целом.
- Архитектура ARM, x86.
- Знание архитектуры операционных систем.
- Знание и понимания экосистемы Linux.
- Владение компиляторами (gcc) и отладкой.
- Хотя бы общие знания в электронике и навыки работы с «железом».
- Понимание работы периферии.
2. Инструментарий программиста встроенного ПО под Linux выглядит так:
- Дистрибутив linux (как рабочая ОС).
- GCC, GDB, binutils, cmake, make.
- Buildroot, Yocto.
- git.
- Редактор кода по выбору.
- Командная строка.
3. Желательно техническое образование в области ИТ или физтех, но больше требуются конкретные знания и опыт в предметной области, чем наличие диплома. Английский хотя бы на уровне чтения технической документации.
4. Зависит от компании и требуемого уровня для конкретной должности. В некоторых случаях умение пользоваться Arduino хватает, чтобы найти работу. Специалистов в этой области дефицит, а порог вхождения достаточно высокий.
5. Умение работать со всем, что касается низкого уровня. Не только работа с Linux, но и с микроконтроллерами (bare metal), SoC, периферией (uart, spi, i2c и т.п.), стек tcp/ip.
Павел Мельников, Senior Embedded Systems Developer, компания Visteon Electronics
1. Твердые знания языка С (в случае Automotive индустрии – знание MISRA C Coding Standards);
Базовые знания схемотехники (умение пользоваться осциллографом для отладки шин данных (SPI, I2C, etc);
Написание и поддержка Device Tree для целевого микропроцессора, написание драйверов для периферии, знание принципов работы ОС (синхронизация, критические секции, сигналы, потоки), межпроцессное взаимодействие (сокеты, общая память, очередь сообщений);
Владение средствами отладки (jtag, gdb, objdump). Умение профилировать код с valgrind.
2. Основной инструментарий разработчика, необходимый для выполнения работ:
- рабочая ОС – Linux или Windows (наличие инструментов для кросс-компиляции под целевую платформу);
- IDE – vim или графический редактор для написания исходников, компиляция – с помощью gcc или специфических проприетарных компиляторов;
- сборка – toolchain целевых архитектур, различные билд-системы (Make, autotools).
3. Знание английского языка на уровне intermediate, высшее образование в области Computer Science, Electronics Engineering.
4. В зависимости от целевого уровня (junior-middle – senior – architect). Опыт работы с системами на кристалле (SoC) на Embedded Linux, портирование подсистем с одного SoC на другой.
Оптимизация по времени выполнения критических функций ПО.
5. В Automotive индустрии всегда накладывается требование на время выполнения кода, а также повышенные требования к безопасности. Зачастую запрещено динамическое выделение памяти в Safety Critical проектах (например, системы подушек безопасности в автомобилях).
Для нашей компании нужны соискатели, имеющие опыт работы с различными процессорными архитектурами – ARM (cortex-M, cortex-A): Опыт работы с ОСРВ QNX или ОС Linux.
Роман Шишко, Software Engineer, компания DSR Corporation
1. В любом случае потребуется знание языка С, реже С++.
Основные знания и навыки программиста встроенного ПО под Linux можно разделить на три группы.
- Первая группа, общие для любого программиста навыки:
- умение читать код;
- умение писать код, который смогут читать другие программисты (и у них не возникнет желания сделать с вами чего-то плохого);
- умение отлаживать код;
- способность взаимодействовать с другими членами команды;
- умение работать с системами контроля версий.
- Вторая группа, знания и умения, специфичные для разработки под Linux:
- свободно работать в командной строке;
- ориентироваться в исходниках ядра Linux;
- bash, gcc.
- Третья группа, знания и умения, специфичные для разработки встроенного ПО:
- понимание, как программа размещается в памяти, как работают аппаратные прерывания;
- работа с осциллографом, логическим анализатором, мультитестером, паяльником;
- умение разбираться в документации на микрочипы;
- умение читать электрические схемы.
2. ПО: gcc-тулчейны, специфичные для целевых платформ, Emacs, Wireshark, командная строка.
«Железо»: J-Link, мультитестер, паяльник, осцилограф.
3. Жестких рамок нет. Безусловно, при первичном рассмотрении кандидата отсутствие профильного высшего образования может выглядеть подозрительно, но если человек показывает хороший уровень знаний и умений, то это вряд ли будет кого-либо беспокоить.
4. Опыт работы в годах далеко не всегда отражает профессиональный уровень. Если исходить из условия, что человек действительно большую часть рабочего времени занимается разработкой, то программист уровня «middle» это, как правило, 3–5 лет, «senior» 5+ лет профессиональной разработки.
5. Специфических требований в нашей компании нет.
Игорь Демченко, Embedded Linux C developer
1. Работая с встроенным ПО (работающим поверх Linux), программисту в теории будет достаточно знания языка C. Однако на практике эффективность разработчика зависит от его гибкости – с какими устройствами и каким образом он работал в прошлом, какие задачи решал и т.д. Мир встроенного ПО ограничен лишь фантазией человека, который придумает, какой же модуль подключить к целевому устройству. ГИБКОСТЬ – это ключевой навык. Возможно, еще помогут знания системного администратора Linux, но это опционально.
2. Обычно текстового редактора и системы контроля версий достаточно. В зависимости от проекта или компании, людям в офисе предлагают использовать разные IDE или надстройки над редакторами, их можно как использовать, так и нет.
3. Требования к потенциальным сотрудникам могут отличаться в зависимости от компании. Некоторым в первую очередь важен прошлый опыт работы и как мыслит человек, решая ту или иную задачу. И потому об отсутствии профильного высшего образования (или вообще его наличия) могут даже не спросить.
Некоторые компании обращают внимание на наличие технического (иногда явно профильного) образования. Это либо компании, которые живут пережитками прошлого, либо те, у которых сложность всего их комплекса ПО действительно предполагает очень высокий уровень кандидата.
4. Особых требований нет. Компании обращают внимание, с чем именно работали соискатели (технологии, устройства, задачи), и пытаются найти как можно больше точек пересечения с их задачами. Так как каждый новый проект встроенного ПО – это что-то совершенно новое, то полная эквивалентность задач и технологий попросту невозможна. Новый проект – новая специфика.
5. Этот вопрос обычно закрыт NDA..
Денис Полторак, Embedded C++ tech lead в NDM Systems Inc.
1. Чаще всего нужно знать ядро Linux (классика – книга Linux Device Drivers, 3rd Edition) и сети. Бывают проекты без ядра, в пользовательском пространстве. Для таких достаточно многопоточности (pthread) и общего понимания работы в командной строке.
2. В зависимости от того, насколько удобно построен проект. В идеале – отладка ПО идет на десктопе, и на железе остается разобраться с 1% багов, обычно при помощи логов. То есть Eclipse. Если не повезет, но железка поддерживает дебаггер – gdb. Если совсем не повезло – логи, бубен и календарь фаз луны. Могут быть полезны strace, valgrind, cppcheck. Это для пространства пользователя. В ядре свой набор инструментов.
3. Никаких, лишь бы кандидат умел кодить.
4. Зависит от позиции. Человек должен понимать, что он делает.
5. Всему можно научиться, при желании.
Подготовил Игорь Штомпель
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|