Una de las primeras herramientas que existen para diseñar soporte lógico son los lenguajes de programación. Estos no son más que un conjunto de instrucciones y reglas que permiten al usuario crear programas de una forma más o menos cómoda. Atendiendo a su carácter de equipo electrónico, un ordenador sólo entiende órdenes muy sencillas, convenientemente expresadas en código binario. Este, que normalmente emplea dos símbolos: el "0" y el "1", es bastante difícil de utilizar por parte de los programadores, por lo que ha sido preciso crear una serie de lenguajes de programación más accesibles. Siguiendo la tendencia apuntada en el párrafo anterior, se puede hablar de una clasificación de los lenguajes de programación en dos grandes bloques: los lenguajes de bajo nivel u orientados al equipo, y los lenguajes de alto nivel u orientados al problema. Los primeros , como su propio nombre indica, contienen instrucciones muy cercanas al funcionamiento físico del equipo (es decir, que son órdenes que el hardware de la máquina puede realizar de forma inmediata), por lo que se aprovecha al máximo, en cuánto a rapidez y a potencia se refiere, las posibilidades del ordenador. El lenguaje de bajo nivel más cercano al soporte físico del ordenador es el código máquina, que está basado que el código binario con el que funciona el equipo. La programación en código máquina lleva al máximo la optimización de las posibilidades del hardware, pero plantea algunos inconvenientes, como la dificultad de trabajar con unos y ceros y la imposibilidad de analizar visualmente el desarrollo lógico del programa (lo único que se ve es una amalgama de unos y ceros) y detectar errores antes de la ejecución del mismo. Otro inconveniente de los lenguajes de bajo nivel es que son específicos de la máquina en la que se está trabajando. Si se cambia de modelo de ordenador o de fabricante, lo más probable es que el programa escrito en código máquina no sea válido. El interés que existe en algunos ocasiones por trabajar con lenguajes de programación cercanos al funcionamiento del soporte físico de los equipos ha llevado al estudio de métodos que eviten la complejidad del trabajo con el código máquina. Una de las soluciones obtenidas es la de emplear un lenguaje de programación de bajo nivel, en el que se sustituya el manejo del código binario (unos y ceros) por el de instrucciones más legibles para el programador o usuario. Estas instrucciones son exactamente iguales a las del código máquina, pero su presentación en una forma más elaborada facilita el trabajo con ellas. El lenguaje de programación que surge de estas modificaciones se denomina ensamblador y se cataloga como de bajo nivel, aunque, en este sentido, está por encima del código máquina. Los ensambladores emplean instrucciones que se citan por un número reducido de letras, que dan idea de las operaciones y tratamientos que realizan. Así el usuario tiene una visión mucho mejor del programa que ha escrito y puede detectar visualmente errores. Los ensambladores tienen notables ventajas a la hora de su empleo, pues permiten la ejecución muy rápida de los programas (las instrucciones siguen muy de cerca lo que hace el soporte físico) y se aprovecha muy bien el tamaño de memoria disponible. Esto último es muy interesante cuando se trabaja con ordenadores de tamaño y potencia reducidos. Sin embargo, también son difíciles de emplear (aunque menos que el código máquina) por la lentitud de la tarea y porque requieren un excelente conocimiento de la estructura de la memoria del ordenador. De los lenguajes ensambladores, considerados de bajo nivel, se pasa ya a los de alto nivel. De ellos se dice que están orientados al problema, porque su diseño está pensado para que se adapten mejor a un determinado tipo de actividades, como el cálculo científico, o el tratamiento masivo de datos, o la inteligencia artificial, etc. En los lenguajes de alto nivel, las instrucciones no tienen nada que ver (o más bien poco) con las funciones que realiza el soporte físico del ordenador. Cada instrucción de un lenguaje de alto nivel se descompone en otras varias, más cercanas al nivel físico del equipo, que la CPU del ordenador debe realizar siguiendo un orden adecuado. Por ello, los programas escritos con lenguajes de alto nivel no pueden ejecutarse directamente en un ordenador, sino que deben convertirse adecuadamente en instrucciones de código máquina. Cuando el usuario ha acabado de escribir un programa en un lenguaje de alto nivel, debe someterlo a un proceso que se llama compilación y que, como parece lógico, lo llevan a cabo una serie de programas llamados compiladores. Las ventajas de realizar las tareas de compilación de esta forma se refieren a la potencia y a las posibilidades que brindan. Un compilador que realiza tres procesos con el programa original es más fácil de diseñar y, cambiando adecuadamente sus módulos, se puede aplicar a diversas máquinas o situaciones diferentes. Además la división en etapas permite que se detecten errores e incoherencias en el empleo del lenguaje en la primera de ellas, con lo que se avisa al programador o usuario para que realice los cambios oportunos. En muchos ordenadores comerciales, el paso del programa escrito en lenguaje ensamblador al correspondiente en código máquina no lo lleva a cabo el compilador se simplifica, pues sólo debe realizar dos de las tres tareas señaladas. En algunos lenguajes de alto nivel de la gama más sencilla no se emplean compiladores para las tareas de traducción de las instrucciones a código máquina, sino que existen otros programas bastante más simples que reciben el nombre de intérpretes. Cuando un lenguaje es interpretado y no compilado, las instrucciones se comprueban y traducen de una en una (en vez de todas en el mismo proceso), lo que simplifica notablemente la realización del intérprete, pero hace mucho más lenta la conversión de instrucciones en comandos de código máquina. El lenguaje Basic para pequeños microordenadores es un buen ejemplo de lenguajes de alto nivel que emplean el intérprete. La especialización de los lenguajes de alto nivel en tareas o grupos de aplicaciones concretas ha llevado a la existencia de multitud de ellos, cada uno con sus peculiaridades y su forma particular de desarrollar programas. Debido a su sencillez y a su aplicación a los ordenadores más populares, Basic (Beginners All-purpose Symbolic Instruction Code) es quizás el lenguaje de alto nivel más conocido. Basic debe gran parte de su difusión a las características de su diseño: empleo de palabras inglesas corrientes para denominar a las instrucciones y uso de símbolos matemáticos para las operaciones. Fundamentalmente, Basic se utiliza para resolver problemas científico-técnicos y generales que no presenten demasiada complejidad. Una de sus características principales, además de su sencillez de empleo, es que está pensado para su manejo en forma de diálogo con el ordenador, como corresponde al uso de intérprete en lugar de compilador. Cuando se realiza un programa en Basic, el programador o usuario va introduciendo sus instrucciones en el ordenador y el intérprete le va diciendo, una a una, si es correcta o no, para que en este último caso la modifique convenientemente. La sencillez en el manejo de Basic y el pequeño tamaño de memoria central de los ordenadores que requieren han sido los elementos clave para su incorporación a los equipos de dimensiones reducidas, lo que le ha dado una popularidad y una difusión tremendas. Muchos de los aficionados a estos temas y de los profesionales que se introducen por primera vez en el mundo de la informática lo hacen a través de Basic. Actualmente existen en el mercado numerosos compiladores de Basic y algunos de ellos tan completos y estructurados, que no tienen nada que envidiar a otros lenguajes como Pascal. Además el tratamiento de archivos se ha perfeccionado de tal manera que ni el mismo Cobol le puede hacer sombra. Existen también versiones para entornos gráficos que se basan en la programación para entorno objeto, con instrucciones altamente especializadas. Otro lenguaje de alto nivel muy extendido es Cobol (Common BusinessOriented Language), que además es históricamente el primer lenguaje se este tipo que se desarrolló. Cobol está diseñado para su aplicación en ambientes administrativos y comerciales, ya que trata con facilidad grandes cantidades de datos. La realización de nóminas o la gestión de actividades bancarias son dos ejemplosactividades corrientes, detrás de las que están programas escritos en Cobol. Fortran es un lenguaje muy potente para el tipo de tareas para el que está diseñado, pero su evolución a lo largo de los últimos años ha sido muy pequeña. Así, por ejemplo, no se le han añadido posibilidades para el tratamiento de gráficos o para el desarrollo de juegos. El resultado de todo ello es que Fortran ha seguido en su sitio, pero sin ganar nuevos campos de aplicación. Con una concepción mucho más moderna apareció, a finales de la década de los sesenta, el lenguaje Pascal. Este fue diseñado para facilitar la formación de alumnos en temas de programación informática. Su principal característica es que es un lenguaje que permite la programación estructurada, por lo que los programas escritos con él son muy compactos, presentan una estructura muy simple y tienen un diseño lógico coherente. Pascal es probablemente, después de Basic, el lenguaje de programación más difundido en el terreno de los microprocesadores. En la actualidad uno de los lenguajes que más reconocimiento tiene a nivel profesional, es el lenguaje C. Este ofrece un juego de instrucciones muy reducido, con una gran cantidad de funciones de librería las cuales las podremos ir enriqueciendo con nuevas funciones escritas a la medida de nuestras necesidades. Es de destacar el elevado grado de portabilidad que posee. Es un lenguaje estructurado. Es un lenguaje de alto nivel utilizado para la implementación de Sistemas Operativos y Lenguajes de alto nivel, como para la realización de Utilidades y Programas de Aplicación. Por otra parte posee características de relativamente bajo nivel (manejo de direcciones de memoria, acceso a funciones de entrada/salida, etc.). Entre la pléyade de otros lenguajes de alto nivel que se pueden encontrar en el mercado, conviene no olvidarse de Logo basado en lenguajes para inteligencia artificial y que incorpora numerosas posibilidades para que los niños aprendan a razonar; Lisp y Prolog, lenguajes diseñados específicamente para la realización de programas que siguen los principios de la inteligencia artificial; y Ada lenguaje especializado en la programación de sistemas informáticos controlados por microprocesador y que se utiliza bastante en aplicaciones militares. Con las posibilidades de la transmisión de datos, los ordenadores se pueden comunicar entre sí a grandes distancias, permitiendo la aparición de nuevos servicios y prestaciones.