Многие вероятно интересуются, с чего начать обучение программированию. И именно поэтому я подобрал немного информаци.

Введение.
Эта статья не про выбор первого языка(несмотря на самый большой пункт тут).

1) А надо ли мне это?
действительно, советую хорошо подумать
Кто-то из KISS говорил примерно такое по смыслу "Если кто-то говорит, что он взял гитару и играет ради музыки, а не для того, чтобы заваливать телок, то это гон, можете плюнуть ему в лицо!" Тут заменяем телок на стабильные(хоть и небольшие) деньги, а музыку на кодинг =)

2) Для чего?
Собственно вопрос с подвохом. Ибо правильно ответят лишь немногие(и это будет совпадением).
А дело в том, что человек сам не знает, чего хочет. Да и как правило одним языком не заканчивается.

3) Определение первого языка для обучения. Эта часть займет около пары часов.
Есть 2 варианта: взять актуальный язык, либо язык типа паскаля или бейсика: которые не применяются.
Кто-то может возразить: мол Delphi или VB.NET. Разочарую их: Delphi и паскаль не имеют ничего общего кроме небольшого сходства в синтаксисе. Для VB.NET и BASIC оно и того меньше. И подходы в программировании абсолютно разные. Это все равно, что изучать C++, начав с книги по C. Но об этом поподробнее потом.
Однако хочу дать заранее совет: не стоит начинать с низкоуровневых вещей, т.к. при обучении программированию придется уделять не только алгоритму, но еще и работе с указателями, выделением памяти и прочими "вкусностями". Именно этим "страдают" C/C++/asm. Поэтому я бы не рекомендовал начинать с них - наверстать можно будет и потом(ну если конечно это будет нужно).
Итак, что у нас остается: Java, .NET(C#, VB.NET и подобные языки, распространено в основном в США), Delphi(только в бывшем СНГ, на общемировой арене это очень редкий зверь). и скриптовые языки: Python, Ruby, Perl. Так же существует PHP, однако для его изучения надо уже иметь теоретические(и желательно практические) знания о работе веба, многие этому не следовали, а что из этого получалось, можно узнать на phpclub.ru, посмотрев на тупейшие вопросы в основном разделе их форума).
Сам бы я посоветовал Python или бейсик. Кстати их объединяет одинаковая типизация: dynamic, strong. Кстати хочу заметить, что именно strong типизация позволит минимизировать количество логических ошибок.
Языки со strong-типизацией: Java, C++(именно C++, а не C), .NET языки, Python, basic, ruby, delphi. У C, Perl, PHP типизация weak(слабая).
Подробнее читать про конкретный язык в википедии(wikipedia.org).

4) Итак язык выбрали, с чего начинать?
С самого начала. По мере изучения языковых конструкций пробуем применять их на практике. это не сложный этап, однако именно на нем отсеивается большинство. И проблема с нехваткой материала для тренировок. Пример задачки(задача 1) можно увидеть в приложениях.

5) Допустим, выучили мы синтаксис. Ну или почти выучили. Ведь некоторые языки типа бейсика, C, Pascal или Java можно выучить(имеется ввиду только синтаксис, причем без magic-фишек) очень быстро. Но вот научиться применять его - намного сложнее.
Эта часть похожа на изучение поведения сферического коня в вакууме. Потому что на примерах ее изучить практически нельзя. Отложим этот этап.
Итак, добро пожаловать в реальный мир!

6) Чем отличается реальная задача от задачи из задачника? Правильно, тем, что она реальная. Для примера возьмем такую: написание программы для сортировки мейлов в файле. С графическим интерфейсом.
Что понадобиться знать? Работу с файлами, работу с GUI. Изучаем. Пишем. И перед нами уже начинает возникать проблема. Подробнее о ней немного дальше.
И именно на этом этапе начинаем изучать стандартные библиотеки языка/технологии. и не только стандартные.
Кстати, на этом этапе уже можно начинать зарабатывать. Однако качество продуктов будет хреновое
Решаем задачу 2(в приложениях).

7) Насчет проблем из пункта 5. Если работу с файлами можно сделать по принципам структурного подхода, то уже работа с GUI в этом стиле будет сплошным мучением. Итак, изучаем ООП. Именно практическую часть, т.к. в пункте 4 теория уже была выучена. Этап занимает достаточно много времени.
Именно по этой причине я не советовал начинать C++ с C, а Delphi с паскаля: переучиваться будет сложнее, чем начинать  заново.
То есть учим теорию: ООП(нужно много практики), которая плавно перейдет в ООД, естественно надо будет знать паттерны, UML, принципы разработки и т.д.
Так же больше работаем на практике: регулярные выражения, работа с БД и SQL, GUI, сокеты, высокоуровневые протоколы, такие как HTML, FTP и всякие xmlrpc и SOAP, набор технологий XML и прочие.
Решаем задачу 3(на выбор).

8) Что дальше?
Совершенствуем свои навыки. Ты уже будешь сам знать, что тебе дальше делать.
P.S. Хочу заметить, что литературы на русском языке для тебя станет не хватать. Вообще. Так что знание английского обязательно. Именно обязательно, а не желательно.

И пару нюансов:
1) Практически для всех языком имеются свободные рабочие места. Ну кроме раритетных или специфических.
2) И вообще, если заказчику нужен готовый продукт, то ему, как правило, монопенисуально, на чем написан продукт.
3) У каждого языка своя направленность. Поэтому тупо применять к примеру PHP для написание клиентских приложений с GUI, а на ассемблере писать сайты или СУБД.
4) Заработок не зависит от языка/технологии, а только от уровня профессионализма.
5) А если занимаешься низкоуровневым программированием, то про ООП - не на твой счет.
6) Есть такое заблуждение: "Программист - это тот, кто умеет составлять алгоритмы". Так вот: умение составлять алгоритмы - требование обязательное, но не достаточное, на этом дальше 5 пункта(в этом обзоре) не уедешь.

Приложения:
Задача 1 (уровень: продвинутый школьник)
Старая задачка, обычно на школьных олимпиадах ее дают:
Имеется матрица (n*m) заполненная 1 и 0. Единицы - это острова, а нули - море. Если единицы находятся рядом по горизонтали или вертикали - то они образуют один остров. Найти количество островов.
P.S. Естественно могут быть "гнутые" и "дырявые" острова.
P.P.S. Как не странно, но решают ее редко, хотя она достаточно легкая.
Задача 2  Написать аналог wget.
Задача 3A  Написать [цензура]-парсер. Естесвенно не тупой подстановкой регекспов.
Задача 3Б  Интерпретатор/HTTP-сервер/etc на выбор.