In college, I always hated in-class presentations. What if the material I taught was too simple, or too obvious? Inevitably, I always overcompensated; delivering a jargon filled speech the rest of the class might or might not have fully grasped. But really? I don't know most things. So here's a link dump of pages I've learned from recently.
Trites are a neat, compact data structure. They compress really well, but take some time to decompress in slow languages or on slow platforms. Be sure to read the posts on about other, more searchable data structures.
Also see this neat list of lesser known data structures.
Right. When you have an object? And it uses another object? That second object is a dependency. The goal here is to make objects as independent as possible. You should be able to modify any random depenency (to a degree) without having other objects break. So you give your object a way to add objects it uses (dependencies) from the outside.
The example that did it for me was Twitto. All design patterns should fit inside a tweet. The author of Twitto also has good a series of posts on the topic, and ircmaxell has a compact and to the point analogy.
Test driven development
Yeah, I'm late to the party on this one. I sort of wish I'd picked these up in school, as they seem like they would have been handy for CS assignments.
RubyKoans, in addition to being an excellent way to learn Ruby, also serve as an introduction to the idea.