Imperative programming is the longest-known programming paradigm. Due to the language range of earlier programming languages, this approach was formerly the classic way of programming. It is the basis for the design of many programming languages, for example, ALGOL, BASIC, Fortran, Pascal, Cobol, C and all assembly languages.
Almost all processors are imperative: they are made to execute a series of elementary instructions, coded in the form of opcodes (operation codes). The set of opcodes forms the machine language specific to the processor architecture. The state of the program at a given time is defined by the contents of the central memory at that time. They are often compared with cooking recipes, each step is an instruction, and the physical world is the modifiable state. The vast majority of programming languages are imperative. Defining characteristics for imperative programming are:
- The source code specifies what is to be done, in what order and how
- To control the execution of commands, the developer uses control structures, for example, sequence, loop, and conditional branching.
The abstract execution model underlying the imperative paradigm is closely based on the execution of machine code on computers implemented according to the Von Neumann architecture. For example, there are conditional and unconditional jump instructions. The status of the computer or program is determined by the content of data fields in the main memory and the state of system variables.
The fact that during the physical execution of computer programs in the processor, the individual instructions of the machine code are executed “instruction by command” is not decisive for the classification as ‘imperative’, because this is always the case, regardless of the paradigm practised. Rather, ‘imperative’ presupposes that “a developer creates code that describes in detail the steps that the computer must perform to accomplish the task.”
Apart from these, although the programming languages are open source, in some cases there are limitations. For example, if you want to write your own C compiler, you would need to follow the ISO C standards and pay for them. However, GNU-licensed compilers are free.
The reason C is popular is that the fees for the whole university were not huge. There are proprietary programming languages and languages which are virtually restricted. C, C#, C++, Python, Ruby, PHP, and Java are popular for these kind of unrelated reasons.
In real life, forms of paradigms are generally mixed these days because both have their pros and cons. Probably the declarative programming style is increasingly used now.