I don’t believe to be a “great” programmer you need to know everything, rather knowing what you know, don’t know, and minimizing the amount of stuff you “don’t know you don’t know” is the right route. What I mean by “don’t know you don’t know” is the area of knowledge where you don’t even know what its about, or could learn.
For example, you looking at other people’s solutions might show you different syntax than you’ve ever seen. Awesome! this is moving those solutions into the “know you don’t know”, which is better than not even knowing that syntax existed in the first place!
You can now go out and learn about all that stuff, or at least set it aside and learn it later.
The goal being again to know what there is to learn, and then learn it if you need it, rather than trying to know everything.
As simply put, trying to know everything is impossible, so knowing where you stand is better, at least then you can take that and move toward what you find you need and understand where you are relative to problems.
“Knowing yourself is the beginning of all wisdom.” - Aristotle
“Its not a bad thing finding out you don’t have all the answers, you start asking the right questions”. - Erik Selvig (Thor)