The other day I was thinking about a conversation I had about the way relationships can (and do) get so complicated. But back in school, life was simple. You go to school, come home, do your hw, and pretty much have fun the rest of the time.
Of course back then it didn't seem simple. It felt really complicated. But that's the way it always is.
Seeing the pattern makes things simple.
That's exactly how it is in programming and it applies to life. When you're writing a big program, you write, you write, it's complicated, complicated. ...But after a while, you start to realize, I've written something just like this before. You go back and find the other code you wrote, and sure enough, it's the same thing except for some details. Details that can be abstracted over — creating a function or a template that can be applied in specific instances, depending on the details of the situation.
That, by the way, is the reason why people who learn (and really get) a functional language like Lisp or ML are so die-hard about it. Languages like that let you abstract over pretty much anything.
But you have to see the pattern first.