The BeOS was written in 1991. Windows XP's NT kernel in 1988. MacOS X's OPENSTEP kernel in 1994. Solaris in 1997. Linux in 1991.

Advanced ModularityEdit

Aspect-Oriented and Object-Oriented Software Development: A book on the effective use of AspectJ

Design StructureEdit

Recall Baldwin and Clark, and the DSM work before then. Define what a module is, and what an interface is.


Some examples of poor abstractions: such as a "base class" that has two different modes such that derived classes are treated differently.

Inheritence is sometimes used as a layering mechanism, to hide concerns at the base classes.

Reasoning about programs: what private and anonymous inner classes have in common.

Crosscutting ConcernsEdit

Definition of crosscutting, tangling, and scattering.

Non-Hierarchial ConstructsEdit

AspectJ and multiple-inheritence-like interface introductions.

The Eclipse IAdaptor model allows for some nodes in an inheritence hierachy to have properties, but avoids that property from being

System Level AbstractionsEdit

Principle of Locality (i.e. VM and good replacement algorithms) crosscut our compilers and hardware systems. It's improved programmer productivity, and is largely invisible.

Garbage collection is similar, though it "pokes out" a little more than VM does. You still might have to know about the mark and sweep process, and for canoncialized pairings, you need to know what a weak reference is. In other cases, you need to know what a soft reference is.