Learning by Solving Real-world Problems