You could take a look at TopCoder. They give you a design specification and background problem and you need to design a program to solve the problem.