Каким уровнем знаний должен обладать человек, для того, чтобы обладать гордым званием "Инженер-программист"? Об этом не знают ни университеты, ни компании, которые отсеивают кандидатов одного за другим, но упорно продолжают раздувать миф о том, что "программистов не хватает" (добавляя при этом, что не хватает "хороших" программистов, ведь "кругом одни дебилы"). Вузовская программа до прихода в нее всевозможных прогрессивных реформаторов и инфоцыган давала хороший ответ на этот вопрос и предполагала изучение будущими специалистами таких вещей, как:
1) Устройство операционных систем, сетей и архитектуры компьютера
2) Низкоуровневое и высокоуровневое программирование на таких языках, как паскаль (как язык, предназначенный для обучения программированию и вката, а не для промышленной разработки), С, ассемблер (для различных архитектур процессоров)
3) Соответственно, разработка прошивок под микроконтроллеры и электротехника (ведь данные дисциплины помогают лучше всего разобраться в том, как программа и компьютер работают на базовом уровне, грубо говоря, на примере чего-то маленького и относительно примитивного)
4) Конечно, не следовало бы забывать об общей физике, высшей математике, дискретной математике и математической логике, но эти дисциплины - общетехнические, и так или иначе предназначены для изучения всеми инженерами.
Индустрия не имеет никакой стандартизации, и в результате мы страдаем от огромного количества различных технологий, применяемых самыми разными проектами. Каждая из вакансий требует от соискателя знать свой собственный набор языков, фреймворков, библиотек и утилит. Не следует забывать о том, что в индустрии с определенной периодичностью одни технологии сменяются другими - просто потому, что корпорации и ведущие разработчики решили, что так будет "прогрессивно", и за новым фреймворком, либой и фичей - будущее. Инженер-программист не может просто изучить определенный набор дисциплин и применять эти знания всю свою жизнь - он постоянно учится, постоянно чего-то не знает, постоянно некомпетентен. Программист не бывает уверенным в своих силах и знаниях. Весь твой предыдущий опыт не значит практически ничего. На собеседованиях интервьюеры дотошно задают тебе самые каверзные вопросы про язык программирования, фреймворк и платформу - ведь кроме тебя на эту вакансию стремится еще минимум 30 человек. Твоя ценность для проекта и компании определяется тем, насколько давно ты работаешь именно тут - хорошо ли ты знаком с его архитектурой, хорошо ли владеешь используемыми на нем технологиями. Со смертью проекта умираешь и ты как специалист.