Вспоминаю былую профессию. Читаю ныне книгу "Песни о Паскале". После прочтения главы делаю задачки. Дошёл до пузырьковой сортировки. Уже начинаю появляться затруднения. Вот пример задачи после главы:
Напишите программу для сортировки фамилий учеников в алфавитном порядке
(фамилии берутся из файла). Программа должна сортировать их как по возрастанию,
так и по убыванию фамилий, - на выбор пользователя
В голове уже созрел алгоритм: создаю файл, вбиваю туда фамилии учеников, объявляю массив, нужные переменные, пишу процедуру для чтения массива из файла, пишу пузырьковую сортировку для сортировки фамилий. Но моё решение в корне отличается от того, как решил автор книги. Мало того, что моя программа не работает, так ещё и хрень какую-то написал.
Собственно вопрос: как научиться решать задачи? И, самое главное, как догадываться до какого-то решения: до конкретного действия и что в принципе следует делать для решения задач/подзадач? Вроде кажется, что понимаю после чтения главы и решения задачек, но стоит встретить чуть более нестандартную задачу - и мой мозг говорит мне: "Пока, чувак"...
"И опыт, сын ошибок трудных..."
(А.С.Пушкин)
Что касается того, что
" моё решение в корне отличается от того, как решил автор книги"
- вспомним Киплинга
"Девяносто шесть дорог
Есть, чтоб песнь сложить ты мог,
И любая - правильна, поверь"
Любую программистскую задачу можно решить множеством совершенно разных способов. И то, что ты решил задачу иначе, чем автор книги, абсолютно нормально. Ну а то, что твой код неправильно работает - так опубликуй его, чтобы мы могли указать на твои ошибки. Наличие ментора (даже в виде ответов на Ответах), проверяющего твои решения и указывающего на твои ошибки - самый эффективный способ обучения.
Чтобы научиться решать задачи, надо решать задачи. Но не сами по себе, а параллельно изучению алгоритмики и дискретной математики, дающих теоретическую базу, необходимую для решения задач.
P.S. Задача программиста - видеть разные способы решения задачи и уметь выбирать из них наиболее подходящий для данных конкретных условий. Посмотри, например, раздел сортировок в учебнике Вирта: он учит именно сравнению множества разных алгоритмов.
ИМХО, тут нужно больше практики. Больше решай задач. Изменяй их, "играйся" с ними: пробуй сделать что-нибудь своё. Твои проблемы решаются именно путём регулярной, непрерывной и разнообразной практики.