Тут важно понимать, кто такой программист. Если мы имеем ввиду "эникейщика" который умеет переустанавливать Windows (ведь у нас программистами называют этих людей), то это другой вопрос. Стоит поговорить про разработчика - человека, который разрабатывает программное обеспечение, ну или что-то похожее.
- Для начального уровня (как говорят в среде джуниор) на самом деле хватит год-два толковых курсов и самообразовния. Тут вопрос больше самодисциплины и желания. Кому-то хватит полгода, чтоб начать заниматься разработкой, ну а кому то лень...
- По поводу высшего образования: вопрос очень спорный и ложится только на плечи выбирающего. Есть толковые вузы и специальности. Но все равно все зависит от вас. В такие вузы нелегко попасть, поскольку там высокий проходной бал. Кроме того, красивая бумажка - это очень круто, но все больше крупных компаний с хорошими заработками ориентируются на знания. Тут нужно быть готовым к тому, что человек со средним образованием спокойно может обойти выпускника с красным дипломом, если окажется, что знаний и умений у него больше) И, кроме того, в голову знания сами не влезут. Преподаватели не более чем дадут "волшебный пендель" в нужном направлении, а учится и развиваться все равно придется)
- Без практики стать специалистом среднего уровня (мидл по-другому) практически нереально. Нужно иметь за плечами пару лет работы в компании, чтоб получить соответствующие скилы.
- Для специалиста высокого профиля (сеньора) срок обучения и практики составляет всю оставшуюся жизнь. Мир информационных технологий развивается очень стремительно и специалисту постоянно придется дообучаться в различных сферах, изучать новые технологии, поскольку перерыв в год может превратить сеньора в молодого неопытного специалиста)