I think the biggest lesson for me was that in programming things aren't necessarily there for a reason. Method and class names are arbitrary and part of the "creative" side of development. One of the best skills to learn is to read arbitrary code and be able to pull out the concepts and ignore the "design" on top.