I've JUST learned about SOLID OOP a couple of months ago. I always had "feelings" about code that broke these principles, but never had a way to explain it. Now, I have something concrete to use when I discuss somewhat unclean code with others.
I should have learned to write tests a long time ago.<p>I'm not necessarily a fan of full-on TDD, but I would have been better off on some previous projects if I had written tests that provided at least partial coverage.