There are lots of tests which can distinguish potential good programmers from those who lack that possibility; for example, the LSAT is mostly a test of logical reasoning and would serve ideally for this purpose.<p>The problem for Computer Science departments isn't a lack of available tests; rather, the problem is policies (mostly from governments) which require CS departments to take in as many students as possible, whether qualified or not. In my area (BC, Canada), the government decided six years ago that universities should double the number of computer science degrees they hand out -- at exactly the same time as the number of applicants was dropping sharply due to the dot-com bubble bursting. Unsurprisingly, the requirements for admission to CS programs fell dramatically, and (thanks to the flood of unqualified students) the number of students failing first and second year CS courses went through the roof.<p>We know how to identify good vs. bad students -- the problem is a lack of willpower to do anything with that information.