Wasting your time? impossible. All you’re learning will at least gently affect everything else you do. Will you contribute meaningfully to foss? only time will tell.
Like any craft, you git good by doing. The first program I wrote was in ASIC to fix 2500 computers on a LAN. We were a small shop (7 ppl) providing on-site support for a large complex. We were gearing up to have to go to 2500 desks and edit win.ini to make sure Vshare was set up for ccMail.
I stayed late a couple nights and wrote a little app to copy win.ini line by line to a new file and fix vshare in the process. Then, it ran some sanity checks to make sure the file looked good, and the files were swapped out. Saved us a LOT of time.
A few jobs later, we had a Cold Fusion/IIS server that would occasionally corrupt logs and we needed reports on the logs for our clients. I couldn’t nail down what caused the error. The files were multiple gigabytes in the day where an entire company could comfortably work off of 2GB. I found the problem, they were missing a linebreak once in a while, and the analytics app we were using would just shit the bed on that.
I needed to break up the offending lines or at least remove them. I didn’t have enough time or space to copy them to a new file.
This was pre-2000 so the languages and tooling were pretty dumb.
I learned some PHP, but memory was an issue, abandoned I learned some Perl that worked, but it took many hours, and I’d have to dedicate a box to just fixing the logs every morning. I finally bit the bullet and learned enough C to fix it; it only took an hour to run.
Since then, I’ve just been learning to solve problem after problem and have chosen tools that I didn’t know. Keep on amateuring. Do small projects and cron jobs with different languages/tools.
Branch out into new languages when you have to start finding hacks to do things in current languages. Once you get good at working on smaller pictures, the big pictures won’t look as daunting.