
Profesor Asociado, Facultad de Medicina, Universidad de los Andes
Twitter: @DrRicardoPena
¿Qué es un lenguaje?
Un lenguaje es una forma de comunicación estructurada que utiliza una serie de signos para transportar un mensaje entre un emisor y un receptor. El mensaje se transmite por medio de un código, construido con unas reglas que deben ser conocidas y compartidas entre el emisor y el receptor. El código se puede transferir de diferentes formas (auditiva, visual, táctil). Además, el mensaje debe estar organizado de manera que sus elementos básicos (ej. Palabras) se comuniquen con la estructura correcta (gramática).
Esta es la información que seguramente aprendimos en cursos de español en el colegio. Sin embargo, ¿sabía usted que el análisis del lenguaje requiere un análisis matemático profundo? Claude Shannon en la primera mitad del s. XX buscó y sentó las bases de la teoría de la información, una explicación matemática del contenido, capacidad, limitaciones y ruido que componen la comunicación [1]. La teoría de la información es apasionante y nos permite entender las relaciones entre los elementos de la comunicación del día a día, y como prácticamente cualquier pieza de información, puede ser codificada de forma digital (y en la actualidad incluso por métodos cuánticos) por medio de bits de información (dígitos binarios) en forma de 1 y 0 [2]. Codificar la información en dígitos binarios tiene la ventaja de permitirnos interactuar con sistemas electrónicos. Finalmente, un chip o procesador procesa información por medio de microswitches electrónicos que leen intensidades de corriente como bits. Los 1 se pueden codificar como pulsos de mayor corriente y los 0 como pulsos de corriente muy baja. La teoría de información puede ser motivo de una columna aparte, pero es importante entender la importancia de codificar la información en un código binario para entender el lenguaje del computador.
Los lenguajes de programación
Cuando hablamos de un lenguaje de programación también hablamos de comunicación, sólo que en esta oportunidad estamos comunicándonos primero con el computador, y segundo con otras personas que pueden requerir conocer el mensaje que estamos pasando al computador. Para comunicarnos con el computador debemos usar un lenguaje que sea entendible para la maquina y para nosotros [3]. Esto se logra a través de dos niveles de comunicación: lenguajes de alto nivel y lenguajes de bajo nivel.
El nivel del lenguaje no hace referencia a la calidad (no significa que cualitativamente un lenguaje sea mejor que el otro, porque cada tipo de lenguaje tiene un uso específico). El nivel del lenguaje se relaciona con la cercanía del lenguaje al lenguaje interpretado por la máquina. Entre más bajo sea el lenguaje, más cerca de ser interpretado directamente por el microprocesador (microchip) de la máquina.
Un lenguaje de alto nivel como Python, R, Julia, JAVA, PHP tiene una sintaxis que es cercana al lenguaje que manejamos los humanos. Estos lenguajes tienen una estructura que utiliza palabras (generalmente inglés) y por lo tanto es relativamente fácil que nosotros lo podamos entender. Esto también hace que sean lenguajes más fáciles de aprender y utilizar para comunicar mensajes al computador.
El siguiente es un ejemplo del lenguaje SQL, el cual tiene una estructura sencilla y comprensible:
Imaginemos que usted trabaja en una institución de salud donde existen múltiples bases de datos. Una de ellas incluye el registro de atenciones a pacientes “Atenciones” y el nombre de la persona que realiza la atención
Usted podría usar el siguiente código para saber cuántas consultas ha realizado un trabajador
SELECT * FROM atenciones
COUNT atenciones.consultas
GROUP BY atenciones.nombre
LIMIT 3
Este código podría ser leido como:
SELECCIONE todas las columnas, DE la base de datos de “atenciones”. (El asterisco selecciona todas las columnas en una tabla)
CUENTE en la base de datos de “atenciones” el número de consultas.
AGRUPE los resultados por la columna “nombre”.
LIMITE los resultados a las 3 primeras filas.
# El objetivo no es que aprenda SQL en este momento, sino que reconozca la facilidad de leer el código.
Sin embargo, estás líneas de instrucciones no serían entendibles para el microprocesador del computador. Recordemos que el computador solo entiende 1 y 0. Para que las instrucciones del código sean entendibles por la maquina necesitamos “traducirlas”. Esta es una tarea de herramientas como los compiladores que están en el computador, y que luego de varios pasos logran convertir el mensaje a un código en lenguaje de ensamblaje o lenguaje de maquina (1 y 0). ¿Notan por qué era importante hablar de teoría de la información? El lenguaje de maquina permite que el procesador ejecute las instrucciones, manipulando dígitos en bloques de memoria (estas son explicaciones sobresimplificadas). El procesamiento de las instrucciones en el procesador requiere del uso de energía, y se ejecutan en forma de impulsos eléctricos. Parte de la energía del movimiento de los pulsos de electricidad se perderá en forma de calor ¿han notado como los dispositivos electrónicos se calientan cuando el número de tareas ejecutadas por el procesador aumenta?

