When you are sitting and looking at a blank screen, why are you stuck? Is it a problem with comprehending the problem, or a problem with breaking it down?<p>This is what works for me:
1) get general understanding of problem to solve
2) break it into steps or pieces
3) code pieces<p>Now, 2) might (hell, might? probably will!) reveal step 1) wasn't complete, so go back and improve your understanding, then move back to 2)<p>Over time you develop the ability to do a 'top down' approach like this, while also having a parallel 'brain space' that considers application architecture, customer requirements, good programming practices and so on.<p>Besides this 'concept of programming' (which is very personal, I'm just sharing how it works for me after ~20 years), don't give up and don't feel overwhelmed. In my experience, except for very rare 'super-programmers', good software is developed slowly, steadily, and built up one solid piece at a time. Break your 'useful program' down into pieces, and celebrate the achievement of developing (and testing!) each piece.<p>It gets easier (and then harder, but it gets easier first). :^)