A computer language is an interface between man and machine.
Machines execute sequences of instructions belonging to their instruction set. Such instructions are rather simple and tightly bound to features of the machine hardware. For instance, ``load into register A the contents of memory location 00900752'', or ``multiply the numbers contained into registers A and B, leaving the result in register C'' could be two examples of instructions at the machine level. A program written in machine language (or assembler) would not be easily transferable to a computer produced by a different manufacturer. Moreover, such a program would be very hard to decipher for a human examining it.
So called high level computer languages are the solution. A language is a machine-independent way to specify the sequence of operations necessary to accomplish a task. A language can be designed to express in a concise way a ``common'' sequence of operations. A line in a high level language can embody powerful operations, and correspond to tens, or hundreds, of instructions at the machine level. Of course, what is ``common'' depends on the kind of problem at hand. For this reason, many different languages exist in the computer world, aimed at solving problems in different areas.
The compiler is the tool to convert a program written in a high level language into the sequence of machine instructions required by a specific computer to accomplish the task. Users typically control details of the operation of compilers by means of options supplied on the command line, or directives embedded in the program source, but they seldom need to examine the resulting machine language code.
However, one should not forget the fact that programs are also an interface with humans, and a way to communicate between humans. A program carries with it the information of how a problem is being solved, and it is extremely important for this information to be presented in a clear, complete way to people examining the code. In the scientific world, quite often the source code is also the main documentation for the program. For this reason, it is very important to have in mind people needs--and not only machines needs--when writing a program. In practice, this means writing informative comments in the code, using meaningful names for symbols, avoiding ``dirty tricks'' unless absolutely necessary. This documenting activity should always be done at the time of code writing, not deferred to a later time that may never come.