Как наиболее правильно подойти к обучению программированию с нуля?
====================================================================

 Некоторое время назад решил радикально сменить свою профессиональную сферу - научиться программировать. Целевая область на данный момент - веб. Окей, сказано - сделано, почитал какие языки бывают, выбрал для изучения Python. Скачал книгу М. Лутца, начал читать-изучать. Хорошо, с синтаксисом вроде проблем нет, но понимаю, что помимо знания ЯП, нужны некоторые более фундаментальные знания, надо копнуть глубже. Хорошо, погуглил, решил в качестве такого фундамента почитать SICP. Читаю - опять понимаю, что чего-то у меня в голове не хватает. Решил параллельно учить математику. Сейчас скачал книгу Р. Хаггарти по дискретной математике. Собственно план такой: сначала параллельно освоить базу по "computer science" и математике, потом уже приступить к изучению собственно программирования. Вопросы:  

1) База по CS: SICP я так понял хорошая книга, что еще посоветуете фундаментального для изучения, в каком порядке?  

2) Математика: дискретка я так понял строго обязательна, какие еще разделы необходимы и полезны (матан, линал, диффуры, тервер и т.д.)? С чего лучше всего начать?  

3) Одобрите/осудите мой выбор книг. Что еще необходимо изучить чтобы в конечном итоге стать высококлассным специалистом? В каком порядке все это добро изучать? Ну и вообще, буду благодарен за любые советы :)  
  

Английский язык немного знаю, но бегло читать техническую литературу не осилю, так что просьба советовать издания только на русском языке.  
  

Немного о себе: закончил экономфак (математика всякая-разная была, но все уже давно забыто), получать второе высшее считаю нецелесообразным (слишком много времени уйдет на "лишние" предметы вроде философии), работаю (не в IT), так что свободное время сильно ограничено. 

 Если ваша цель сменить работу и ресурсы ограничены, то может быть имеет смысл сосредоточится на более простых путях?  
  

Питон отличный язык для обучения, но найти работу джуниором без боевого опыта на нем будет сложновато. Можно поискать веб-студии, которые разрабатывают на Питоне и предлагающие стажировку у них - это очень хороший путь.  
  

А так для старта я бы посоветовал смотреть в сторону фронт-энда. Учить HTML, CSS и JS для начала потом можно уже выбрать серверный язык. Можно постепенно углубляться во фреймворки, автоматизацию фронт-энда, адаптивность и пр.  

Работу найти намного проще. Обучение более наглядное и быстрое.   

Материалов на русском просто завались.  

Это все подходит, если цель именно сменить род профессиональной деятельности как можно быстрее. В любом случае придется заниматься учебой регулярно (как мне кажется не менее получаса-часа в день), но отдача от фронт-энда быстрее. 

 Матан не нужен: модульная арифметика и прочие прелести дискретной математики в Web-программировании вы вряд ли встретите :-) 

 Думаю что стоит посмотреть книгу автора Кнут, и посмотреть серверный яп РНР. Позже на питон перейти или руби, если будет на то необходимость. А вообще программирования надо изучать с изучения яп ассемблер и с/с++. 

 советую взять таки этого же Лутца и паралельно пройти курс на Treehouse, а потом на CheckiO, причем если на Чекио начнете, то на Трихаусе будет [халявка](http://www.checkio.org/blog/checkio-and-treehouse/) бонусом. 

 Сам учился так же нифига не на околоITшной спец. Книги не читал никогда специализированные - только общетеоретические (DDD, Design Patterns etc.). Языки (PHP, Phyton) изучал по мере выполнения задач.   

Проблема в изучении сразу большого числа литературы в том, что в голове образуется каша, и как ее применять на практике, далеко не всегда ясно. Так что, имхо, на книги можно смело забить и начать смотреть различные good practice и готовые проекты по различным фреймворкам/CMS, попутно стягивая их себе и пробуя "тыкаться". Так получите гораздо быстрее практические навыки. Потом можно "сухую теорию" по разработке смотреть.  

Конечно, базовую теорию по языку тоже надо почитать, но на это потребуется вряд ли больше одного-двух вечеров.  

Но все это при условии того, что в общем и целом понимание того, что такое программирование, присутствует. Если нет, то Turbo Pascal в помощь для изучения общих принципов алгоритмистики. 

 Помимо всего вышесказанного, советую иногда слушать подкасты на IT тему. Например [Разбор полетов](http://razbor-poletov.com/), [SDCast](http://sdcast.ksdaemon.ru/) и другие. У [Якова Файна](http://americhka.us/) (програмист из Америки) обязательно послушайте 76 выпуск, как раз по данному вопросу.   

Подкасты и мотивируют, и помогают влиться в мир другой профессии. 

 а мне всего 21 и я сижу парюсь, не поздновато ли мне поступать в универ it технологий (после школы не стал поступать из-за кое-каких обстоятельств).. уже год работаю it специалистом в одной компании, пришел туда как стажер, два месяца обучался, раньше работал где придется.... Автор спасибо за статью, поднял мне дух)) 

 штмл, потом яваскрипт.