It still sounds to me like you might not be studying the right stuff. If your classes remind you of a tedious treadmill leading toward the Blub Factory you need better classes.
Or a better major. Perhaps you're making the mistake of letting your chosen career dictate your choice of classes. The universal secret to school is: Take the best classes you can find, from the best people, regardless of subject. If the local comp sci offerings remind you of Javaschool, do something else. I have lots and lots of colleagues who can attest that you don't need a major in comp sci, or even a single class, to spend your career working on software.
The best bang for the buck in college is the stuff that you can't get anywhere else. Stuff that requires expensive facilities or hardware, for example. Take lab courses -- unlike programming, these are things that are hard to self-study. Biology, physics, chemistry, electronics, mechanical engineering, even art and design (which I suspect is best done with physical materials and a live teacher). Or be a productive dilettante: As I said above, find the best professors in the university and take their courses, regardless of the field. I discovered linguistics that way, and it turns out that intro-level linguistics is a really nice thing to know if you're going to work with languages all the time.
If I were to go back I'd probably still take a lot of physics and electronics, which is what I did before, but I'd also be all over the biology and biochemistry. Molecular biology is the ultimate machine language. And I wouldn't neglect statistics: Study as much stats as you can stand.
Of course, nontechnical subjects are also important, because they make you write essays. You'd be surprised how useful a skill essay-writing can be. I had a minor in history, and I don't regret it.