I started to develop professional software more than twenty years ago, during the summertime vacations. I used to work in this small software house where there were really experienced programmers. My only concern at the time was to be productive. So, whenever I had a problem, I asked my colleagues. They were all very kind and they always helped me. At the time, it seemed great but later I understood that I was not learning much.
1. Being Alone
This situation went on for several summer holidays and even for few months after I finished the University. Then everything changed. The software house split into two unrelated companies, some developers quit and I became the only C/C++ developer in one of the newly born firms.
It was before Stack Overflow, before GitHub and before Google. Sometimes it has been quite frustrating to face problems that I wasn't able to solve. But it has also been really helpful. I've learned to count only on myself. And I've also learned how to bypass problems I couldn't solve.
2. Working With Someone More Experienced Than Me
Then, after some years, things changed. I had the opportunity to work with some good developers, even if not in strict contact. They were mainly contractors working from home so rarely I had the possibility to talk with them directly. But I could look at their code.
In this period of time, I've learned a lot of programming strategies and also to be less "pure": if your software is not running or it's too slow, maybe you have to ignore some "best practices". I've also learned that good programmers do not always write good code.
3. Working With Someone Less Experienced Than Me
You may think that a newbie cannot teach you much but it's not true. Young developers have new ideas and they aren't limited by the all the biases that come with the experience. In addition, with their questions they force me to think about things I usually take for granted.
Working by myself has been very challenging and advantageous but having someone else in your team makes you improve most, no matter the experience of your mates. it's always a win-win deal: you teach and learn at the same time. And, if you don't have colleagues, you can contribute to one of the open source projects out there.