Java’s branch into web programming is JavaServer Pages and in my opinion it is too out-of-date to find a sustainable income in supporting. It was built as an answer to classic ASP and PHP, and as classic ASP is dead and PHP is a zombie being constantly revived by its undying support I think it’s safe to say that if you’re starting out you need to start out with a proven language with jobs.
If you want to be a straight-up programmer on desktop applications then from what I hear Java is still the big king when it comes to jobs. A lot of the people I graduated with ended up as Java code monkeys and still are.
I am a ASP.NET/C# developer by trade, and I landed my job simply because I was one of very few graduates who came out of university with work experience with C#. If anything, I’ve found that the .NET work pays better for graduates, and has a sustainable future with Microsoft investing a lot of time and energy into turning it into a great language. It’s a fantastic language to use, and I would highly recommend it.
There are a ton of other languages out there that have a good working future. Python is a fantastic language that really needs more support, and whereas there aren’t loads of jobs in it the companies with the sense to use it for their products will often be a lot more fun to work at.
However, I must be frank in that most employers will expect a degree, and certification only exists to improve ones knowledge. I’d say that less than 1% of employers will care about certification, whereas at least two thirds of them will care about degree-level education. The best advice I can give you is to learn for fun, but if you’re going to spend money on education then invest in a degree. It takes time and it is costly, but you’ll be a better person after it, and a lot of jobs and degrees will allow for part-time study. During my time at university there were many mature students studying part-time, and most of them loved their time at university and left with good degrees and entered the workforce in good jobs. One guy I knew who was 56 when he finished is now a manager, after six months in an entry-level position at HP.
Programming is one of those jobs where you’ll always be better in a couple of years. When I look back on code I had written six months I almost feel sick when I see unnecessarily complicated code, or when I had hacked together a solution for something that already had a library available.
Programming is a thankless job, and nearly everything you tirelessly build will be obsolete, broken or unused very soon after you finish the project. Also, programmers have an almost brutal requirement to continuously learn and put faith in new technology. As a result, you’re always learning, and eventually any vocational knowledge you gain from learning is completely useless.
To answer your question, you know you’re a good programmer when you can sufficiently do your job, whilst being able to continuously build your skills to become better at it.