Background: I'm 27, have an A.S. degree in Information Technology Management (it was basically a network admin program with some web design and a database class). I've had several jobs in a few years, all of which have been as a sole programmer/IT Guy and maintaining existing code (among other things), without writing anything new. I'm largely self-taught, having been tasked with building an online knowledgebase while working as helpdesk/network admin my first job out of college and picking up VB.NET, then C# as a result. I've never worked on a team, except once in a while when the company I worked for sent programming work to India to save money and I've had to coordinate with the programmer(s) there every so often. Even then, it wasn't collaboration it was just discussions through email or Skype.
Now the problem I face is, to be brutally honest with myself, that I think I'm a hack who can't cut it. I know a smattering of .NET, but I just can't seem to wrap my head around doing things. I've tried to learn Ruby on Rails, and I get caught up in how to explain what I want. I can hack together things that kinda sorta work, but I want to be a real developer. I feel like Pinocchio, basically: I tell myself that I'm a real programmer, but I'm not. Now I have a job at a startup where I'm sort of an analyst, but still have to do coding once in a while; I had thought that being an analyst was the best career move for me since I think I'm a horrible coder (but I know enough to speak "tech") but I have no formal training in being an analyst at all, because I've only been a maintenance programmer and there was no analysis done whatsoever due to ignorant management, nonexistent requirements, zero budget and a "We need this yesterday" deadline. I launched an application for it using Ruby on Rails, but I don't feel as though I learned anything while doing it. My boss keeps telling me his grand ideas and how he wants me to help him create specs for it, but I feel like we're both just putting up a facade since I'm not confident in my ability to come up with specs for anything, and I don't have the time or opportunity to learn how to do it right. In my spare time I've been trying to launch a web-based application that I feel has market potential, but my lack of self esteem and the feeling that I'm not a good enough programmer to write anything keeps me from doing anything with it beyond a few trivial classes; I'll start to think of what the application needs, and before I know it I'm spiraling into complexity and asking myself "How the hell am I going to be able to write this? I don't know how to program X/Y/Z!"
So on to the actual question, if you can call it that: How do I go about improving myself so I'm not stuck in the mindset that I'm a lousy programmer and that I can't write anything beyond basic tutorial-level apps? Every time I try I get totally sidetracked by thinking of how complex it is or how "x" doesn't make sense to me, and after that I just abandon the project as a failure and think even less of my abilities. Most of my time is spent worrying about how I'm going to solve problem X, or trying to decide which platform I want to use because sometimes X seems easier, and then when I run into a problem with X I change my mind and look at using platform Y. I sometimes look for junior level programming jobs in a "real" development environment (e.g. a team of programmers, specs, best practices) but A) I'm deathly afraid of leaving what amounts to a cushy job where I'm friendly with my boss in the event something doesn't work out, B) I'm deathly afraid of not being "good enough" and getting fired, and C) I don't even think my meager programming skills and small education are enough for a junior programmer position.
And it's not like I don't try to improve myself: My bookshelf is filled with programming books on using Language X or Framework Y, as well as more generic books on software development. Firefox has bookmarks to dozens of sites with tutorials and screencasts. My iTunes has podcasts that discuss software best practices. I spend hours working through tutorials, but I feel like I'm not learning anything and just copying from a textbook; the minute I try to apply what I've just done to another application (even one similar) I either choke and can't figure out what I need to do, or I find that I have to go back to the tutorial and copy/paste the code before tweaking it, and then I still feel like I'm just cargo-culting.
I really wonder if this field is for me, but I haven't done anything except IT/programming.