Incluye, además, todas las tareas necesarias para que el código funcione correctamente y cumpla el objetivo para el cual se escribió.Escribir programas así resultaba demasiado complicado, también era difícil entenderlos y mantenerlos una vez escritos.Por ejemplo, para sumar se podría usar la letra A de la palabra inglesa add (añadir).Con el tiempo los ensambladores incorporaron facilidades adicionales, pero siempre manteniendo una correspondencia directa con las instrucciones de procesador.Además, si se usaba otro modelo de computadora, en muchos casos había que reescribir el programa con otras instrucciones.Esta tarea es automática, por medio de un programa adicional que toma el código escrito y lo procesa.[3] Generalmente existe una fase posterior a la compilación denominada enlace o enlazado (linking en inglés).Según Niklaus Wirth, un programa está formado por los algoritmos y estructuras de datos.La opción más común es compilar el programa obteniendo un módulo objeto, aunque también, si el lenguaje lo soporta, puede ejecutarse en forma directa pero solo a través de un intérprete.Habitualmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos: el primer paso se llama compilación (propiamente dicho) y traduce el código fuente, escrito en un lenguaje de programación y almacenado en un archivo de texto, a código en bajo nivel (normalmente a código objeto, no directamente a lenguaje máquina).El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado a compilar y se añade el código de las funciones necesarias que residen en bibliotecas externas, para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.Un programa podría tener partes escritas en varios lenguajes, por ejemplo, Java, C, C++ y ensamblador, que se podrían compilar de forma independiente y luego combinarse para formar un único módulo ejecutable.