Programming languages serve a dual purpose: to communicate programs to computers, and to communicate programs to humans. Indeed, it is this dual purpose that makes programming language design a constrained and challenging problem. Inheritance is an essential aspect of that second purpose: it is a tool to improve communication. Humans understand new concepts most readily by first looking at a number of concrete examples, and later abstracting over those examples. The essence of inheritance is that it mirrors this process: it provides a formal mechanism for moving from the concrete to the abstract.
My research interests are in the area of programming languages, operating systems, object-oriented systems and distributed computing, and more specifically in the region where they overlap (such as language design for distributed Object-oriented computing.) My favorite system for trying out ideas is Squeak Smalltalk. I have written a few Squeak goodies that I believe are generally useful. I have been actively working on Traits with the folks from SCG in Bern; see Nathanael Schärli’s Traits page for details. I’m a co-author of two books on Smalltalk programming, Squeak by Example, and Pharo By Example.