I believe PBL is the best way to learn programming before if you are in a problem you tend to learn lot more. But the concept is valid when you are into the working environment and not in school / college environment.