> My understanding is that homework is essentially just practice for exams
There are a LOT of people that don't take exams well. When you combine that with the fact that the real world doesn't work like exams in 90% of cases, it makes a lot of sense for grades to _not_ based on exams (as much as possible). Going the other direction (based on nothing _but_ exams) is going to be very painful to a lot of people; people that do learn the material but don't test well.
I made another comment on this thread about that. Exams should be test important knowledge (not computation or trick questions) so they should be easy for students who learned the material, even those who traditionally have trouble with exams. Most of the grade should be frequent in-class assignments or long take-home projects, which test almost if not the same skills students would use professionally (e.g. debug a simulated server failure in-class; develop a small filesystem with a novel feature at home).
The in-class assignments should also be easier than the take-home projects (although not as easy as the exams). In-class assignments and exams would be more common in earlier classes, and long projects would be more common in later classes.