I think you've got wrong expectations about your degree. It is supposed to be academic and is purposed ot educate, not train. You can learn specific skills by yourself, but a CS degree will teach you basic building blocks of every CS-related problem.
I am in my seniour year of a CS degree and I have never considered it to be a waste of time. It helped me to develop the "right" way of thinking, now I can take unfamiliar CS problem and systematically solve it, be it graphics programming, operating systems, web applications or something else.
It is not the issue of the degree, but of the people who do said degree. Some of them do not realize that university only educates, not trains. They may have good knowledge of lecture material, but they don't go beyond that to tackle problems in their free time. You have to be motivated to learn new things on your own to make a degree a worthwhile experience.
Honestly, I think you are going the right way. University CS degree will give you the fundamentals, you can always learn specific skills by yourself (from what I can see you have already made a good progress in it ).