The irrelevant and distracting pictures of food on this blog are <i>really</i> starting to annoy me. I wish the irrelevant picture URL was more predictable, such that it wouldn't accidentally conflict with e.g. a graph or diagram.
Denote preconditions, postconditions, and invariants during interviews! It'll save your life when it comes to quickly finding the "off-by-one" bugs that tend to be problematic when you're reinventing strcspan or another C string manipulation function, or doing some crazy recursion.<p>In real life, whenever I'm writing complex C functions, I always denote my preconditions, postconditions, and invariants. I also tend to denote non-obvious pre/post conditions above the functions, to optimize for the case of source-diving (when someone's just glimpsing around and trying to get the gist).
Invariants are still here. Instead of talking about them in comments, you can have automated test-generation via QuickCheck:<p><a href="http://haskell.org/haskellwiki/Introduction_to_QuickCheck" rel="nofollow">http://haskell.org/haskellwiki/Introduction_to_QuickCheck</a>
Nice article. There's been a backlash against formal correctness and verification in software, but fundamentals like asserting (or even just writing) invariants can make almost everyone's code better.
The beauty of Haskell and other languages with a powerful type system is, that you can express a lot of invariants with the type system.<p>E.g. it is possible to express the Red-Black-Tree invariants in Haskell's type system.
Lovely article about a simple technique that can be used to prevent a lots of bugs, and assist in the generation of correct code.<p>Interesting that his code still has a (probably never triggered) bug.<p>EDIT: Actually, looking at the exchange in the comments, the bug I thought it has, isn't. The code is right, but for a subtle (to me) reason that isn't clear (to me) from any of the comments, the code, or the invariant. Even more interesting than I thought.