Gottfried Wilheml von Leibniz (1646-1716), quien aprendi matemticas de
forma autodidacta (mtodo no aconsejable en programacin) construy una mquina similar a la de Pascal, aunque algo ms compleja, poda dividir, multiplicar y resolver races cuadradas. Pero quien realmente influy en el diseo de los primeros computadores fue Charles Babbage (1793-1871). Con la colaboracin de la hija de Lord Byron, Lady Ada Countess of Lovelace (1815-1852), a la que debe su nombre el lenguaje ADA creado por el DoD (Departamento de defensa de Estados Unidos) en los aos 70. Babbage dise y construy la "mquina diferencial" para el clculo de polinomios. Ms tarde dise la "mquina analitica" de propsito general, capaz de resolver cualquier operacin matemtica. Muri sin poder terminarla, debido al escepticismo de sus patrocinadores y a que la tecnologa de la poca no era lo suficientemente avanzada. Un equipo del Museo de las Ciencias de Londres, en 1991, consigui construir la mquina analtica de Babbage, totalmente funcional, siguiendo sus dibujos y especificaciones. Para crear un programa, y que la computadora lo interprete y ejecute las instrucciones escritas en l, debe escribirse en un lenguaje de programacin. En sus inicios las computadoras interpretaban solo instrucciones en un lenguaje especfico, del ms bajo nivel, conocido como cdigo mquina, siendo ste excesivamente complicado para programar. De hecho solo consiste en cadenas de nmeros 1 y 0 (sistema binario). Para facilitar el trabajo de programacin, los primeros cientficos, que trabajaban en el rea, decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o abreviaturas provenientes del ingls; las codificaron y crearon as un lenguaje de mayor nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se podra usar la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es bsicamente lo mismo que hacerlo en lenguaje mquina, pero las letras y palabras son bastante ms fciles de recordar y entender que secuencias de nmeros binarios. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un mtodo sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos nmeros puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastar con solo una. Una vez que se termina de escribir un programa, sea en ensamblador o en algunos lenguajes de alto nivel, es necesario compilarlo, es decir, traducirlo completo a lenguaje mquina.1 Eventualmente ser necesaria otra fase denominada comnmente link o enlace, durante la cual se anexan al cdigo, generado durante la compilacin, los recursos necesarios de alguna biblioteca. En algunos lenguajes de programacin, puede no ser requerido el proceso de compilacin y enlace, ya que pueden trabajar en modo intrprete. Esta modalidad de trabajo es equivalente pero se realiza instruccin por instruccin, a medida que es ejecutado el programa.