This is a question I get asked a lot. One of the skills that really enables me to be successful is the ability to learn things quickly. I am by no means the smartest person in the room, but if there is a tool or technology that you need someone to become an expert on, I am the guy. When I first got out of college, I mostly learned things by reading a lot. I should have bought stock in O'Reilly for all the books that they published on technology that were considered the definitive guides. I personally owned at least 20 at one point. Over the years, however, I've stopped reading books and I spend more time now searching out online resources for learning things.

I'm not saying that books aren't a good place to start. Safari Online is still a resource that I hit up a lot, especially because they offer it as a benefit in my current organization. A lot of good books walk you through code examples that you can download or enter yourself (I suggest always entering the code yourself because you sharpen your understanding as you type). The problem is that it can take a long time to get through some of these books.

Recently, a buddy of mine built a site called Katacoda. It is a site for building interactive tutorials. What made it particularly effective was the fact that the tutorials launched a shell where you could execute commands for the topic you were learning. A great example of this was the tutorials on Docker, where you could quickly learn because you were literally starting up containers as you were learning, and you didn't have to switch windows - it all happens in a single browser window. Katacoda also allows you to build your own tutorials.

The key part is that most people learn best by doing, so although books and videos are great, they need to include hands-on exercises in order to be truly effective. They should start with the basics and start small, and build up a layer at a time until you cover everything. Topics like Maven are quite complicated when you get down into the special use cases - for example, Maven is built out of a series of stages and plugins can be applied to perform actions at different stages.

There are now a number of sites that offer online courses, and these courses are often spread out over several weeks. This might not be ideal if you need to learn something quickly, but it also makes it so that you can learn on the side while working on other things. I learned Machine Learning and iOS development this way, and the commitment is usually only a few hours a week. These courses are also generally cheap, if not free (if you want certification that you actually completed the course, the cost is usually under a hundred dollars).

Another great resource is the people around you who already know these technologies. A lost art these days is pair programming. Folks are dividing up tasks and sprinting fast in Agile mode, and if you are the new guy, you might feel left out if you aren't up to speed on certain technologies. I've found in this case the best thing to do is to sit down next to the guy who does know what he's doing and just watch and learn. You should feel free to ask questions, but try to keep them short or write them down to ask at the end. Your goal should be to observe and help out in any way you can - perhaps you understand a different area better than the person you are shadowing, and you can review code as they write it to help prevent defects. The learning will happen and eventually you will be able to apply it yourself.