EL LENGUAJE DE LAS MÁQUINAS

Lenguajes de Programación

Los lenguajes de programación

Sabemos que el lenguaje es la forma en que las personas se comunican entre sí. En la tecnología, el lenguaje de las máquinas es el lenguaje que las personas utilizan para decirle a las máquinas "lo que quieren que hagan", pero no en lenguaje humano, sino, en lenguaje de las máquinas: a través de símbolos, letras y números combinados en secuencias especiales, que forman una sintaxis (lógica del lenguaje) que no responden a la lógica de un lenguaje humano, de aquí, lo de "código". Anteriormente se explicaba el lenguaje binario como la forma más básica de comunicarse con las máquinas, pero hay otros niveles después de este.
Digamos que en lenguaje humano si quieres que alguien diga un saludo, le das instrucciones directas en lenguaje humano, le dices:-Debes decir la palabra "hola" para saludar a otras personas- , la persona entiende y ejecuta (dice: hola), pues en lenguaje máquina por ejemplo, si se quiere que la máquina salude, se le dan instrucciones a modo de código :
print ("HOLA"), console.log("HOLA") y la máquina entiende y ejecuta estas instrucciones, cabe aclarar que en el ejemplo coloco la misma instrucción, pero en formas distintas, pues estas pueden variar, según el lenguaje de programación que se use para crear el sistema, tal y cómo sería decir "hola" en español, "hello" en inglés, "salut" en francés, etc.
Los lenguajes de programación son herramientas que permiten a los desarrolladores dar instrucciones específicas a una computadora para que realice diversas tareas. Son, en esencia, un idioma que los humanos utilizan para comunicarse con las máquinas, traduciendo ideas y comandos en un formato que el hardware puede comprender y ejecutar. En otras palabras,un lenguaje para "escribir" el código
Estos lenguajes son la base de casi toda la tecnología digital que conocemos y usamos, desde aplicaciones móviles, sitios web y videojuegos hasta sistemas empresariales y de inteligencia artificial. Su existencia es fundamental porque simplifican enormemente la interacción con el ordenador, que de otra manera solo entendería secuencias de ceros y unos directamente.
Existen distintos tipos de lenguajes de programación, clasificados principalmente por su nivel de abstracción en relación a su sintaxis y cercanía a las máquinas o a los humanos:

Lenguajes de bajo nivel(menos abstracción y más cerca de máquinas)
-Lenguaje muy básico llamado sistema binario, que solo entiende dos "dígitos": el 0 y el 1
-El lenguaje ensamblador, están muy cerca del hardware de la computadora, ofreciendo un control detallado pero siendo difíciles de escribir y comprender por las personas
Lenguajes de alto nivel (mayor abstracción y más cerca de humanos)
-Son mucho más parecidos al lenguaje humano, por lo tanto, son mmás fáciles de aprender y usar
-Hay lenguajes más enfocados a la programación de frontend ( HTML, CSS,JavaScript) y otros más específicos para la programación backend (Java,Python), otros más enfocados para sistemas operativos
-De manera general algunos ejemplos son: Java, C++ o Python, JavaScript, HTML, CSS,Go, Ruby, PHP, SQL, TypeScript, C#, etc.
-Hay lenguajes para programar bases de datos relacionales y no relacionales, se parte de la base del Lenguaje de Consultas Estructuradas SQL o No Estructuradas (NoSQL), estos plantean la estructura de las bases de datos y luego para crearlas se usan otros lenguajes propios de los sistemas de gestión para programar lasBD, como Sistemas de bases de datos relacionales ó RDBMS, como MySQL, Oracle, SQL Server y PostgreSQL, donde la información se almacenaen tablas con filas y columnas, estableciendo relaciones entre los datos mediante índices o claves foráneas. Además están las bases de datos no estructuradas ó no relacionales, que se van a programar desde la estructura de NoSQL, que no exigen que los datos estén estructurados de antemano,se organizan generalmente como documentos, en este caso se utilizan Sistemas de gestión de bases de datos no relacionales como MongoDB, CouchDB, Redis, InfiniteGraph (orientada a grafos) etc. Además, existen las bases de datos orientadas a objetos como Lenguaje de Consultas de Objetos Estructuradas SOQL, que almacenan la información como objetos, con propiedades y relaciones usado en las aplicaciones Gestión de Relaciones con los Clientes o CRMcomo Salesforce
-Existen lenguajes especializados en la programación de dispositivos móviles comoKotlin para Android, Swift para iOS, Objective-C para iOS, etc
Compiladores
-Son programas que permiten que la computadora sea capaz de entender y ejecutar el código escrito en lenguajes de alto nivel, por lo que lo traducen a lenguaje de bajo nivel máquina
-Convierten todo el código de una vez para la ejecución o lo "interpretan" o sea leen y ejecutan el código línea por línea, por eso en ocasiones escuchamos expresiones como:"la máquina virtula de Java", "el compilador de C++" ó "el intérprete de Python". Esta funcionalidad de los compiladores se vincula mucho con el principio de programación "just in time" (Ejecución en el momento) que significa que el compilador se encarga de traducir todo el código de una vez, de aquí que sea tan importante cumplir con otro principio de la programación: "DRY" o No repetir código, criterio que se debe aplicar en la programación en general, para no repetir el mismo bloque de código en diferentes partes del programa, incluso si se trata de un sistema para la automatización en QA .
-Revisan los errores de sintaxis y semántica del código antes de ejecutarlo

En resumen: Los lenguajes de programación se basan en tres aspectos fundamentales:

  • 1-El lenguaje de bajo nivel
  • 2-El compilador
  • 3-El lenguaje de alto nivel
lenguajes-de-programacion

Especialización de los lenguajes de programación

