15.1. Hitting a Nail with the Right Hammer
We need to be flexible and diverse programmers. The programming landscape requires elegance, efficiency, and longevity. Gone are the days of picking one language and platform and executing like crazy to meet the requirements of our problem domain. Different nails sometimes require different hammers.
Given that there are hundreds of available languages on the .NET platform, what makes them different from each other? Truth be told, most are small evolutions of each other, and are not particularly useful in an enterprise environment. However, it is easy to class these languages into a range of programming paradigms.
There are various ways to classify programming languages, but I like to take a broad-strokes approach, putting languages into four broad categories: imperative, declarative, dynamic, and functional. Let's take a quick look at these categories and what languages fit within them.
Your classic all-rounder — imperative languages describe how, rather than what. Imperative languages were designed from the get-go to raise the level of abstraction of machine code. It's said that when Grace Hopper invented the first-ever compiler, the A-0 system, her machine code programming colleagues complained that she would put them out of a job.
It includes languages where language statements primarily manipulate program state. Object-oriented languages are classic state manipulators through their focus on creating and changing ...