I advocate for "test-driven development" where you write tests before you write code. The tests should define what it means for a program to be correct, and then you write programs to satisfy the ...