Does someone have to be a genius to be a programmer? It definitely helps but only if the person is NOT afraid of hard work. You see, a lot of smart people are compelled by challenging and tough problems. They want to solve complex issues.
Programming can be creative but at the same time there are periods of time when programming can be boring and tedious. A good programmer will be smart to automate a boring task but he won’t hide from a boring task if automation is impractical. When I taught at the Hack Reactor dev bootcamp, the best programmers were the ones who would perceiver. They weren’t necessarily the smartest students. Often, the smartest would burn out quicker because they are get used to win fast.
Another thing about geniuses which is bad, and which is outlined in the book Mindset: The New Psychology of Success, is that a genius who was successful might be afraid to take on a new risk for the fear of losing the prestige.
I saw plenty of senior software engineers who won’t consider any new technology mostly because they didn’t know it, NOT because they had any good arguments. To give you an example, one Java architect with a decade of experience in J2EE was telling me that putting HTML in JavaScript is a violation of separation of concerns when we talked about JSX and introducing React components to the company. That was three years ago and it’s funny how React is now a de facto front-end library of choice.
I agree that hard work can beat smarts. The trick is to keep up the momentum to keep up the work. Most people quit to early. Of course, smart plus hard work is 10 times better.
On the other hand, very often the best code is the code you never wrote. Indeed, it’s often not necessary and even detrimental to future maintenance to spend 10 hours implementing a feature from scratch when you can download an npm module and configure it in 30 minutes (this is smart). On the other hand, those 10 hours will go a long way toward betterment of your understanding and skills (this is hard-working).
In the end, you don’t have to be a genius to be a programmer. Be smart and hard working instead. But if you are a genius, then don’t afraid of failure (because it’s learning) or tedious work.