¿Por qué hay tantos lenguajes de programación?
La existencia de tantos lenguajes de programación es una consecuencia de la evolución tecnológica y de la necesidad de adaptarse a los cambios en la tecnología de los dispositivos y en la forma en que se comunican con ellos para programarlos. Por lo que a medida la internet avanzaba y el uso de dispositivos móviles, era necesario crear lenguajes de programación que permitieran a los desarrolladores crear nuevas funcionalidades para los Softwares y que funcionaran en diferentes dispositivos y plataformas.
Algunos lengujes se han creado también con la intención de superar limitaciones de otros lenguajes, o incluso para conformar una Pila Tecnológica o Stack de lenguajes que significa o sea una serie de lenguajes que se acoplan para hacer un Software completo (Frontend, Backend, Base de Datos, etc.)
En la actualidad hay lenguajes especializados para dispositivos móviles, para hacer interfaces de usuarios, otros para videojuegos, y otros para sistemas operativos, otros para servidores y bases de datos, hay lenguajes para programar los Modelos de Lenguaje LLM o las IA en general, etc.

especializacion-lenguajes

Clasificación de los lenguajes de programación

¿Por qué es importante la comprensión de los lenguajes de programación?
Los lenguajes de programación son la base de casi toda la tecnología digital que conocemos y usamos, desde aplicaciones móviles, sitios web y videojuegos hasta sistemas empresariales y de inteligencia artificial. Su existencia es fundamental porque simplifican enormemente la interacción con el ordenador, que de otra manera solo entendería secuencias de ceros y unos directamente.
Anteriormente explicaba los lenguajes de programación en su clasificación más general por el nivel de abstracción, pero teniendo en cuenta lo explicado sobre su especialización y propósito de uso, trataré de agrupar estas clasificaciones, además de incluir otro aspecto como los paradigmas de programación, que en las lecciones relativas a la Automatización de QA, abordaré con más precisión, igual acá adelanto algunos conceptos, que más allá de definir tipos de lenguaje define que lenguajes se adaptan mejor a los tipos de programación que va a tener un Software. Lo más importante es entender que estas clasificaciones se relacionan:

  • Los lenguajes según su nivel de abstracción:
    Alto nivel: más cerca del lenguaje humano, con sintaxis más elaboradas, representan los problemas de programación más cercanos a la realidad humana.
    Bajo nivel: más cerca del lenguaje de las máquinas, con sintaxis menos elaboradas, más cercanas al lenguaje binario (0 y 1)
  • Los lenguajes según su propósito de uso:
    Propósito General: se usan para la programación de Softwares y sistemas operativos, no están creados con un propósito especial, se pueden usar para crear cualquier programa, cómo Python, Java, C++, JavaScript, Go, Ruby, PHP.
    Propósito Específico: se usan para la programación de un Software especializado, por ejemplo SQL se utiliza solo para las bases de datos, HTML se utiliza solo para la creación de paginas web, CSS se utiliza solo para dar estilo a las paginas web, en fin estos lenguajes no se podrían usar para crear Software generales con una capa de presentación y un backend para la programación de la lógica de negocio.
  • Los lenguajes según su método de ejecución:
    Compilados: para su ejecución se compilan en un lenguaje de bajo nivel, como C++, Java, etc.
    Interpretados: se ejecutan directamente en la memoria virtual del ordenador, como Python, JavaScript, Ruby, PHP, Go, etc.
  • Los lenguajes según su adaptación a un paradigma de programación
    Más que tipos de lenguajes acá se especifica que según las clasificaciones anteriores algunos lenguajes se adaptan mejor a las necesidades de programación que se requieran, por eso se utilizan siguiendo estos paradigmas:
    Imperativos: Se le indica al sistema lo que va hacer y como lo va a hacer, paso por paso, si va a realizar una operación se definen como la va a realizar.
    Declarativos: La mayoría de los lenguajes que popularmente conocemos son declarativos, esto se refiere a que las instrucciones que se van escribiendo, se dice lo que va a hacer o lo que se espera que haga el sistema, sin definir el como, se usan métodos y funciones que ya contienen una ejecución, que ya existen como operaciones, con pasos definidos, por ejemplo se usa un query para consultar un dato con SQL, la máquina lo ejecuta y retorna el dato, pero no se sabe lo que sucede detrás.
    Estructurados ó lógicos: Se declaran instrucciones en secuencia, desde arriba hacia abajo, se colocan condicionales, bucles, etc, esta programación se relaciona con arquitecturas de software monolíticas (programas de un solo módulo, con las funcionalidades muy acopladas).
    Orientado a Objetos: Separa al sistema en entidades llamadas objetos que tienen atributos y métodos, y luego permite crear instancias de estos y se conectan entre ellos. Permite la reutilización de código y la representación de las soluciones progrmáticas como objetos donde a partir de una concepción más general como "un esqueleto" se pueden crear el resto de soluciones y solo agregar los detalles específicos.
    Funcional: Se crean funciones y se ejecutan de manera independiente, divide al sistema en funciones, una única función que ejecuta una sola cosa y comparte los datos hacia otra función, se tiene funciones puras y recursivas. Es más útil para crear funciones simples y usarlas como parámetros de otras funciones más complejas, además se relaciona con un mismo input de datos y un mismo output de respuestas.
    Reactiva: Se programan los sistemas enfocados en el flujo de datos y las ejecuciones son reactivas a este flujo, por ejemplo la aplicación Uber, que analiza un flujo de datos en tiempo real y reacaciona a estos cambiando una ruta de viaje, una APP de delivery, un Software de streaming como Netflix, se observa como se comportan los datos según las acciones de los usuarios y sugiere películas. En este paradigma, el sistem actúa en base a los datos, es para grandes sistemas donde se mueven grandes volumenes de datos.
clasificaciones-lenguajes