#2 is your key problem. You do not know how to learn.

As a developer, "I am but an egg". Much of the advice offered seems good, but I fear it may reinforce a key problem. It seems to me that you are trying to model the external attributes of great programmers. For example, you judge yourself based on your inability to remember command line commands. But while remembering this stuff is surely a trait of many great programmers, it is by no means essential. And those that have it, got it by accident, through their hours at the command line, not by trying to memorize all the commands.

Dude, you could learn C or Python or assembler or whatever, and I'm sure it will help, but it won't get at the core problem. The key internal attribute of a great programmer is the ability to think, and to learn. These are what you must seek. Learn algorithms or data structures or whatever, but always be learning how to learn and think.

You have had a lousy education and probably never had great teachers. This is not necessarily your fault. You must learn how to think. And this is a very hard thing, many people never do. I'm not sure of the best way to go about it.

One important thing is to trust yourself, even knowing that in your limitations, you will screw up. This is okay, if your choices are based on some clear thinking, and you can later assess that thinking for its mistakes. Because that is how you will learn.

Another is that you can learn to learn in all sorts of places. You needn't do it only at programming. Do you have hobbies doing things that come more naturally to you, or that seem simpler? Spend some time working to become great at those. You will learn problem-solving and gain confidence, and relief from the stress and exhaustion of work. Be curious about everything.

Another is to focus on principles. I suspect that Java and Windows aren't so good for this, but as an egg, I can't say for sure. I suspect open source tools are better places to learn principles. But don't try to sound like a great programmer, learn to think clearly and elegantly about programming.

Another is to start simply. Don't try to be a great programmer, don't try to do things beyond b/c that's what the great programmers do. Become able to do simple things, elegantly and properly, and then become able to do more things.

Be willing to take a step back. Maybe these Java jobs pay more? But if you aren't learning, they aren't paying anything near enough. Find a job where you can grow, and never mind the wage, that will come in time.

Understand that confusion and frustration are natural and necessary to learning. Learn to distinguish good confusion, which can lead to progress, from bad confusion, which leads nowhere. But confusion does not mean that you are stupid. If you'd had a proper education, you would understand that smart people are confused all the time. They just aren't panicked by it, because they know it signifies little about themselves, and that they will, in time, pass through it.

Take heart. Humility is a door to learning; despair is a door to nowhere. You can get there. We are all learning, many of us are still trying to recover the time we lost to mistakes and accidents. My God, if you knew what I'd give to get back the time I have wasted . . . . Find ways to enjoy today, even as you aspire to be more tomorrow. Put little bits of beauty and color in your life, always find ways and times to laugh, eat well occasionally, watch some good movies, read some good books. Frodo saw the flowers growing in the vandalized statue, Sam saw the stars above the murk of Mordor, and they knew that there was some lovely and grand above their misery, against which the misery could not forever prevail. Now maybe that's a little melodramatic, but you have to see the glimmers of hope, and know that you're hoping for something so much better that it must be possible.

This is crucial. Even if you start to learn, you are going to be in confusion and frustration for a long time. If you don't find a way to find joy in your days, it will be a long, hard slog, and you risking exhausting your spirit before you get there. "As they go through the bitter valley, they make it a place of springs". You have the courage to admit your shortcomings and the initiative to address them, this is more than a great many people. If you keep at it long enough, you will become something really special. But it's going to be a lot of work. Find moments to refresh yourself, and never, never, never give up.

Godspeed.