your post and the resulting discussion was very interesting to read, and the main message I guess is that if you want to become a good programmer, the only way is practising a lot (which I totally agree with!). I have started programming about 6 years ago, with simple dos batch files, then did some shell scripting in linux and some perl, moved on to building my own website in html, and later php, then worked through an openbook that taught me the basics of c, and started programming in java about 4 years ago. The scripting stuff I mainly did at work for automating stuff (I am an engineer in automotive) but when it comes to build a more complex application in java I can only do it for the fun of it in my free time.
At the beginning I found it rewarding enough to just see how something I put together actually worked like I wanted it to. But for about a year or so by now I am starting to be frustrated because I don't see that anybody actually uses the stuff I build. I was planning on building engineering tools and putting them on the web for free download, but after doing some research I became reluctant to do so because it seems that there is no way to build an application without infringing dozens of patents, and eventhough the risk of being sued might not be that high it just doesn't seem worth the risk.
So I thought ok then I will just contribute to some open source project but found that the ones that would actually interest me in terms of their topic tended to be too high above my qualification for me to want to join in.
So I thought then I probably just have to make a career change and apply for a software developer position, but nobody wanted to hire me because I had no professional experience in software development. Well to be honest I actually got one offer but the package was ridiculous, so I couldn't really resolve to accepting it. I mean money isn't everything put at the end of the day that's still what you're going to work for, so...
Anyway, maybe I am writing too much. I guess what I am really getting at is that I am a bit out of ideas how to continue at this stage, and I am hoping that someone reading this has been there and has a good advice for me...
Hi decker, I want to address your concerns directly, and feel free to contact me if you'd like. As you can likely imagine from my postings I have been programming for a long time, and I have struggled a lot as well. I have been part of start-ups, open-source projects, and professional development teams. I have likely done a lot more on my own than with any particular group. I try to learn new things in everything that I do. When I start a new language, it takes a bit, but practice is what gets me from point A to point B in the end. Often I set goals for myself. I sounds to me like you have done a lot of that. Don't get discouraged. The programming part of IT is not extremely competetive. There aren't many who would be professionals out there. But becoming a professional programmer takes more than schooling. You must be willing to sacrifice free time to get good. You might need to sacrifice money, benefits, or perks for a while as well. However if you can put yourself in a decision-making role, and you can make good decisions, then you will get far fast. Aside from programming however you should also learn software architecture, programming theory, design patterns, and best practices and programming patterns for each language you learn. There are some things you can use across languages. I follow a lot of teachings from Code Complete
in my programming to provide for clarity. Each language has patterns that you are meant to follow however, and it is a good idea to learn those.
As for open-source projects, you won't ever know how much you can really do until you try. You can also create a programmer profile on places like SourceForge.net and Java.net so that others can find you. LinkedIn is a good place to do real-life networking, and who knows? That alone might land you a programming job. In job searching be willing to jump through any loops your possible future employer might put you through. That is how they filter out people who aren't serious. For example somebody may want you to do a take-home project, or online testing based on various programming languages that you may or may not know. Do try all of these, and don't cheat, because you are timed. If you don't know something give it your best guess. In one example, I was hired because I took a reasonable amount of time on my answers even though I missed some things, and still I was hired over another programming applicant who took several hours to take the test, but got 100%. That programmer likely cheated on his tests, and thankfully my interviewers realized that.
Finally if you would like to collaborate with me on something, then I would be happy to do so. It may take me some time to respond to an inquiry, so please be patient. Good luck.