In the style of this question: http://stackoverflow.com/questions/3257749/ok-so-im-not-a-beginner-anymore-what-comes-next
I've been programming in Java SE for a while now, so how do I move beyond the "beginner" stage to be a more successful and useful programmer?
Stop asking yourself if you are a beginner or not and just get on with the coding :)
The day you will attack (I really mean 'attack') a problem - and resolve it - in a way that outdoes many (if not all) previous designs and implementations...
... this day, you will see yourself as something else than a beginner - EVEN IF you are still a beginner in every new area that you start working on for the first time.
30 years ago I started with 'small' projects like a GUI, a 3D engine, OCR, pencil-signature recognition, etc.
Simplicity of design, conciseness of the code, efficiency, clarity - all these symptoms will confirm your skills.
My latest program, a Web App. Server with ANSI C scripts is something like 5,000 times smaller in footprint than IIS + C#... and 5 million times faster (see my homepage).
When your work outdoes the world leader in software, then you are no longer seen as a beginner.
Yet, one year ago (before I started this project), I was a total beginner in Web development (and I still feel that I have to learn a lot in this matter).
So, to sum it up: being a beginner is the best thing that can happen to you - as long as you know how (and enjoy) to cure your ignorance.
Read the book Effective Java [1] - it will teach you good practices and open your eyes to a number of pitfalls in Java.
The book Java Puzzlers [2] (by the same authors) is also good.
[1] http://java.sun.com/docs/books/effective/Try to reinvent existing big wheels. Try to reinvent an ORM [1] like Hibernate. Try to reinvent a webserver like Tomcat. Try to reinvent a (webbased) MVC [2] framework like Wicket or JSF. Lot of lessons and fun guaranteed. Reflection, Generics, Caching, JDBC, Collections, Sockets, I/O, Concurrency, Design Patterns, etc, almost everything is involved.
Whenever you stucks during reinventing, peek a bit in the sourcecode of the widely used and well known project (most of them are just open source) to take a look how they did it and learn from it.
I did it as well and I learnt a lot.
If it might happen that your wheel is actually more superior than the existing wheels, you may do yourself and the world a benefit by bringing it into public.
[1] http://en.wikipedia.org/wiki/Object-relational_mappingNext step would be learning to use the search box to locate questions others like you have asked before about things that interest you and study the answers.
My experience is to know "best practice" of programming in the language.
Know what is good way to code and what are bad ways to code. Also, look into the language API's source code to see how it implements and start thinking the efficiency when writing methods.
Probably the hardest bit is getting a job where you get all the time you need to learn things and to improve your code. I was lucky I got an internship and was left free to my own devices for half a year - that's where I learned most.
Building Skills in Object-Oriented Design is a great book, written for either Java or Python, that teaches object-oriented skills. Any Java programmer should read it.
It's available free online:
http://homepage.mac.com/s_lott/books/oodesign/build-java/html/index.html
Have a friend make up a project for you, including requirements, etc. When you're 80% through, have him change 40% of the requirements to be 5-40% different than they were when you started. Remove some and add some new ones.
Evaluate how you and your code cope with this change.