The design of a programming language is the result of a selection from a general collection of programming language concepts. With some frequency, new languages are introduced that combine concepts in an novel manner and sometimes introduce new concepts. During his/her career, a computer scientist will have to work with more than one generation of programming languages. In order to learn new programming languages, a computer scientist should understand the basic principles in the design of programming languages.