The statement “good developers” implies more than programming so it needs to be clarified.
A developer implies many more skills than just programming.
I think most will think it was meant to mean “good programmers”.
I do not agree with the assumption most good developers (in the meaning of programmers) were self-taught. It is more an opinion. I find a lot of crap code by self-taught programmers that works but so bad its hard to maintain and very costly to change. But it is also true self taught programmers can be good developers in the sense of good programming skills as they gain experience.
I would say however self-taught programmers are more motivated and thus offer a good addition to any development team. They also have to be willing to shed off bad practices that may have resulted in self learning and learn newer ways. Something simple by not documenting code or not using a repository or not following code formatting best practices or using too many globals and so on.
In learning to program here are some of my observations:
In my own experience as a self-taught programmer, OOP was not a standard in many programming languages in particular scripting languages. For example there was even a time PHP did not have OOP. I was a programmer way before OOP worked its way into most scripting languages. OOP was probably popularized by Java when introduced, at least for me it was, as a way to solve the weaknesses in HTML in its early days and the problem of cross OS apps. As a result, I had to learn OOP conceptually and then learn to apply it. Required unlearning lots of bad habit relative to OOP and perhaps if I was born later after OOP was pervasive would have saved me lots of headaches. Fortunately the other languages I used had no OOP.
Another example is design patterns. There was a time these were less ubiquitous across programming languages. I was oblivious to them as a self-taught programmer and when they started crossing my purview I struggled to avoid learning them and using them. As applications became more and more complex in the 90s through today, they are applied by programmers in many languages. Now I use many of them but still not all of them or if by accident I use them because of programming experience I learned to solve problems with a design pattern without know it exists as a body of knowledge.
Point is that as a programmer your community changes and evolves and new bodies of knowledge are created and eventually crystalized. Then you have to stop and say what the who ha ha is this stuff everyone seems to be talking about and determine if you need to learn it.
Finally programming languages and included libraries keep evolving. For example PHP deprecates and obsoletes parts of its library and provides new replacements. At some point you have to stop and see how to use the new way. This usually slows you up but is necessary to grow.
Now I like to throw this into your noodle for some cooking.
Imaging working with an AI assistant in your programming. Swirl that one around in your gray matter and think about how that may be different and something new to learn as a programmer.