Computer system designers in Trout Lake specialize in designing computer systems. They define interfaces, usually also the most difficult part of the job, thereby, satisfying three conflicting requirements that an interface should be simple, complete, and should admit a sufficiently small and fast implementation. They understand that each interface is a small programming language, defining a set of objects and the operations that are used to manipulate the objects. They present a concrete syntax with every other aspect of programming language design. They use procedure arguments to provide flexibility in an interface that may be restricted or encoded in various ways for protection and portability. This technique simplifies an interface, eliminating a jumble of parameters that amount to a small programming language.