5 Ways First Principles Thinking Helps You Code Better