You should read Programming as Theory Building