1. an ide/language with really good static analysis
2. aggressively minimize codebase complexity<p>done. when my code doesn't work the first time, and i'm writing in a static-typed language, it's usually due to high accidental complexity in my code or code i interface, requiring me to keep too much context in my head, causing logical problems and problem states to be non-obvious.<p>stupid errors like writing an if statement wrong, is sophomoric. "most common errors" really means avoiding mutable state & leaky abstractions[1]. i do think the OP gets this, it just doesn't come across too clearly.<p>[1] nostrademons of HN, "how to become an expert swegr" <a href="http://news.ycombinator.com/item?id=185153" rel="nofollow">http://news.ycombinator.com/item?id=185153</a>