Хотя это не совсем практично (поскольку практические задачи, которые достаточно короткие, чтобы их можно было представить в классе, обычно немного скучны), программирование Игры Жизни - один из моих любимых способов выучить новый язык. В качестве бонуса, функциональный подход весьма отличается (и более элегантен), чем императивные решения. Кроме того, любая проблема, когда вы манипулируете последовательностями данных (например, анализируете последовательность твитов на частоту слов или что-то в этом роде), приводит к классным примерам.