I know that the answer is pretty clear because you get better on everything with time and experience. But I'll tell you where I'm coming from:
A couple of months ago I decided to learn iOS development, so I studied C (read the C primer plus book, pretty good book). Recently I finished "Programming in Objective C" and lately I started following the Stanford course for Winter 2013 (I'm really enjoying it. I'm only at the beginning of the course, on lecture #3, and had to do only 2 homeworks).
I understand all the syntax and concepts so far, and I think Objective C is an amazing language. But something has been bothering me, I thought it might be because I'm new to OOP. For example when the instructor defines models (matching cards game for instance), I definitely understand the syntax and logic, but sometimes I'm trying to think if it as taking a task (card game for instance) and breaking it into the right logic. Is this something I will get used to with time? Because at this stage when I try to predict things I'm supposed to do, pretty often I go and see some of his logic and go back to code. Actually we haven't had to go from zero, he always tells us to follow the presentation with the code in this stage, but I really want to improve at taking a task and knowing how to break it into the right models, controllers, etc.