It is easier to write an incorrect program than understand a correct one.
If a listener nods his head when you're explaining your program, wake him up.
To understand a program, you must become both the machine and the program.
Every program has (at least) two purposes: the one for which it was written and another for which it wasn't.
Once you understand how to write a program get someone else to write it.