How To Become A Firmware Engineer? January 25, 2016

Мы продолжаем нашу серию публикаций, посвящённую технической экспертизе специалистов Softeq Flash Solutions. Сегодня мы приоткрываем завесу тайны над профессией Firmware-инженер. Наши ведущие разработчики Андрей Конон и Максим Скурыдин, а также руководитель проектов Сергей Глебов рассказывают о том, как пришли в эту область, какие есть особенности у проектов SK hynix и о том, чем отличается “железный” и софтверный дебаг.

– Кто такой Firmware-инженер?

Андрей: Это программист, который заставляет “железо” работать для определённых целей пользователя. Например, записать фильм на флешку или создать файловую систему. Наша задача сделать так, чтобы “железка” это выполнила.

Максим: Разработка Firmware — это разработка софта для целевой платформы, которая значительно отличается от обычных персональных компьютеров. Это узкоспециализированные микросхемы, часто — многопроцессорные, с разными типами памяти, аппаратными модулями специального назначения и т.д. В нашем случае это контроллеры, которые управляют работой SSD-дисков.

– Значит, Firmware — это то, что есть в любом электронном устройстве?

Сергей: Не совсем так. Но если устройство сколько-нибудь сложное, то “фирмварь” внутри будет обязательно.

Андрей: Действительно, если устройство очень простое, то без Firmware можно и вовсе обойтись, сделав всё “железной” логикой.

TechBrunch.jpg

Занятие в рамках технического проекта TechBrunch (апрель 2015)

– Почему вы решили стать FW – инженером?

Андрей: Когда начинал карьеру, я не знал, что стану именно Firmware-разработчиком. Софтек (ранее — «Софтек Девелопмент», сейчас — «Софтек Флеш Солюшнс») — это мое первое и пока единственное место работы. Не хочется говорить плохо о других языках, но мне никогда не хотелось писать на C# или Java. Хотелось плюсов (С++) и С. Шесть лет назад, когда я искал работу, с этими языками в Минске было мало предложений. Когда окунулся в работу, понял, что разработка Firmware — это именно то, что очень нравится. В общем, попал в нужную компанию.

Andrei Konan.jpg

Андрей на вечеринке выпускников (Softeq Development, июль 2012)

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

Сергей: Это очень отличается от прикручивания фреймворка к фреймворку, которое по недоразумению называют программированием.

Андрей: Firmware-разработка — это такое непаханое поле в области устройств хранения данных. Здесь есть всё, что хочешь: и куски операционной системы (мы можем её дополнять), и что-то алгоритмическое (можно смотреть, как внутри диска разруливаются данные, куда они идут, как они сохраняются), и что-то более “железное”. Здесь всегда интересно.

Сергей: У SK hynix довольно мало похожих девайсов. Например, когда проектируется новый диск, в нем обязательно что-то будет работать по новым правилам. Например, то, что раньше мы делали кодом, делает “железка”. Всё меняется довольно быстро. Может быть, это не очень просто для бизнеса, но очень интересно для специалиста.

SFS All hands meeting 2015.jpg

Сергей с коллегой из HQ SK hynix (SFS All hands meeting, декабрь 2015)

– В чем особенность работы над такими проектами?

Сергей: Значительное отличие от мобайла и геймдева: продукт, который мы сейчас начали делать, по оптимистичным прогнозам пойдёт в производство через несколько лет. В веб-проектах ты можешь видеть результаты работы практически сразу и сразу же получаешь фидбэк. Здесь же вилка от того момента, как мы сделали продукт и как мы сможем его начать продавать — несколько лет. И это время — длинный прыжок почти в никуда, ведь невозможно продать наполовину сделанный SSD. Зато потом можно увидеть в магазине ноутбук или телефон со своим кусочком кода, что, безусловно, приятно. Существуют ещё особенности найма. Если говорить про разработку Firmware, есть области с высокой ценой ошибки. Например, у нас на одном проекте есть пара ребят, делающих ROM-код, который зашивается намертво в девайс. Ну, вы поняли (улыбается).

– Какие проекты запомнились больше всего?

Андрей: Сложно выделить один какой-то проект. Приятно, что получилось поработать на проектах, связанных с SATA SSD, которые ставятся в ноутбуки большими партиями. Вы можете просто купить их на рынке в свой компьютер. Сейчас же мы работаем на Enterprise сектор.

Максим: Наша команда тоже разрабатывает SSD, но они работают по новейшему протоколу PCIe. Это тоже Enterprise-решения, для больших серверов. Они работают ещё быстрее, чем SATA. Скорости — гигабайты в секунду в обе стороны.

Maxim Skurydzin.jpg

Максим в командировке в Сеуле (январь 2016)

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

– Какие технологии нужно знать, чтобы получить работу FW – инженера?

Сергей: Мы не ставим вопрос, какими технологиями нужно владеть. Нам не важно, какие фреймворки использовал человек. Нам важно, чтобы он был способен писать качественный код. А что к чему при этом он “прикручивал проволочкой” — не имеет значения. Чтобы работать на симуляторе, нужно хорошо знать плюсы (С++), иметь представление об STL, Boost, иметь опыт разработки сложных систем. Важно разбираться в алгоритмах поиска и хранения данных, сортировке, многопоточности. Алгоритмы — это классика, базовые знания, которыми должен обладать каждый грамотный программист. Но почему-то сейчас, если он ими обладает, он работает либо в Firmware-секторе, либо в High Load, либо в некоторых проектах Game Dev. Остальные товарищи пользуются, как правило, готовыми наработками, что в принципе неплохо. Но они зачастую не представляют, что внутри происходит. Получается, что каждый день ты пользуешься предметом, внутри которого черная бездна, и ты туда даже не заглядываешь.

