Лучше начать с чистого Си, потом прокачавшись погружаться в ООП и Си++, Си#.
Книг куча.
Просто берешь и пробуешь, программируешь, ищешь ошибки, исправляешь, дальше кодишь.
На начальном этапе обратить внимание на структуры данных и алгоритмы, математику, дискретную математику. По этим темам тоже куча книг. Прям так и гуглишь, будет много полезного в результатах поиска.
Постепенно наворачиваешь и усложняешь себе задания, пробуешь. Пытаешься использовать шаблоны, библиотеки, паттерны, смотришь чужой код, учишься его читать и брать для своих примеров.
После минимального опыта хорошо поучаствовать в бесплатном проекте каком-нибудь, пусть на гитхабе в каком-то сообществе. Или самому с друзьями замутить проект на том или ином языке.
Проект не для того чтобы заработать денег, а для того чтобы учиться и повышать свой уровень.
В соцсетях много групп, где организуется совместная разработка, организуются новички.
В качестве книг - гуглите по каждой теме КЛАССИКУ. Самое то! От Кернигана и Ритчи, до Буча и Шилдта....