Just "to be a programmer"? Frustration tolerance. Thats pretty much it.
To be a good programmer: very much depends on your area of expertise. Most of them need good communication skills, some machine-level understanding, some math or algorithm skills, some require high velocity / long hours... It really is a very diverse field.
But like for most jobs, frustration tolerance gets you surprisingly far.