Given the constant change in the software industry, learning new technologies is one of the most important skills for a developer. More often than not there are no ideal circumstances in which you start off with a three day training course conducted by an expert and afterwards do pair programming with proficient colleagues. The following is a draft for a survival strategy when you find yourself working in completely unfamiliar technology stack without much hand-holding, e.g. editing React code as Java developer.
Knowledge acquisition isn't a linear process. However, the difficulty of the learning activities should be adjusted to the current competency level in order to make it a pleasant experience.
The journey always begins in the "Novice" stage. This phase is all about understanding the context and doing the first baby steps.
Understand the tools philosophy
Who created it? Why did it get started? What problems does it solve?
Who is using it? Where are the money flows? What sources of information are available? How does it compare to its alternatives?
Define learning goals
What are you trying to achieve? What sub-skills are required and what are their interdependencies? Which areas are out of scope?
Set up an environment where you can do experiments (e.g. by writing a "Hello, World!" program).
In the next stage you need to get an understanding of the basics (e.g. conditionals, loops, and statements for programming languages).
Request to attend a training course. If this this is not possible try find a good video tutorial.
Buy a book
Get an overview over all available books. Buy one from an experienced author and where a lot of attention was put into the didactic preparation of the subject.
Skim the book to know what you don't know and then be able to read the relevant sections when they become relevant.
Before diving into an enterprise project, explore the technology with a non-trivial example project like a TODO app. Even better would be to create an internal productivity tool.
Now that you are familiar with the basics you can start to work on a real-world project. Be aware that learning at this stage requires relatively high effort.
With the help of the playground project created in the Beginner stage new sub-skills can be explored without the burden of the complexities of the production system.
Document snippets of lessons learned in an internal wiki or another knowledge management tool. This will help to reduce the time required for recollection.
Read the book aquired in the previous stage from cover to cover when there is some slack time. Also consider the application of other reading techniques.
After being able to get work done the skill should be mastered so that it can be applied effortlessly.
Teaching is one of the best learning techniques as you will notice what you do not know yet when you try to explain it.
This could be done by conducting internal training courses or mentoring colleagues. Other forms of teaching might be writing blog posts or recording screencasts.
Finally, analyse the pros and cons of the technology. Then attend conferences and meetups to discuss them.
Probably you'll find a cool new technology there and can start the process again.
- Dreyfus Model of Skill Acquisition -- Stuart E. Dreyful, Hubert L. Dreyfus #paper
- Soft Skills: The software developer's life manual -- John Sonmez #book
- Exercises for Programmers -- Brian P. Hogan #book
- Making Badass Developers -- Kathy Sierra #talk
Where do you see the strength and weaknesses of this learning model? Is it inherently flawed because workshops and pair programming are absolutely required in the beginning? If not, how can it be optimized so that the learning can take place to 99% on company time?