One of the problems with schools is that they don't have individual knowledge of each student, so they can't tailor assignments to their specific skills and abilities and knowledge. They also don't give everyone different assignments because of the labor involved.
That's pretty abstract. Here is a specific example. I learned a bit about matrices. Then I wrote a Ruby program that does some of the calculations I'd learned about. A school could not give out this assignment. The students in the math class might not know how to program. And the students in the programming class might not know about matrices. In general, schools can't explore cross-discipline work. Everyone has a major, and if a task doesn't fall entirely within it, it can't be assumed they know how to do all of it.
There is no obvious way to fix this. There isn't some little fact that schools are overlooking. It's just a problem with one-size-fits-all education. It's a shame. And it's a reason to prefer to learn at least some things outside of school.