2  Lenguajes de programación

En esta sección se hará una revisión de algunos temas relacionados con la programación de los computadores y los lenguajes de programación. En esta revisión se hace mención a los tipos de lenguaje de programación y a los paradigmas de programación.

Preparación de clase

En sus propias palabras, explique lo que le transmitió y lo que le enseño cada parte de lo que leyó en el texto, incluya su discusión, reflexiones y conclusiones al respecto; exponga lo que no entendió e intente encontrar por su cuenta respuestas a las preguntas que le surgieron, para poder compartirlas en clase.

2.1 La programación de computadores

  • “Un programa de computador es un conjunto detallado de instrucciones paso a paso que indican al dispositivo las acciones a realizar con exactitud. Si cambiamos el programa, entonces la computadora realiza una secuencia diferente de acciones y, por consiguiente, ejecutará una tarea diferente”.

  • “El software (los programas) regulan el hardware (la parte física)”. “El proceso de creación de software se llama programación”.

2.2 ¿Qué es un lenguaje de programación?

Como un programa es una secuencia de instrucciones que le dicen a un computador lo que debe hacer, naturalmente esas instrucciones se le deben dar en un lenguaje que pueda “entender”. El lenguaje “natural” humano, en el idioma que sea, sigue siendo entre difícil e imposible de “comprender” por un computador.

El conjunto de palabras o símbolos (código de escritura) que se usan para que un computador reciba instrucciones es lo que se llama un lenguaje de programación. Cada lenguaje de programación tiene un formato preciso (su sintaxis) y un significado preciso (su semántica).

Una característica relevante de los lenguajes de programación es precisamente que más de un programador puedan tener un conjunto común de instrucciones que puedan ser comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.

Existen numerosos lenguajes de programación (por ejemplo, ver los que se listan y comparan en https://en.wikipedia.org/wiki/Comparison_of_programming_languages).

Cada lenguaje de programación tiene sus características propias, y por ende, tiene sus propias ventajas y desventajas dependiendo de cómo se le mire. En el gráfico de este enlace se dan unas ciertas ventajas y desventajas de los “principales lenguajes de programación para ciencias de datos” (en la opinión del que hizo el gráfico). Adicionalmente, tenemos la comparación que por ejemplo se hace aquí

Por otro lado, es importante tener claro que los lenguajes de marcado no son lenguajes de programación. En el Apéndice A encontrarán una pequeña revisión de estos otros tipos de lenguaje. Dicha revisión está enfocada en lo que suelen necesitar estadísticos y afines, de los lenguajes de marcado, para la obtención de informes, reportes, presentaciones y documentos en general.

2.3 Tipos de lenguajes de programación

  • Lenguajes de máquina: Instrucciones en cadenas binarias.
  • Lenguajes de bajo nivel: Código de maquina y lenguaje ensamblador, se trabaja con los registros de memoria de forma directa.
  • Lenguajes de medio nivel: Se acerca a los lenguajes de bajo nivel pero teniendo al mismo tiempo algunas cualidades de lenguaje humano.
  • Lenguajes de alto nivel: Están formados por elementos lo más cercanos que se pueda al lenguaje natural.

2.4 Traducción de los lenguajes

Un computador únicamente “entiende” instrucciones en cadenas binarias, así que todos los demás lenguajes de programación deberán traducirse a lenguaje de máquina para que el computador pueda seguir las instrucciones que ahí se le dan. Es evidente que se requiere un mecanismo que traduzca en lenguaje de máquina, las instrucciones dadas en el lenguaje de programación de nuestra elección. Dicho mecanismo es básicamente un programa que se encarga de leer el lenguaje que estemos utilizando (programa fuente) y lo traduce a un programa equivalente en el lenguaje de máquina (programa objeto). Como parte importante de este proceso de traducción, el traductor informa a su usuario de la presencia de errores en el archivo fuente.

La traducción se hace usualmente de una de dos maneras:

  • Se traducen por completo todas las instrucciones que están dadas en un archivo, produciendo otro archivo con las instrucciones traducidas. A ese proceso se lo llama compilar y al programa traductor se le denomina compilador.

  • Las instrucciones se van traduciendo conforme son encontradas o dadas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como interpretes.

2.5 Paradigmas de programación

“Un paradigma de programación indica un método de realizar cómputos y la manera en que se deben estructurar y organizar las tareas que debe llevar a cabo un programa”

Los paradigmas fundamentales están asociados a determinados modelos de cómputo y estilos de programación.

Los lenguajes de programación pueden incorporar varios paradigmas (lenguajes multiparadigma).

Programación imperativa:

“In computer science, imperative programming is a programming paradigm of software that uses statements that change a program’s state. In much the same way that the imperative mood in natural languages expresses commands, an imperative program consists of commands for the computer to perform. Imperative programming focuses on describing how a program operates step by step, rather than on high-level descriptions of its expected results.”

Programación estructurada:

Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making extensive use of the structured control flow constructs of selection and repetition , block structures, and subroutines.”

Programación procedimental:

Procedural programming is a programming paradigm, derived from imperative programming, based on the concept of the procedure call. Procedures (a type of routine or subroutine) simply contain a series of computational steps to be carried out. Any given procedure might be called at any point during a program’s execution, including by other procedures or itself.”

Programación orientada a arreglos:

“In computer science, array programming refers to solutions which allow the application of operations to an entire set of values at once… Modern programming languages that support array programming (also known as vector or multidimensional languages) have been engineered specifically to generalize operations on scalars to apply transparently to vectors, matrices, and higher-dimensional arrays… In these languages, an operation that operates on entire arrays can be called a vectorized operation…”

Programación orientada a objetos:

Object-oriented programming is a programming paradigm based on the concept of <>, which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods).”

Programación funcional:

“In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.”

En el curso trabajaremos:

  • El paradigma de programación imperativa estructurada procedimental (PIEP), en donde un conjunto de instrucciones se ejecutan de una en una, de principio a fin, de modo secuencial excepto cuando intervienen estructuras de control o de salto de secuencia.

  • El paradigma de programación orientado a objetos (POO), el cual se basa en el diseño y construcción de objetos que se componen de datos (atributos) y operaciones sobre esos datos (métodos). El programador define en primer lugar los objetos del problema junto con sus atributos y operaciones.

  • De manera un tanto indirecta, se tocarán algunos aspectos o temas que se podrían considerar parte de los paradigmas de programación funcional y orientado a arreglos.