Well, this is a course about programming paradigms. A language is classified as belonging to one of these families based on the view it takes of describing the solution to a problem, as well as what kind of data structures it can easily describe and handle and how it treats that data. Imperative programming is, of the three, the most closely tied to the underlying hardware. Problems are solved by giving a series of commands that say what to do. The first-class data types are usually pretty limited and closely linked to the hardware.
Variable names are just a mnemonic way of refering to memory addresses.
I have a friend who describes C as a really nice macro language for accessing and setting addresses. This really isn't much of an exageration. The imperative languages were a direct incremental step in the progress up from machine language, and assembly language. In my undergrad architecture course we learned to hand assemble C code to VAX assembler and it was really a pretty trivial task. In Functional programming the model of computation is much more abstract.