I don't think that this question is deserving of being answered by a binary choice, because like most things it will depend on the person. But I would like to answer your final question; you simply need practice.
By creating projects and releasing them into the wild, you will develop skills that will help to influence projects down the road. I started my open source journey back in 2013, with writing a basic tasks list for Grunt. A few months passed and gulp came along and I was able to apply my skills of knowing how to publish node modules to writing a few gulp plugins. Fast forward a year or so and I'm writing a CSS minifier based on PostCSS, whilst my current work is involved with parsing CSS property value pairs at a very deep level.
Now, a lot of this work is focused on CSS, and written in JavaScript. But I've learned how to write parsers, had a ton of experience with writing tests, fixing bugs and developing my technical skills. And I achieved this because I was interested in doing these things. The more opportunities that you use to further your skill set, the more adaptable you will become, so long as you apply your existing knowledge to new concepts and ideas.
Where possible I will also try to help other people with problems; I do this in issues most of the time, but I lurk in lots of online chats and answer when I can. Trying to solve other people's problems is a great way to apply what you know in a different area; maybe you have not run into that particular problem before, so you force yourself to think how you would solve it, and then you can answer their question. This will help you develop both your technical and soft skills, and soft skills are essential for any career.