Some of the smartest people around you are professors.So one way to find interesting work is to volunteer as a research assistant.
You never have to compromise or ask anyone's permission, and if you have a new idea you can just sit down and start implementing it.
But you'll probably be happier if you don't go to that extreme; it caused him a lot of worry at the time.
Another way to be good at programming is to find other people who are good at it, and learn what they know.
 Not only was this work not for a class, but because he spent all his time on it and neglected his studies, he was kicked out of school for a year.
 It all evened out in the end, and now he's a professor at MIT.