It takes problem-domain and algorithm knowledge to be a superhero
Recently tried my hand at the CUDA Superhero Challenge 2. Tried a quick-and-dirty brute-force attempt just to see if it was even remotely possible in the time constraints (it wasn't), and then did a little Monte Carlo exploration, which did much better. Still, the solutions I was getting in the time limit were scoring way below the standing leaders, and I ran out of ideas.
It could be that with a more directly CS-oriented background I would have had a better shot, and I hope to get a chance to see what the best solutions were. I think my biggest problem was not knowing well enough how to constrain the problem and spend more time looking for "good" solutions.
With our research group's knowledge, I'm pretty well convinced that if given an algorithm, we've got the in-house knowledge to make it run as fast as humanly possible on NVIDIA's chips. But with our focus there, we don't always have the domain knowledge to know how the algorithm could adapt and get an even better solution. Which is why we keep so closely connected with application domain research groups: it takes domain and algorithm knowledge in addition to programming and architecture knowledge to craft the world-changing solution.