The Modern C# Challenge: Become an expert C# programmer by solving interesting programming problemsRod Stephens