Overheard at the watercooler: The only way a CS guy knows how to prove an algorithm works/does not work is to find counterexamples.
Then again proving code works isn't everything either. There's a reason Knuth once stated "Beware of bugs in the above code; I have only proved it correct, not tried it."
Type checking is a nice intermediate, though not all languages allow all properties you care about to be encoded in types.