I'm a senior engineer, but have never taken a CS class, and have never been able to get past page 1 of any programming book. Possessing knowledge isn't what makes me successful at my job. There is simply far too much knowledge required in this job, and my memory is too sketchy, for me to learn and retain all of it. What makes me successful is that (a) I have a good grasp of how to break projects down into little manageable tasks, and (b) I'm really good at Googling.
For this reason, I do believe that anyone can do it, where the "it" that is being "done" is thinking things through and looking up information, not understanding the ins-and-outs of algorithms and data structures and electronics.
What you're describing is the reason impostor syndrome is so prevalent in the tech industry. Because programming is such a tremendously deep area of study, there will always be people who know things you don't, and this can make one feel inadequate. We're raised to think that being an expert is the same thing as knowing lots of things. In the development world, being an expert is more about being comfortable with what you don't know.