How to Become a Java Guru
I'm probably preaching to the choir here, but hear me out just in case. I'm not speaking from the position of having already achieved guru status, but I think I've got a handle on the path to get there. Correct me if I'm wrong.
Find some giants, and stand on their shoulders, to co-opt Isaac Newton's famous quote. I don't mean this as a way of keeping someone else down, but instead building upon their insight and work. Become aware of what's offered in the Java libraries you work with, be it J2EE, J2SE, or J2ME. There's lots of good stuff in there that often gets overlooked. Case in point: the other day I was doing a methodology exercise of breaking a feature into individual tasks. The feature was logging into a J2EE application. Out of about six groups particpating in the exercise, mine was the only one that had a tasks of learning the basics of JAAS (Java Authentication and Authorization Service) and configuring it in the appserver. All the other groups were ready to write their own custom login logic. I've never used JAAS before, but I've read an overview and knew it was commonly supported in J2EE containers (It's actually now part of J2SE 1.4.) and was specifically intended to be a reusable login service.
Now, the first time learning and using a new API may not save you any time over a scratch custom implementation, but it will save time the second and subsequent times you need to use it. Think over the long term about all these APIs you've had some experience with and how much faster you can do the well known pieces of your application. That frees up more time to work on the truly unique aspects of the particular application. Not only that, but coworkers will notice your experience and start coming to you for advice and you'll be able to help the speed of your entire team.
The real key is having an awareness of what's already been written. There's several ways of doing this. For the official stuff, look at the Java optional packages, read the spec for J2xx, visit jcp.org. Visit hubs of open source packages: jakarta, sourceforge, and now right here at java.net too. Subscribe to an industry journal, a developer's journal (and once you have those, take a few minutes every now and then to see what's being advertised for commercial tools and frameworks). And last, but not least, read weblogs. They're full of pointers to all sorts of great tools you'd never otherwise hear of.
There really is a mountain of information out there, but you're main job is to skim off the top. Mostly you're looking to find out what a product/tool/framework can do. Don't get immediately bogged down in how to use it. You can learn that later if/when the time comes. Initially look into those things that interest you and/or might be useful to you in the near future. Later you'll start to branch out.
For some concrete examples, lately I've had a great time with JMX and JNDI. JMX has allowed me to write and then reuse a component with zero code changes. JNDI has become by favored tool for promoting loose coupling and easy unit testing. In just now looking up that JAAS is now a part of J2SE, I also discovered The Java Authorization Contract for Containers which I need to look into! Catch you later.