I've been asked a few times as to how I learn things and Why I support open source so much that I'd like to work for a company that has a dedicated OSS team. I could answer this in one line , or I could write a whole essay.
One Line Answer
I learn from open source repositories and study them to figure out stuff and things that exist out there.
We all started somewhere. The point in time where we knew basically nothing. I like calling it the Dumb Point , and every person you know has been there and then their decisions got them to where they are today.
Dumb Point's are basically where you might know enough to do something but you don't fully understand what's going on. And thinking that once you've grown at a certain skill you won't have dump points is another mistake people make. I've been with JS for about 2.5 years Industrially and about 4 years if you count the projects I did in college to learn JS in the first place and taking in consideration that I was coding in Python way before that would turn that into 8 years worth of experience with code but I still have dump points.
I had one last month when I was learning Rust , now rust isn't hard or anything but there's obvious differences that it has compared to the languages I'm used to.
I've worked with Static Typed languages before. Java, C, and in the recent years TypeScript(i know it's a toolset and not an acutal language, but you get the idea.) but then Rust has the concept of pattern matching and every line being a typed expression which does create friction when you start off, theres numerous other things that make it a little harder to just get used to Rust code, macros, variable shadowing , etc. Point being, I needed help to understand what was going on and like anyone else we'd turn to google for this but then I don't open up Stackoverflow or Blogs for these anymore.
My first point of learning is the docs, always. That's where I look for the answers and most of the times good tools have sufficient documentation for you to refer too. The second point of learning for me is git repositories using that particular tool. Taking rust as example again, I'd look for github repositories using rust and try to go through them as much as I can. A lot of times people add helpful comments on functionalities that are a little more complex and that helps you out too.
Overall, I study codebases to understand approaches and since I end up going through a variety of repositories I find various ways to implement similar things and then go with the approach that's both easy to read and performant, the other approach might be more performant and I'd use it when building something for production but for initial learning and understanding I'll pick the readable version.
Now, since I do this a lot more with JS libraries and frameworks right now, I get to go through the
package.json files which contain dependencies that the projects use, I normally have numerous tabs open for each npm package that I don't know about and this opens up even more repositories for me to study and obviously, I now know of more packages that can help with a certain task if needed in the near future.
And even though the knowledge I've gained in years is not even close to 1% of what's out there, I still owe a debt to the open source community and hence most of what I build is open source.