Normally you write the program in a programming language like C#, that must be translated to machine code. The tool, that does perform this translation is called "compiler". The result is a binary file, that can be executed.
Unlike a compiler, who translates a source and creates a binary, there are also interpreters. They work very differently. Normally your will feed your source in the interpreter at runtime on the computer of the user and it will generate native code on-the-fly.
This has 2 disadvantages...
An example for a compiled language would be C or C++, while Perl is an interpreted language.