I would suggest that answers to this question require that you qualify what you mean by "good" programmer. There are, IMO, many functional definitions. And depending on which you are using, will yield different secondary skills.
I would say taking standardized tests, such at the SAT. I say that because being a good programmer has more to do with being clever than with having a lot of formalized knowledge. If you're good at programming you're probably also good at solving math puzzles.
My controversial opinion is that technical experience alone does not make someone a good software developer, business acumen does, mainly systems thinking and interpersonal skills.