Tema 2 - La programación y sus lenguajes


Grupo 10 - Marcel Andrei Voicu, Darius Dumitras Tamas, Juan García López

Resumen

Para explicar qué es un lenguaje de programación, debemos empezar primero por aclarar un concepto básico: la representación de la información.

Cuando hablamos con otras personas, transmitimos nuestras ideas a través de la voz, de modo que las ondas sonoras son escuchadas e interpretadas por el receptor: así, estas ondas sonoras son una representación de la información que queremos transmitir. De forma similar, cuando escribimos una carta, esa sucesión de símbolos, a la que llamamos texto, representa la información que queremos transmitir. Pues bien, los ordenadores son máquinas encargadas de manejar información, y esa información es representada mediante números binarios o, dicho de otra forma, sucesiones de “bits”. Un “bit” es la representación de información más pequeña que maneja un ordenador, y su valor puede ser un 1 (uno) o un 0 (cero). Con un solo bit podemos representar dos valores o “palabras” diferentes (1 ó 0), pero con dos bits ya podemos representar cuatro (00, 01, 10, 11). Es decir, que con n bits podemos representar 2^n “palabras” diferentes.

Pero, cuando un ordenador lee, por ejemplo, la sucesión de 4 bits “0100”, ¿qué significa? Para el ordenador esto es indiferente, pues somos nosotros, los humanos, los que decidimos interpretar esa sucesión de un modo u otro. Una forma de interpretar esa sucesión (o cadena) es como un número natural (0, 1, 2, etc.). Si la sucesión “0000” lo interpretamos como el número “0”, “0001” como el número “1”, “0010” como el 2, “0011” como el 3, y así sucesivamente hasta “1111” como el 15, entonces “0100” puede significar el número “4”. Pero también podríamos interpretar esa sucesión como una letra de nuestro abecedario, y decidir que “0100” se traduzca en la letra “D”. Y no sólo eso, podemos ir más allá y “enseñar” al ordenador a que, si lee una sucesión determinada de bits, comience a realizar una tarea en concreto, como por ejemplo sumar una sucesión de bits A con otra sucesión de bits B, y escribir el resultado en alguna parte de su memoria.

Dicho esto, podemos definir el concepto “lenguaje de programación” como una serie de órdenes que es capaz de interpretar una máquina, de modo que ésta ejecute determinadas acciones, según lo que se le ordene. Los ordenadores interpretan las órdenes leyendo sucesiones y sucesiones de bits, y los datos que controlan son, a su vez, sucesiones de bits. Así, el lenguaje de programación más básico es el lenguaje binario, también llamado lenguaje máquina, y un “programa” es una sucesión de órdenes concretas que hemos escrito para que lo ejecute un ordenador.  El papel de los programadores es escribir órdenes que puedan ejecutar los ordenadores, pero el lenguaje máquina está demasiado alejado a lo que un ser humano está acostumbrado a hablar (nosotros utilizamos oraciones, con sus sujetos, predicados, verbos, etc., no sucesiones de unos y ceros sin aparente significado). Por eso, existen lenguajes de programación de “alto nivel”, más “alejados de la máquina”, porque se asimilan más al modo en que los humanos nos comunicamos. Hay que tener claro que estos lenguajes de “mayor nivel” se construyen sobre el lenguaje máquina.

Cuando escribimos en lenguajes de “alto nivel”, en lugar de escribir unos y ceros escribimos palabras, como “for” o “while”, y utilizamos operadores matemáticos, como “+” o “*”, entre otros. Estas palabras (“for,” “while”, etc.) deben ser traducidas a las sucesiones de bits correspondientes, para que lo pueda entender nuestro ordenador. Esta tarea la realizan programas llamados “compiladores”, que son, en resumen, traductores de lenguajes de “alto nivel” a lenguaje máquina. Por ello, un lenguaje de programación siempre viene acompañado de un compilador propio.

Existen varios conjuntos de órdenes que frecuentemente mandamos ejecutar a los ordenadores, y que, por ello, suelen recoger la mayoría de lenguajes. Algunos de estos conjuntos de órdenes, a los que nos referimos como “estructuras de control” son los bucles y las condiciones: solemos ordenar a nuestro ordenador que ejecute varias veces unos pasos determinados, mediante bucles; y solemos indicarle también que, dependiendo de ciertas condiciones (como, por ejemplo, que una variable tenga un valor determinado), debe realizar una tarea u otra. Existen muchos tipos de lenguajes de programación, y su razón de ser reside en el objetivo que necesitemos que el ordenador cumpla, pues existen lenguajes especializados para tareas más concretas.

Si no se han entendido completamente, o se quiere profundizar más en el ámbito de la programación, una forma que tienen las escuelas de enseñar las bases de la programación es con la página web Scratch.

Es importante distinguir que los lenguajes tienen un estilo y características propias, por lo que podemos agruparlos en lo que llamamos paradigmas de programación. Podríamos dividirlos en 2: la programación imperativa y la programación declarativa, siendo divididos cada uno en subramas a la vez.

