Будем предполагать, что Ваша цель не просто изучить программирование, но и научиться решать задачи. Это означает, что Вы вероятно хотите получить в дальнейшем какую-то пользу от своих новых знаний и навыков, а не просто убиваете время. Сразу должен предупредить, что это потребует во много раз больше усилий, чем простое изучение синтаксиса и лексики С++, урду или клингонского языка.
Нам понадобится не только хороший учебник, но и хороший задачник с системой автоматической проверки. Ещё для занятия потребуют довольно много времени. А значит иногда придется работать не за привычным компьютером с установленной средой разработки, а с планшета или телефона. Предлагаю воспользоваться таким комплектом:
- В качестве учебника возьмём книгу Липмана или Прата. — СКАЧИВАЕМ
- В качестве задачника и тестирующей системы используем сайт e-olymp.com. — РЕГИСТРИРУЕМСЯ
- Вместо установки на компьютер компилятора и среды разработки воспользуемся облачными технологиями через одну из простых онлайн IDE: IdeOne, TutorialsPoint C++, jDoodle. — РЕГИСТРИРУЕМСЯ при желании.
- В качестве справочника стоит выбрать сайт cplusplus.com. Те немногие английские слова, которые придется запомнить для чтения материалов сайта в дальнейшем будут встречаться постоянно. — ИСПОЛЬЗУЕМ
Более подробные рекомендации и важные дополнения можно найти здесь.
Вы наверняка заметили, что в качестве языка программирования я без долгих пояснений выбрал С++. Вокруг выбора первого языка для начального изучения программирования ведутся бесконечные споры. Я не хочу даже пытаться включиться сейчас в эти святые войны. Хотя признаюсь, я не считаю, что у Вас в этом вопросе реально есть какой-то выбор. Даже если вам придется в дальнейшем перейти, например, на Java или C#, попытка использования С++ вероятно будет вполне рациональным расходованием времени.
Начинать следует с чтения учебника. Все понятные вещи стоит тут же попытаться закодировать и проверить на примерах. Если что-то не поняли, то тем более стоит попытаться закодировать. Прочитав две-три главы стоит взяться за решение задач. Я рекомендую прочесть этот текст и решать задачи по приведенному в нем списку. Здесь Вас будет ожидать неприятный сюрприз — во многих задачах придется много думать не о самом программировании, а о задаче. Не спешите писать 100500 строк лапшеобразного кода — подумайте. Практически все перечисленные задачи решаются в несколько строк.
План решения задач может быть таким
1. Линейные вычисления (184)
2. Программы с ветвлением (235)
3. Циклы (284)
4. Потоковая обработка (123)
5. Массивы (123)
6. Многомерные массивы (106)
7. Строки c-string (58)
8. Строки string (100)
9. Последовательные контейнеры (41)
A. Сортировки и жадность (17)
B. Стеки-деки-очереди (52)
C. Ассоциативные контейнеры (13)
D. Графы (56)
E. Дерево отрезков (18)
F. Динамическое программирование (22)
Спортивное программирование (19)