The Marshmallow test is now famously quoted as a revolutionary study in deferred gratification.
Basically, you take some young children, plop them on a seat, and put a marshmallow in front of them. You tell each one that if they waited 20 minutes without eating the marshmallow in front of them, they would get 2 marshmallows.
Some children eat the marshmallow immediately. Some writhe in frustration yet fail. But some stick it out and succeed, basking in the glory of their dual-marshmallows.
The interesting thing was that when researchers went back and checked on these children in their teens, those who had not eaten the marshmallow were more successful than those who did. They had better social lives, better grades, etc.
All because, that even at that young age, they understood how to delay gratification. They understood self-discipline.
That's already interesting in itself, but what's more interesting is how these children achieved this higher level of self-discipline.
Some children sniffed the marshmallow. Some distracted themselves by fiddling with their fingers. Some looked away and tried to use other activities. Some sit and stared at the marshmallow. All of them succeeded, but some with less effort.
In all these cases, the children succeeded by imagining a future that was better. Some of them focused on the fact that there was "only 2 minutes left". Others sniffed the marshmallow and convinced themselves that the smell would satisfice for now.
However, those who managed to face their desires head on understood the recursive base case. They KNEW that they would get two marshmallows. All they had to do was wait.
I think that that we're built with a call stack of a certain depth that doesn't change too much in our lives. Some of us however, are built with tail-call optimisation, and intuitively get certain concepts. Self-discipline is no different.
With practice, it's likely that we can optimise our methods, and all of us can learn some self-discipline.
That doesn't mean however that we should always do it. Try doing recursion in python. You could, but it's not very efficient.
I think we should try to avoid the use of self-discipline as far as possible. Control the environment to make it easy to accomplish what needs to be done. Always fight the easy fight, while keeping your sword sharp for the big battles when they do arrive.
We don't give genetics the credit it deserves. But as science uncovers genetic roots to all sorts of character traits, diseases and the like, the basics rarely change. It's still going to be about trying, then optimising, then trying and optimising again and again, that is going to be the secret to success.