Предыстория (в целом можно скипнуть, но буду признателен, если прочитаете): я являюсь студентом НИЯУ МИФИ института физико - технических интеллектуальных систем, закончил первый курс. Результатом первого курса была проектная практика "Танковый Биатлон", в ходе которого нам была поставлена задача спроектировать, запрограммировать, изготовить танк, удовлетворяющий ТЗ, а также сделать мобильное приложение для управления этим танком. Все делалось криво, косо, кучу раз переделывалось. Мне досталась роль программиста, потому что желания и знаний было больше, платформой была Ардуино (да, я прекрасно понимаю, что это зло, что весь низкий уровень там спрятан от "нежного" пользователя, но ВУЗ выделял именно Ардуино). Нам всем это невероятно сильно понравилось, результатом чего стала победа. Сейчас, когда я чуть подробнее узнал, что такое Embedded и что можно так классно сочетать IT c инженерией, вижу себя только там.
Суть вопроса: Какие знания нужны для того, чтобы устроиться на Джуна? ВУЗ дает мне очень хороший фундамент: сильный вышмат и общефиз, но т.к. я закончил лишь первый курс, ждать построения всего фундамента полностью мне придется 2 года, что очень долго, когда развиваться хочется прямо сейчас.
На данный момент у меня есть какая - то база в Си, но опыта в программировании МК нет совсем.
1. Учиться стоит исключительно на ARM, полностью забыв про существование AVR, или же стоит и на AVR что - то попробовать? Буду признателен, если скинете обучающие книги/материалы/etc, с которых можно начать.
2. Arduino - абсолютное зло, к которому никогда нельзя приближаться, или можно на нем собирать прототипы, когда хочется что - то проверить и очень быстро собрать?
3. Что вообще нужно знать из IT сферы, кроме умения писать код под МК? Посмотрев вакансии, увидел там Linux, Verilog и кучу кучу всего, что для меня кромешная тьма.
4. Понимаю, что основы электроники и электротехники - невероятно важная тема, поэтому буду премного благодарен за информацию, по каким книгам/курсам/ресурсам лучше её учить.
Работал в embedded с 1999 по 2010. В то время был хорошим электроником, разрабатывал схемы с МК, сам и проги писал. С достаточно, понимание С++ желательно, так как были варианты, когда с Майкрософт присылали исходники аудиокодеков на С++, хотя конечно возможности плюсов использовались по минимуму. Но надо было все это переложить на Си для дохлого встроенного проца. А так у меня в стеке C, C++, C#, Matlab для моделирования нейронок и DSP и всякая мелочь типа питончика и иже с ним.
Embeded в России плох тем, что очень мало вакансий и они низкооплачиваемые, так что по карьере не советую, жена потом уйдет )).
А вообще я с мая 2010 ушел на трейдинг, пишу сам роботов на MQL4/5 и ими торгую. Плюс фриланс. Надоело просиживать жизнь в офисе, решая чужие задачи. Мне 57.
1. Вот сразу вы в понторезку ушли. Эмбеддер выбирает кристалл под задачу. Где то и attiny85 будет толстой.
2. Ардуина это отладочная плата, не хотите ее песочницы используйте голый тулчейн
3. Да много нужно, алгоритмы Кнутта например почитать, опять же многие тулзы только под линуксом, FPGA это отдельный большой разговор
4. Слишком широкий вопрос начните отсюда https://www.radiokot.ru/articles/
Не советую читать Кнута. Вы просто зря потеряете время. Если нужно быстро понять базовые алгоритмы сортировки и поиска - то лучше Никлаус Вирт или Седжвик. Кнут слишком нуден и растягивает на 4 тома то что можно выложить в брошюре. Говорю с позиции практика так как мне Кнут и его выдумки не пригодились. Говорю выдумки потому что Кнут все четыре тома вас будет грузить исходниками на виртуальном процессоре MMIX которого не существует в природе. А зачем вам это душное душнилово?
Вот Седжвик есть в вариациях на Java/C++/C. Берите его. У Вирта - Паскаль что тоже вобщем хорошо для изучения.
Эмбеддед разработчик не работает в случайно взятом в вакууме мире.
Ищи конкретные компании, смотри что им надо.
Кому-то нужно писать драйвер под 3д принтер, и надо какой конкретно чипсет у них используется.
Кто-то пишет что-то под smartTV, или холодильник с wifi, опять же там ардуино вообще не рядом может оказаться.
Си должен быть хорош. Причем для эмбеддед было бы неплохо разбираться как пишется под ОС и без ОС.
Наверное будет полезным навыком умение написать свой драйвер под винду/линукс. Тут больше о манифестах и соглашениях, можно и драйвер коврика написать. Но чтобы все было по стандартам.
Embedded многогранен... Где-то нужно высокоуровневый код написать под, например, Linux или еще под какую-то "ось". Где-то нужно с протоколами поработать (ну и куда без интерфейсов). А где-то еще схемку "сбацать". Да и куда без паяльника. А еще можно на питоне или на "дотнете" написать что-то (тот же ESP32). Да, забыл, еще ведь сущестуют всякие "показометры", навроде тестера или осциллографа. Да та же "малина" вполне за "встройку" сойдет.