Programming is instructing a computer to do something for you with the help of a programming language. The role of a programming language can be described in two ways:
According to the last statement, in programming we deal with two kind of things:
According to Abelson and Sussman ([ABELSON, 1985, 4,])
``.....we should pay particular attention to the means that the language provides for combinign simple ideas to form more complex ideas. Every language has three mechanisms for accomplishing this:
primitive expressions, which represent the simplest entities with which the language is concerned
means of combination, by which compound expressions are built from simple ones, and
means of abstraction, by which compound objects can be named and manipulated as units.''
A programming lanugage should both provide means to describe primitive data and procedures and means to combine and abstract those into more complex ones.
The distinction between data and procedures is not that clear cut. In many programming languages, procedures can be passed as data (to be applied to ``real'' data) and sometimes processed like ``ordinary'' data. Conversely ``ordinary'' data can be turned into procedures by an evaluation mecanism.