For me, solving the problems cemented the concepts. Some problems I couldn't solve, I'd ask another student for help, they'd explain the remainder of the concept that I was failing to grasp, and things would make sense. If they didn't go to prof next day for help.
Basically the professor would show off the technique in various usages, I'd take copious step by step notes, and then try to apply those same techniques to problems given. A really good problem set builds up difficulty and slowly expands upon the initial base techniques.
This is in strict contrast to how CS is taught. Although CS is still largely "throw in pool, hope students figure it out". IMHO I think I learned more in CS from discussions after class with the prof than from most classes, and I also think many other students would agree with me. :)
Basically the professor would show off the technique in various usages, I'd take copious step by step notes, and then try to apply those same techniques to problems given. A really good problem set builds up difficulty and slowly expands upon the initial base techniques.
This is in strict contrast to how CS is taught. Although CS is still largely "throw in pool, hope students figure it out". IMHO I think I learned more in CS from discussions after class with the prof than from most classes, and I also think many other students would agree with me. :)