Theoretical Aspects of Computer Software