Once you understand how to write a program get someone else to write it.
One can't proceed from the informal to the formal by formal means.
Some programming languages manage to absorb change, but withstand progress.
In computing, the mean time to failure keeps getting shorter.
Learning French is trivial: the word for horse is cheval, and everything else follows in the same way.
To understand a program, you must become both the machine and the program.