Design Principles Behind Smalltalk

This page is a really good one, explains quite some things in an interesting way. Here are some of the principles that are applicable in a wider context in general:

  • If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual.
  • 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.
  • [The purpose of a language is] To provide a framework for communication.
  • 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.
  • A computer language should support the concept of “object” and provide a uniform means for referring to the objects in its universe.
  • To be truly “object-oriented”, a computer system must provide automatic storage management. [c++ lacks this]
  • Computing should be viewed as an intrinsic capability of objects that can be uniformly invoked by sending messages.
  • A language should be designed around a powerful metaphor that can be uniformly applied in all areas.
  • No component in a complex system should depend on the internal details of any other component.
  • 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.
  • A program should specify only the behavior of objects, not their representation.
  • Each independent component in a system would appear in only one place.
  • When a system is well factored, great leverage is available to users and implementers alike.
  • Every component accessible to the user should be able to present itself in a meaningful way for observation and manipulation.

Well worth going through it once.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s