Many programming problems can appear very complex, but it helps a lot to break the problem down to smaller chunks, which can be understood more easily.
Upon breaking down the problem, the solutions to each component piece appear relatively simple.
Remember that all this is happening at a conceptual level. It is crucial to conceptually break down the problems and find solutions before actually going ahead and implementing anything.
Then one needs to conceptually put the smaller solutions back together and grasp the solution to the whole problem.
Thus, many problems can be solved with looking at it as simple sub-problems with simple sub-solutions.
It is a way of applying first principles to programming.
Then the fun of implementation begins…