I've been in a company that did this for years (I still do it with my current company!). I'll talk about my previous company as I stayed there for five years first as a mid-level and moved on to be a senior.
I learned from my boss who was a great programmer. We pair programmed almost 100% of the time and suffice to say, I learned A LOT in a short span of time. I leveled up my skills just by being with him - I began to think like him, to think of solutions like him and to debug like him. This is the number one thing that helped me understand and learn a lot of things.
Fast forward a couple of years later, our country had a shortage of Ruby developers and we needed more. By shortage I mean there were only atm ost 20 people attending the meetups and most of them had jobs already. My boss then thought of training students, juniors and even seniors in other languages so that's what we did. Since we were a pair programming company, every Ruby senior paired with a beginner or intermediate person to pass on the knowledge. This is the key thing: pair programming made you BOTH focus on the task at hand, and it was also an exercise of learning for both the senior and the student.
In some cases, we also hired interns. Now with the company at full capacity, we 'bootstrapped' interns by 'shadowing'. Interns would join a pair and watch behind them. They were not to be ignored, they can join in the discussion and offer solutions, ask questions etc. While this slowed the teams down a bit, it was an investment of time and effort.
Soon, these interns moved on to become juniors, mid-level developers, and seniors. Up until now, this 'developer ecosystem' is still thriving in my country and by my estimate, there are about 150-200 Ruby developers now.