I think the answer to the question is "the right one." Arbitrary classifications of sophisticated skillsets attempt to reduce the decision to a rule of thumb. That's just not really possible.
Beyond that, I think the classifications are pretty off base. The idea that hackers build open source yet are rarely trained computer scientists is pretty far from reality, for one thing.
Even if these classifications made sense, I think most programmers are some blend of the ideas behind each group. As a programmer I switch between all of these modes as necessary.
To be a competent programmer, one must switch between all three modes. I would find it hard to work with someone who directly fit into only one of these classifications.
Beyond that, I think the classifications are pretty off base. The idea that hackers build open source yet are rarely trained computer scientists is pretty far from reality, for one thing.