Reading through James's Blog, I was grateful for his overview of the CosmoCows presentation at ESUG.
What I especially liked is the part at the bottom where Design Principles of Smalltalk, laid out years ago (1981) by Dan Ingalls are quoted. There are three. But wait, I thought there were five.
I don't know where I got the five from, but that's what I remembered. So I went and hunted down the paper and found it here: Design Principles Behind Smalltalk. I am so thankful that Dwight Huges keeps an archive of some of these seminal papers online.
The eye opener for me, was that there are not five, but 16 such "principles" quoted in the paper. They are:
- Personal Mastery: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual.
- Good Design:Good Design: A system should be built with a minimum set of unchangeable parts; those parts should be as general as possible; and all parts of the system should be held in a uniform framework.
- Purpose of Language: To provide a framework for communication.
- Scope: The design of a language for using computers must deal with internal models, external media, and the interaction between these in both the human and the computer.
- Objects: A computer language should support the concept of "object" and provide a uniform means for referring to the objects in its universe.
- Storage Management: To be truly "object-oriented", a computer system must provide automatic storage management.
- Messages: Computing should be viewed as an intrinsic capability of objects that can be uniformly invoked by sending messages.
- Uniform Metaphor: A language should be designed around a powerful metaphor that can be uniformly applied in all areas.
- Modularity: No component in a complex system should depend on the internal details of any other component.
- Classification: A language must provide a means for classifying similar objects, and for adding new classes of objects on equal footing with the kernel classes of the system.
- Polymorphism: A program should specify only the behavior of objects, not their representation.
- Factoring: Each independent component in a system would appear in only one place.
- Leverage: When a system is well factored, great leverage is available to users and implementers alike.
- Virtual Machine: A virtual machine specification establishes a framework for the application of technology.
- Reactive Principle: Every component accessible to the user should be able to present itself in a meaningful way for observation and manipulation.
- Operating System: An operating system is a collection of things that don't fit into a language. There shouldn't be one.
If you've never read the paper, or if it's been a while since you read it, you owe it to yourself to check it out (once again). If only more of the world paid attention to themes such as this. I find it amusing/ironic, that even as early as 1981, there was a feeling of "we're not getting anywhere fast!"