Un ejemplo sencillo para distinguirlos es lo que buscamos con cada uno. Con la programación imperativa, buscamos el "cómo" queremos llegar a la solución, por lo que estos lenguajes se caracterizan por ser fáciles de entender y expresivos, priorizando el orden e instrucciones que el ordenador debe seguir para llegar a la solución. Entre los lenguajes más sonados que se caracterizan por seguir este paradigma se encuentran Pascal, Fortran y C.

En la programación declarativa buscamos el "qué", esto es, priorizar la descripción del resultado. Los lenguajes que siguen este paradigma se suelen caracterizar por el uso de la recursividad, como son Lisp, Prolog y Haskell. Cabe destacar que el primero es el modelo clásico y por ende el más antiguo, mientras que el segundo se desarrolló a posteriori.

Software no sólo implica programa de un ordenador, sino también documentación (qué hace dicho programa, o funciones escritas por el programador), mantenimiento (control de versiones, actualizaciones, ampliaciones…), la instalación y el uso.

La ingeniería del software estudia la creación del software de calidad basándose en métodos y técnicas de ingeniería, dichas técnicas vienen definidas en lo que se conoce como el proceso de creación del software, y existen diferentes formas de crear este proceso, sin embargo, los procedimientos a seguir en proyectos de la ingeniería del software son: Definición de requerimientos, análisis, diseño, implementación, pruebas y mantenimiento.

Aunque en el mundo empresarial la ingeniería del software no es siempre tan bien tratada como se debería, debido a que se preocupan más de sacar un software “funcional” (nótense las comillas), a un software de calidad.

La relación entre el lenguaje de programación y la ingeniería del software es directamente observable, debido a que en la ingeniería del software se estipula qué paradigma de programación se va a utilizar, y con ello que lenguaje de programación, y con ello que entorno/s de desarrollo.

Ampliación

En cuanto al desarrollo de código y entornos de programación, cada vez vemos más la inclusión de métodos basados en Inteligencia Artificial que nos ayudan a la hora de programar, como el completado de código inteligente, que a evolucionado pasando de sugerir tipos y palabras generales a sugerir teniendo en cuenta el contexto en el que se encuentre el usuario dentro del programa.

Una de las IAs que más atención acapara en este ámbito es Copilot, que está integrada en Visual Studio, uno de los entornos de programación más famosos y utilizados por la comunidad de programadores. Esto nos da una visión de lo que podríamos ver en el futuro: Inteligencias Artificiales capaces de escribir código de manera autónoma e independiente. De hecho, Microsoft ya tiene un modelo más que listo para lanzarlo al mercado, capaz de generar programas enteros a partir de una descripción en lenguaje natural.

Es obvio que esto genera una serie de dudas sobre dichas Inteligencias…¿Serían capaces de escribir igual o mejor que los humanos? ¿Desaparecerán los programadores? Aunque estas preguntas parezcan lejanas, quizás estemos más cerca de lo que creamos para hallar las respuestas.

Opinión al respecto

En cuanto a la opinión al respecto, nos basamos en el fundamento de que la tecnología crece con pasos agigantados, lo que hoy en día se conoce como electrónica digital, fundamentada en ceros y unos para representar datos está cerca de cambiar debido a la computación cuántica, donde el número de estados no es binario, sino que se representa mediante cubits, permitiendo un manejo mucho más amplio de información.

Con este desarrollo de la computación cuántica se tendrán que desarrollar un nuevo software, estándares… de un modo similar a como pasaron los superordenadores anteriores a lo que conocemos a día de hoy como ordenador de uso personal, se puede estimar que el futuro de la computación estará escrito de una manera similar a cómo estuvo escrito el pasado.

Aparecerán nuevos lenguajes de programación, se agruparán en paradigmas, se mejorará la tecnología, se acabarán abaratando los costes, las redes cada vez se harán más potentes y más capaces de manejar volúmenes mayores de información, aumentará la preocupación por la seguridad, etc.

En resumen, creemos que la computación evolucionará drásticamente y esperamos que los errores (de la computación) del presente se corrijan en el futuro.

Referencias

https://es.wikipedia.org/wiki/Estructuras_de_control
https://ubunlog.com/intellij-idea-ide-java/
https://en.wikipedia.org/wiki/Recursion
https://scratch.mit.edu/
https://www.businessinsider.es/google-crea-ia-capaz-programar-como-mejores-humanos-1005689
https://www.muyinteresante.es/tecnologia/articulo/desarrollan-una-ia-capaz-de-escribir-codigo-de-programacion-desde-el-lenguaje-natural-621622218649
https://en.wikipedia.org/wiki/Qubit


Comentarios

Entradas populares de este blog

Tema 6 - Qué es el Business Intelligence: hacia el Big Data

Tema 1

Tema 4 - SEO/SEM, concepto y funcionamiento en Google