Jag använde senast http://projecteuler.net/ när jag lärde mig nya språk. En samling matematiska problem som får lösas hur som helst, oftasts genom att man programmerar något lämpligt.
Minns att en uppgift gick ut på att räkna ut vilka som var de tre vanligaste rutorna att hamna på i monopol inkl alla kort; där i alla fall min lösning, när jag lärde mig C, var att simulera kortlekarna, spelplanen och en massa tärningskast. Skoj tidsfördriv. :)
Personligen så gillar jag inte den typen av problem (kluriga matematikproblem) för att lära sig programmering. Det tar för mycket tid i förhållande till vad jag får ut av det.
Jag tycker att det är roligare att göra nåt mer verkligt projekt som man sen utökar med fler funktioner. För C# t.ex. så gör ett ritprogram eller liknande. Den första versionen kan vara otroligt simpel, och efter ett tag kan du exportera dina ritade bilder till XML o.s.v. När man stöter på ett problem så läser man på om vilka lösningsalternativ som finns och försöker tänka ut vilken lösning som passar bäst, det lär man sig mycket på. Det känns som ett mer kreativt sätt att lära sig på, men det är en smaksak skulle jag tro.