In this presentation by Jonathan Blow at UC Berkeley’s Computer Science Undergraduate Association, he discussed how most of the things they teach us in school are completely, totally wrong for indie game programming, and why. He covers:

Why optimization is almost always a waste of time
Why data structures are bad
Why enormous code runs are better than modularity and function calls
Why most of the features of C++ are an impediment rather than a benefit

The main reason is that most of these things either greatly increase complexity and reduce maintainability, or that they simply waste huge amounts of development time. He argues that optimizing for development time is, by far, the best optimization of all.