For the most part, we have focussed on features in programming languages that add structure and discipline to the process of programming. The fundamental idea has always been to achieve suitable degree of abstraction. To ensure the integrity of the abstraction, we have seen different approaches to defining a strong notion of type combined with the flexibility to define polymorphic functions.
At the other end of the spectrum we have scripting languages that impose minimal programming discipline but are ideal for rapid deployment of programs that attack ``routine'' tasks. One of the most successful scripting languages is Perl, an imperative language whose control flow is along the lines of C, but with several interesting features that make it ideal for text processing.