Как правильно думать над решением задачек?

Старайтесь всегда думать над решением задачки не в терминах синтаксиса языка (циклы-условия-переменные, как-то их комбинируем, пытаясь "угадать" решение) -- это плохой способ, а естественно, как если бы вы рассказывали её решение кому-то, кто вообще не знаком с программированием.

Например, надо выделить из строки длиной N подстроку длиной M, начиная с заданного символа (позиции) I.
Как вы это объясните первокласснику? Представьте, что у вас есть цепочка из N шариков, и вам надо выделить из неё последовательность длиной M, начиная с заданного шарика I, и поместить её в другую цепочку. Вам достаточно последовательно брать по одному шарику начиная с I-й позиции, и по одному перекладывать в итоговую цепочку, и сделать так M раз.