I hear questions like this one at least once per week. To be fair, that may have something to do with the Code Connector community and it's culture. There are a great many people with non-traditional backgrounds in this group, and it has really helped me to better focus and realize the how little the schooling bit really influences ability as a developer.
I have come across a greatly diverse group of people that have a zeal for development. Many of those people are self taught. That zeal is really the only commonality that I see between all of the people that I would consider to be really good with coding. There is a drive and a passion with which they approach things. It makes sense to me. Having gone through college for computer engineering, during my schooling I would have told you the same thing about engineering students. You see, when your work includes fighting with stupid errors and working potentially long hours in order to correct errors that you didn't understand in the beginning, you will require a great deal of drive and motivation. That motivation will likely also allow you to dig around in documentation for things which you were never trained. The documentation will take some time to figure out by itself, but you will likely find something interesting in the documentation aside from the thing that will help with your issue at hand. Those little tidbits of information that you pickup over the course of time are the things that pile upon one another becoming the depth of your knowledge.
There is one level of programming work that can be done by anyone with a minimal skill set in development. These are the types of things that paid interns and fresh junior devs get assigned. Often times there are piles of this around any given project. You see anybody in this field can search the internet, documentation, and Stack Overflow for answers to these 'code monkey' tasks. These are the things that allow us to cut our teeth in this business and to become familiar. Our familiarity grows with the language, the framework, the IDE, the code base, and the process itself of development. Code monkey work is great for new devs (whether that be new to a project or to the profession), but doesn't ever actually stop during your career. These things can be pretty frustrating and not very exciting and in order to get through it you need to have a solid interest.
I see the same approach used in life and hobby of many developers. Common interests may include sports, video games, tablestop games, computer building, mechanical keyboards, traditional wet shaving or any of a million things with a depth of information that may be necessary to dig through in order to fully enjoy. This passion and excitablity is what allows these people to be good developers, games, and stewards of their chosen hobby.
The people that make great developers want to know how 'it' works; whatever it may be. They dig to figure out strategies for complex games. They spend hours on Massdrop looking for deals on really cool equipment that might not ever be available again. There IS a little bit of hipster in there for many. There is enjoyment in finding a thing that nobody else knows about. Even with programming that is a powerful position to be in. You might be the only one in the group that knows a given language or framework. This not only enables you to work on things where other may not be capable, but it also allows you to have the opportunity to help others with their issues. The sheer knowledge that a library or framework exists can be massively impactful to the direction of a project.
In what other profession can you have a long standing war such as 'vim or emacs' when both of them are a pain to use the first time? We have the ability to dig into difficult things and develop a love for them. There is a satisfaction in it.
The passion that we have enables us to sit and listen to someone talk about a project that we know nothing about and to follow along with the concepts being discussed. It isn't just a story of their current work, it is a knowledge entry for the use case of whatever tech stack they may be using.
tl;dr: anyone can be a great developer if they really want to be.