Compilers work by translating all the program code into source code (machine code) first, which is then ran by the computer. Alternatively, an interpreter works by reading and translating each line of code as the program is being ran.
One advantage of a compiler is, once compiled, the machine code runs faster than interpreted code. Another advantage is that users of the code cannot view the original program code, so cannot change/redistribute the code. This makes using a compiler best for distributing finished programs to end users.
One advantage of using an interpreter is that it is better for debugging programs, as the program will run line by line until an error is detected. Another advantage is that there is no need for time-consuming recompiling of code each time the program is tested, the program can be run instantly. This makes using an intpreter best during the development and testing of code.