Андрей: Мы пишем на С (стандарт С99). Этот язык хорошо зарекомендовал себя в низкоуровневых системах, на нем пишутся ядра операционных систем. Он быстрый, несложный, включает то, что нам нужно. Универсальных решений нет, в нашей области всегда нужны специализированные. Когда мы говорим о производительности, идёт борьба за микросекунды, и ни о каких вызовах сторонних шаблонных компонентов и речи быть не может (улыбается).

Andrei Konan SFS All hands meeting.jpg

Андрей на SFS All Hands Meeting (декабрь 2014)

Сергей: В симуляторе у нас С++ 11. В нем много наворотов, если сравнивать с C, он может “взорвать” неподготовленный мозг. И это не вопрос знания фреймворка или знания технологии, это вопрос того, насколько ты в это встроился, насколько ты это умеешь. Это как читать книги о беге и бегать. Вот у нас надо именно бегать — просто читать книжки не помогает.

– Что вы порекомендуете тем, кто хочет стать Firmware-инженером?

Максим: Важны не столько технологии, сколько личные качества. Например, такие, как самостоятельность, упорство, терпение и готовность вникать в мельчайшие детали проекта и предметной области. Приходят инженеры из других областей с хорошими знаниями и опытом, но не у всех получается хорошо решать проблемы, возникающие в процессе работы, т.к. область очень широкая и непростая. Также обычно в проекты вовлечены несколько команд (кто-то разрабатывает аппаратуру, кто-то занимается тестами; Firmware-компоненты могут разрабатываться разными командами, находящимися в разных странах). В такой ситуации очень важную роль играет умение общаться и получать необходимую информацию. Причем просто знания английского недостаточно, нужно иметь хорошие коммуникативные навыки.

Сергей: Всем начинающим рекомендую хобби-проекты. Купить себе Dev-board. Это доступно, стоит недорого. Он тебя сам заставит подтянуть знания, восполнить пробелы. Практический опыт всегда важнее. Нам не подходят неаккуратные инженеры. Бывают умные, но совсем не аккуратные. Нельзя написать сразу идеально, все это понимают. Но человек, который всё время ерунду делает, принесёт много проблем.

Андрей: Он ещё должен любить отладку. Когда пишешь софт, нажал F5, оно все дебажится красиво, переменные все видны. Когда ты работаешь с железом, то надо привыкать, что у тебя максимальный уровень оптимизации, у тебя половина, а то и 90% лежит в "железке", которая секунду, даже миллисекунду назад была доступна, а сейчас уже нет, и твой дебаг превращается в не самую простую вещь. К этому нужно приспособиться.

– Какие книги, обучающие порталы могут помочь начинающему Firmware-инженеру?

Андрей: Фундаментальные книжки Operating Systems: Design and Implementation, Structured Computer Organization и, если собираетесь работать с сетью, Computer Networks. Это всё от Таненбаума.

Максим: Важны фундаментальные знания в Computer Science. По алгоритмам и структурам данных мне нравится Introduction to Algorithms (Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein). Но одной книгой ограничиваться, конечно, не стоит. Нужно знать С. Сам язык очень простой, но умение им хорошо и эффективно пользоваться приходит не сразу. Очень полезно уметь разбираться в немаленьких проектах, написанных на С. Если у начинающих разработчиков есть опыт “копания” и внесения изменений в open source проекты, им будет намного проще влиться в уже идущий проект. Также человек должен представлять, что происходит внутри любого цифрового устройства, как вычислительные системы работают (книги по архитектуре ЭВМ Э. Танненбаума или Дэвида Паттерсона и Джона Хеннесси просто обязательны к прочтению). Плюс сейчас довольно много различных online-курсов на таких платформах, как Coursera и EdX.

Андрей: Нужно понимать, что не найдёшь книжки, в которой будет всё, что нужно. Важен опыт. Прочитав, ты поймёшь общий концепт, а вот когда запрограммируешь “железку”, поймёшь, что именно тебе надо подебажить. Банальное моргание диодами заставит тебя окунуться в этот процесс.

Сергей: Если просто пойти в ВУЗ, сделать все лабораторные, курсовые, получить хорошие оценки по всем предметам, ты не выйдешь специалистом. У меня был контрольный вопрос на собеседованиях, на десятках кандидатов его проверил. Я спрашивал, а что ты делал для себя. Как человек вежливый, не выгонял с интервью, если ответ был «ничего». Либо это твое хобби, либо у тебя есть проект, который тебя захватывает. Других вариантов нет.

SK hynix memory solutions Eastern Europe

Belarus, Minsk, 220030
Nemiga str, 5, room 75, 4 floor

skhmse.contact@skhynix.com

Questions, suggestions, ideas - all is interest for us.

Send us your CV

Заполните контактную форму и отправьте ваше резюме.

Форма успешно отправлена

Наш менеджер свяжется с вами в ближайшее время.

Форма не была отправлена

Разрешенный формат файла (.doc, .docx, .pdf) и файл не должен прeвышать 10Мб.

Каптча обязательна для заполнения!

Loading