Programming as theory building