Un lenguaje de bajo nivel podría solo correr en tipos de chip que tengan una arquitectura similar y que manejen el mismo tipo de lenguaje de máquina. Esto ofrece ventajas en cuanto al control fino de las tareas del procesador (ejemplo un control detallado y eficiente del uso de la memoria), pero también trae desventajas relacionadas con la compatibilidad del código entre dispositivos. En contraste, los lenguajes de alto nivel pueden correr en diferentes tipos de máquina, gracias a compiladores y programas que traducen el código para que sea compatible con el procesador de diversos computadores. Usted podría correr R en un computador Mac o PC.
¿Por qué hay tantos lenguajes de programación?
En la actualidad existen más de 300 lenguajes de programación [4]. Cada uno de ellos existe porque ha sido creado en momentos diferentes y con fines específicos [5]. Cuando hablamos de ciencia de datos es común escuchar nombres de lenguajes como Python y R. Ambos son lenguajes de alto nivel, que son muy comprensibles para los usuarios. Algunos lenguajes como R son excelentes para análisis estadístico. Esto no quieren decir que no puedan cumplir con otras tareas, pero su rendimiento en estadística es muy bueno. Otros lenguajes como python pueden tener más aplicaciones. Usted puede usar python para crear páginas web, aplicaciones, análisis estadístico y correr algoritmos de inteligencia artificial. Las diferencias en eficiencia hacen que algunas personas prefieran un lenguaje sobre otro. Por esta razón muchas personas realizan análisis estadísticos avanzados en R. Tareas similares podrían hacerse en Python, solo que podrían ser ligeramente menos eficientes
¿Qué son las librerías?
Las librerías son paquetes de instrucciones que se pueden cargar al programa que está utilizando y que cumplen unas tareas particulares de forma eficiente. Piense por un momento en un hospital. Una persona podría escribir una orden con la palabra “ecocardiograma”. Esa sencilla palabra funcionaría como una “librería” en un programa de programación, porque al ejecutarla se desarrollan procesos en un orden específico, con herramientas precisas, para cumplir con una tarea (hacer un ecocardiograma y entregar el resultado). Las librerías dentro de lenguajes como Python y R traen paquetes de instrucciones para cumplir tareas puntuales y de manera predecible [6]. Ejemplos de librerías en python son Pandas y Scikit-learn que permiten adelantar análisis en bases de datos y de aprendizaje de máquina, respectivamente. [3]
Entonces, ¿cuál lenguaje debo aprender?
Como en muchas situaciones la respuesta correcta es “depende”. Es importante que considere la tarea que desea desarrollar (ej. análisis estadístico, manipulación de bases de datos relacionadas, o aprendizaje de maquina) y el ambiente en el que se encuentra (si sus colaboradores o en su área de trabajo usan R, sería mejor trabajar con ese lenguaje). Busque apoyo de personas experimentadas que le puedan guiar durante el proceso. Luego es importante que revise las características de ese lenguaje, es decir, que aprenda su vocabulario, gramática y librerías.
Finalmente, recuerde que cometer errores cuando estamos aprendiendo a programar (e incluso con experiencia) es muy común y es muy frustrante. Sin embargo, esto no debería desanimarnos. Al igual que cuando hemos aprendido otro idioma como inglés o francés, la dedicación y la práctica deliberada nos permitirán avanzar con mayor eficiencia. Escoja un lenguaje, busque tutoriales, lea la documentación de las herramientas que ha escogido y busque un proyecto en el que pueda aplicar de forma inmediata lo que aprende. Ahora que ha llegado hasta esta línea… es el momento de iniciar su camino en la programación.
Referencias
[1] | «Claude E. Shannon: Founder of Information Theory,» [Online]. Available: https://www.scientificamerican.com/article/claude-e-shannon-founder/. |
[2] | «How Claude Shannon Invented the Future,» [Online]. Available: https://www.quantamagazine.org/how-claude-shannons-information-theory-invented-the-future-20201222/. |
[3] | «Programming Language,» [Online]. Available: https://www.webopedia.com/definitions/programming-language/. |
[4] | «Computer programming languages – types & differences,» [Online]. Available: https://www.hackreactor.com/blog/computer-programming-languages-types-amp-differences. |
[5] | «Why Are There So Many Programming Languages?,» [Online]. Available: https://www.freecodecamp.org/news/why-are-there-so-many-programming-languages/. |
[6] | «Libraries in Python» [Online]. Available: https://www.geeksforgeeks.org/libraries-in-python/. |
Ricardo , excelente esta aproximación muy clara de un mundo que se siente ajeno y complejo para la mayoría .
Me gustaMe gusta