Something I've always thought of as a truism, but I don't think anyone brought up yet - apologies if they had and I missed it. (I got pointed here via hairyears's journal, by the way.)
A lot of what it seems to take is practice - working up through successive layers of what looks like a large project to you at the time, crowbarring open your mind-space and ability to handle state at the same time you acquire techniques, confidence, and muscle memory. So if you haven't done that, if you're jumping straight from utility scripts or the like to the large programs your training and/or skills theoretically fit you for, you're going to be in trouble.
I'd argue that the problem isn't a programming one, it's a workflow and design one. You start with a large, currently insufficiently understood project, and break it down into interacting mapped-out chunks, and you write those, but if you miss out any of those steps something goes wrong, and if you do them then - given a certain amount of basic programming competence as a starting point - the techniques take care of themselves. It may well not be the best possible result, but you'll get something that works and can be improved on out of it.
I haven't written anything particularly large, but I'd put that down to a combination of not having a "hook" to get me started and not having the sustained energy to get a firm foothold on the particular set of learning curves that the projects I was thinking of require.
A lot of what it seems to take is practice - working up through successive layers of what looks like a large project to you at the time, crowbarring open your mind-space and ability to handle state at the same time you acquire techniques, confidence, and muscle memory. So if you haven't done that, if you're jumping straight from utility scripts or the like to the large programs your training and/or skills theoretically fit you for, you're going to be in trouble.
I'd argue that the problem isn't a programming one, it's a workflow and design one. You start with a large, currently insufficiently understood project, and break it down into interacting mapped-out chunks, and you write those, but if you miss out any of those steps something goes wrong, and if you do them then - given a certain amount of basic programming competence as a starting point - the techniques take care of themselves. It may well not be the best possible result, but you'll get something that works and can be improved on out of it.
I haven't written anything particularly large, but I'd put that down to a combination of not having a "hook" to get me started and not having the sustained energy to get a firm foothold on the particular set of learning curves that the projects I was thinking of require.