Поиск работы. Инженер-программист
Пришло время немного отклониться от популярных здесь профессий разработчиков кода исключительно для виртуального пространства. Поговорим о людях, чья жизнь посвящена реальным машинам: роботам, анализаторам, датчикам и в целом той части мира, что неизбежно у каждого из нас ассоциируется с будущим. Назовём их инженеры-программисты, чтобы максимально широко охватить все подкатегории этой увлекательной профессии. Что надо знать новичку, что почитать и на что рассчитывать поговорим далее.
Основной язык
Так как работа инженера-программиста в основном связана с микроконтроллерами, то базовым языком можно называть C. Для начала работы необходимо знать хотя бы базовые вещи: операторы, классы, циклы, структура программ. Дальнейшее обучение языку можно продолжить параллельно с первыми практическими занятиями.
Кроме того, будет крайне полезно освоить Ассемблер. При отладке микроконтроллера вам придётся постоянно сталкиваться с необходимостью интерпретировать действия на низших уровнях, и, если вы не представляете, как выглядят и что означают действия интерпретатора — далеко вы точно не продвинетесь.
Если решите погрузиться больше в профессию инженера, нежели программиста, потребуется освоить ещё VHDL и Verilog. Это специальные аппаратные языки, созданные специально для описания вычислительных и аналитических операций прикладного железа. Причём первый подойдёт скорее тем, кто делает первые шаги от инженерной среды, а Verilog — для людей с программистским складом ума.
Есть и обратный путь — отказаться от примитивного подхода и создавать современные системы сразу на языках высокого уровня. Здесь нет ничего предосудительного, более того, любого классного инженера-программиста жизнь заставляет работать и в этом направлении. Вот только здесь количество изучаемых языков ограничено только фантазией разработчика. C#, Java, Basic вполне подойдут на первое время.
Программное обеспечение
Здесь, как и в прошлом пункте, раздолье достаточно большое, но начать всё же следует с двух наиболее популярных сред разработки: Keil uVision и IAR Embedded Workbench. Помимо поддержки большинства платформ, огромным плюсом этих сред разработки является наличие бесплатных версий с ограничением размера кода (причём ограничение для новичка почти недостижимое).
Кроме того, полезно будет хотя бы поверхностно изучить CodeVisionAVR (для AVR контроллеров), MPLAB (для Microchip), Atmel Studio (для Atmel Cortex-M и AVR). Вообще же, чем больше времени вы потратите на осваивание одной конкретной среды, тем проще вам будет переключиться на другую, так как структура у них у всех примерно одна и та же, вопрос лишь в расположении кнопок.
Литература
Запомните, что главная литература для человека, создающего код для микроконтроллера — это даташит на сам микроконтроллер. Нет. Безусловно есть весьма полезные книги для полных новичков, вроде «Beginning Arduino» для одноимённой платформы или «Микроконтроллеры. Это же просто!», которые позволят понять основы. Но вот для полноценного обучения вы вряд ли сыщете подходящую книгу (настолько уникален мир контроллеров). Так что собственная любознательность, интернет и литература от производителя вам в помощь.
Физическая реализация
Огромный минус инженера-программиста — это то разнообразие платформ, с которым может свести судьба. Помимо бесчисленного количества применяемых контроллеров, их семейств и отдельных видов, вам неплохо бы научиться работать с ПЛИС, досконально изучить все стандарты передачи информации от 1-wire до CAN, чётко представлять отличия SSI от SPI и многое другое. Практически невозможно знать, что вам понадобится до того момента, как вы преступите непосредственно к своей первой работе. А значит учите всё и желательно на практике.
Если переходить непосредственно к платформам, тот тут следует выделить 3 ступени и соответственно подходящие для этого устройства. Если ваш багаж знаний и опыта приближен к нулю, тогда полезно будет обзавестись набором-конструктором, вроде Adruino. Здесь к вашим услугам дружелюбная среда программирования и плата с достаточным количеством элементов, чтобы применить на практике свои знания. Постепенно, по мере понимания предмета можно переходить на платы с контроллерами AVR или ARM и более богатой периферией.
Следующий уровень — это Raspberry Pi. По сути, это одноплатный компьютер, который позволяет реализовывать свои сокровенные высокотехнологичные желания, будь то умный дом или удалённый доступ к рабочему месту. С точки зрения начинающего разработчика, это интересно ещё и возможностью понять реализацию электронных устройств с собственной оболочкой, интерфейсом и уникальной функциональностью.
И третья ступень, симбиоз между примитивной разработкой и высокоуровневой — система из датчиков, контроллеров и компьютеров. Разобравшись с этим вопросом, можете смело переходить к составлению резюме, ведь вы теперь ценный кадр.
Поиск работы
В отличие, например, от разработчика приложений, проблема начинающего инженера-программиста заключается в невозможности показать свои умения без привязки к конкретным сторонним задачам. Поэтому найти работу совсем без опыта будет очень сложно. Зато спустя не самые долгие 1-3 года, вы уже будете считаться серьёзным профессионалом и сможете претендовать на должности с небольшой конкуренцией и весьма неплохой зарплатой.
Набираться первого опыта проще всего участвуя в полулюбительских одиночных проектах. Попасть в них можно проявляя активность на форумах и специальных сообществах, попутно делясь собственными успехами и достижениями. Кроме того, на международных фриланс-ресурсах можно нередко найти предложения поучаствовать в удалённой разработки кода для какого-нибудь летающего дрона. Придётся делать это почти бесплатно, зато опыт реальный, зафиксированный и очень интересный.
Однако практика показывает, что подавляющее большинство инженеров-программистов имеют смежное образование или опыт. Поэтому, если вы ранее имели дело с микроэлектроникой или кодами – это тоже вполне сойдёт за требуемый опыт (особенно, если проявить немного хитрости).
Итог
Стать инженером-программистом — крайне сложная задача, требующая большого объёма знаний и, главное, желания. Очевидные плюсы в виде достаточно низкой конкуренции и практическим интересом в создании чего-то большего, чем мыльных виртуальных пузырей, уравновешиваются серьёзными финансовыми затратами на обучение и необходимостью постоянно изучать сухую техническую информацию.
Тем не менее, вы вряд ли найдёте человека, недовольного тем, что выбрал этот путь. Так почему бы не попробовать и вам?
Железо железом, а программировать придется: профессия «Веб-разработчик».