Хорошей идей было бы начать обучения с того, чтобы понять, для чего вы это хотите делать. Может быть, просто для саморазвития, а может быть, вы хотите сменить род деятельности. Ответы на такие вопросы могут влиять на выбранный путь и детальность обучения, но можно попробовать наметить общие шаги.
Общая идея состоит в том, что вам нужно попробовать программировать и выучить хотя бы один язык, попрактиковаться, овладеть минимальным набором навыков, которыми обладает хотя бы младший (иногда их называют junior) программист. Где-то в этой точке у вас будет минимальное представление о программировании и о вашем желании продолжать двигаться в ту или иную область. Например, начать получать опыт коммерческой разработки. Это может быть либо фриланс (отличный вариант для тех, кто меняет работу, и не хочет уходить со старой, бросаясь в омут с головой), либо, если есть такая возможность попасть на оплачиваемую-неоплачиваемую стажировку (будет она оплачиваться или нет, зависит от того, достаточно ли у вас навыков и на каком они уровне, а также от того, в каком состоянии находится ИТ-рынок в вашем городе).
Начинать я бы советовал с языка Python. Это довольно популярный язык общего назначения. На нем пишут и серверную часть сайтов, его используют в академических исследованиях и этот язык в целом неплохо для прототипирования. Он хорош лаконичностью и простотой своего синтаксиса (по сравнению с другими ЯП - языками программирования). Несмотря на такую простоту, его активно используют в больших ит-конторах: в Яндексе, в Рамблере, в Мэйл.ру, в Гугл, в Яху и многих других.
Что читать по питону? Если у вас неплохой английский, то можно начать с Learn Python The Hardway. Она хороша тем, что рассчитана на совсем новичков - там описаны основные идеи: что такое интерпретатор, функции, переменные, в чем суть ООП, что такое юнит-тестирование, и как вообще происходит обработка запроса в веб-приложении. Это даст вам больше уверенности в продвижении дальше - не только благодаря теории, но и благодаря тому, что в книге много упражнений для закрепления теории. Не смущайтесь, если задания покажутся нудными - лучше проработать основы и набить руку (в как школе - на простых уравнениях), чтобы потом не задумываться о простых вещах.
Следующим полезным шагом была бы практика. Несмотря на то, что в вышеприведенной книге есть упражнения и их действительно крайне полезно делать, практика - всему голова, и ее не может быть мало, особенно на начальных этапах. Предположим, вы захотели попробовать себя в веб-разработке. Что делать дальше?
Попробуйте написать простейший веб-блог. Для этого вам пригодятся хотя бы минимальные знания того, что такое базы данных (БД), как они устроены и умение работать хотя бы с одной. Если их совсем мало или нет - вам поможет книга Мартин Грабер - Понимание SQL. После нее у вас не будет особых трудностей в изучении MyQL и PostgreSQL - две довольно популярных СУБД (системы управления БД). Еще вам будут полезны навыки верстки - в сети полно разных курсов, как платных, так и бесплатных. Достаточно будет минимальных, чтобы создать несколько страничек, откуда создавать и редактировать пост в блоге, выводить список статей, и так далее. По мере появления аппетита (если он начнет появляться) расширяйте идею и добавляйте новые функции - категории, комментарии, скрытые посты, регистрация в блоге, и так далее.
Когда напишите свой первый блог, освежите знания о том, что такое веб-фреймворки и ORM, для чего они нужны и как ими пользоваться. Начните с Django и Flask. Первый посложнее, второй попроще. Но первый, на мой взгляд, более монолитный, а второй - конструктор. Иногда конструкторы смущают начинающих.
Не стесняйтесь гуглить простые вещи, а когда не понятно, как делать, ищите так называемые best practices. Лучше искать на английском языке - информации больше, да и англоязычное сообщество часто бывает более дружелюбно. Ваш лучший друг на первых этапах поиска - сайт Stackoverflow.com. В программировании нужно думать головой, но не забывать про поговорку, что самый глупый вопрос - это тот, который не был задан. Постарайтесь найти свою собственную версию золотой середины между этими двумя крайностями.
После этих этапов вы уже будете иметь начальные навыки python, mysql/postgresql, минимальные навыки верстки (в целом для веб-разработчика полезным был бы еще и javascript). С таким набором у вас уже есть неплохие шансы найти оплачиваемую стажировку - иными словами, начать работать младшим программистом.
Если к Питону душа не лежит, если два других очень популярных языка для серверной разработки: Ruby и PHP. Первый используется еще в разных админских утилитах, второй - практически только в Вебе.
PHP имеет дурную репутацию языка с очень низким порогом входа, который прививает плохие привычки в программировании. Но это порождает долгие холивары среди программистов, поэтому нужно помнить, что это всего лишь мнение. Зато php очень распространен, почти в любом городе есть вакансии на нем. Обратной стороной этого является то, что у вас много конкурентов и не самая высокая зарплата (в среднем, программисты на python и ruby получают чуть больше). На php были написаны Facebook, Вконтакте, Badoo и другие сервисы.
Ruby стал популярен сравнительно недавно. У него хорошее и активное сообщество, которому много курсов. Часто его используют в связке с Ruby on Rails - это фреймворк, также как и Django, только для руби.
Если к Вебу душа не лежит в принципе, можно попробовать Java или Си. Это более сложные, языки, особенно для начинающих, но эта сложность дает вам лучшее понимание того, что вы делаете и что происходит с вашей программой.
Java, как было сказано выше, язык довольно популярный и хорошо оплачиваемый. Она используется в банках, для разработки различного корпоративного ПО, она используется для программирования на Android, она используется и как веб-серверная часть некоторых больших сайтов. По Java все хвалят "thinking in java". Кажется, на русский книга тоже переводилась. Чем актуальней вы найдете переиздание, тем лучше.
Си активно используется в программировании микроконтроллеров и встроенных систем. На нем также пишут приложения для десктопов в целом. И часто переписывают критичные в плане быстродействия части своих приложений. Если интересно - вы можете купить какие-то электронные конструкторы типа Arduino (хотя полно и их аналогов, ардуино просто были одними из первых и наиболее популярных), и поиграться с ними - помигать светодиодами, подключить к ним датчики температуры и другие, подключить железку к компьютеру и передавать на компьютер данные, как-то обрабатывать эти данные. А может быть, вы захотите потом эти данные показывать на комьютере, в веб-браузере? А может быть, вам захочется потом написать к этому и мобильное приложение? Кто знает. Вы найдете много хороших идей по теме "Умный дом". Как на специальных форумах, так и на Хабрахарбе - habr.ru. По Си очень полезны Керниган и Ричи. "Язык С".
Еще есть Objective-C и Swift - оба языка для программирования в экосфере продуктов Apple: iOS, MacOS. Первый постарше и посложнее в плане синтаксиса, второй - более новый, похож по синтаксису на Python. Чтобы писать под Apple, вам понадобится макбук. Проблемой обоих языков является то, что на русском языке по ним информации в разы меньше, чем по Java, Си или Питону.
Освоив Java или что-то от Apple, вы сможете заниматься мобильной разработкой. Это довольно востребованное направление на рынке сейчас, и мобильные разработчики часто получают чуть больше. Правда, мобильная разработка в основном востребована в городах с развитым IT-рынком (много айти-компаний, много вакансий).
Вполне возможно, что вы не захотите тратить много времени на обучение по книгам. Тогда вы можете пойти на курсы обучения программированию - такие есть и в сети - что-то типа видеокурсов. Есть курсы офлайн - когда вы приходите из занимаетесь с преподавателем в группе. Это дороже, но быстрее. Из хороших курсов вспоминается hexlet.io - там не так много, хотя вводный курс в Java и Ruby есть. Еще вспомнил курсы "Специалист" - specialist.ru . Несмотря на не выглядящий современным сайт, на фоне остальных курсов эти, на мой взгляд, неплохи. У них есть как онлайн обучение, так и офлайн.
Напоследок: если вы будете заниматься вебом, то вам может пригодиться умение работать с Linux хотя бы на уровне пользователя. Достаточно какой-нибудь Ubuntu, минимальных навыков работы с командной строкой и умения немного настраивать ее под себя.
Если вам будет казаться, что вы ничего не понимаете - не отчаивайтесь. Все когда-то ничего не понимали, никто не рождается с клавиатурой и мышью в руках. Если вы чего-то не понимаете - постарайтесь найти 4-5 объяснений одного и того же разными людьми - в разных блогах, на разных сайтах, и так далее. Как правило, этого достаточно, чтобы сформировать представление.
Учите английский. Большинство технической документации на русский не переводится, а если и переводится - то энтузиастами. Английский позволит вам читать самые актуальные книги, задавать вопросы на англоязычных форумах, что открывает вам доступ к намного большему количеству людей, которые смогут вам что-то подсказать. Если вам непонятны какие-то термины - не ленитесь гуглить, что это такое. Это не только расширяет кругозор, но и помогает вам лучше понимать материал.
Не ленитесь все примеры из книг и задач печатать руками, а не копипастить. Чем больше вы пишете кода сами, тем лучше.
Не спешите гнаться за теми технологиями, которые модны и актуальны прямо сегодня. Многие из них через два года признают неправильными и все забудут. Лучше начинать с чего-то, что уже давным давно признано чуть ли не классикой (но не заброшено и развивается).
Полезно также будет узнать про системы контроля версий (VCS). Достаточно и git (по моим наблюдениям, он чуть более распространен), но hg тоже полезен.
Не стесняйтесь ходить на айти-конференции в вашем городе, если они есть. Есть еще разные User Group-ы. Для линукса, для джавы, и так далее. Так вы приобретете полезные профессиональные контакты и сможете найти первую работу программистом.
Держите в голове идею, что в программировании нельзя один раз выучиться и все. Вам придется постоянно обновлять свои знания, потому что IT - это быстроразвивающаяся отрасль. Иногда для того, чтобы держать себя в тонусе, достаточно просто читать книги и новости, а иногда полезно сделать свой pet-project (еще их называют side project) - просто для себя. Такие проекты особенно хорошо и интересно делать, чтобы решить какую-то вашу собственную задачу.
Если вы хотите учиться программированию, чтобы найти работу в вашем городе, будет полезным изучить вакансии и технологии, которые там указаны.
Помните, что упорство и практика - два самых важных инструмента. Сразу после головы, конечно же. :)
В общем, удачи!
Лучший ответ на этот вопрос!
В самом начале пройдите несколько курсов на codecademy.com - это поместит вас в контекст и развлечет :)
Курсы по программированию разных университетов можно найти и на coursera.org (некоторые даже дают сертификат).
Если вы хотите стать серьёзным программистом, то нужно начинать с основ программирования. Для обучения программированию лучше всего подходит Паскаль
Visual Basic? Серьезно? Это смешно
Все курсы - это такой же развод, как и бизнес тренинги. Если хотите научится, Вам, мой совет: самообучайтесь и тут же практикуйте. всё. Наиболее легковоспринимаемые языки со строгой типизацией.