Structures of Computing: A Guide to Practice-Oriented Theory