1  Programación

En este capítulo definiremos qué es la programación y exploraremos las etapas del diseño algorítmico y la codificación, aspectos fundamentales para desarrollar soluciones computacionales. Luego, introduciremos R como lenguaje de programación y explicaremos por qué es una herramienta tan utilizada en Estadística y Ciencia de Datos.

1.1 Qué es la programación

Las computadoras son una parte esencial de nuestra vida cotidiana. Casi todos los aparatos que usamos tienen algún tipo de computadora capaz de ejecutar ciertas tareas: lavarropas con distintos modos de lavado, consolas de juegos para momentos de entretenimiento, calculadoras súper potentes, computadoras personales que se usan para un montón de propósitos, teléfonos celulares con un sinfín de aplicaciones y miles de cosas más.

Todos estos dispositivos con computadoras de distinto tipo tienen algo en común: alguien “les dice” cómo funcionar, es decir, les indica cuáles son los pasos que deben seguir para cumplir una tarea. De eso se trata la programación: es la actividad mediante la cual las personas (o algoritmos de inteligencia artificial) le entregan a una computadora un conjunto de instrucciones para que, al ejecutarlas, ésta pueda resolver un problema. Los conjuntos de instrucciones que reciben las computadoras reciben el nombre de programas.

La programación es un proceso creativo: en muchas ocasiones la tarea en cuestión puede cumplirse siguiendo distintos caminos y al programar debemos imaginar cuáles son y elegir uno. Algunos de estos caminos pueden ser mejores que otros, pero en cualquier caso la computadora se limitará a seguir las instrucciones ideadas por nosotros.

Estas instrucciones deben ser transmitidas en un idioma que la computadora pueda entender sin ambigüedad. Para eso debemos aprender algún lenguaje de programación, que no es más que un lenguaje artificial compuesto por una serie de expresiones que la computadora puede interpretar. Las computadoras interpretan nuestras instrucciones de forma muy literal, por lo tanto a la hora de programar hay que ser muy específicos. Es necesario respetar las reglas del lenguaje de programación y ser claros en las indicaciones provistas.

Ahora bien, ¿por qué debemos estudiar programación en carreras como Licenciatura en Estadística y Licenciatura en Ciencia de Datos? La actividad de los profesionales que trabajamos con datos está atravesada en su totalidad por la necesidad de manejar con soltura herramientas informáticas que nos asisten en las distintas etapas de nuestra labor: recolección y depuración de conjuntos de datos, aplicación de distintas metodologías de análisis, visualización de la información, comunicación efectiva de los resultados, despliegue y puesta en producción de modelos, etc. Por eso, en la asignatura Programación 1 estudiaremos los conceptos básicos de esta disciplina, fomentando la ejercitación del pensamiento abstracto y lógico necesario para poder entendernos hábilmente con la computadora y lograr que la misma realice las tareas que necesitamos.

1.2 Etapas en la programación

Mencionamos anteriormente que la programación consiste en instruir a una computadora para que resuelva un problema y que la comunicación de esas instrucciones debe ser realizada de forma clara. Es por eso que, ante un problema que debe ser resuelto computacionalmente, el primer paso es pensar detalladamente cuál puede ser una forma de resolverlo, es decir, crear un algoritmo.

Un algoritmo es una estrategia consistente de un conjunto ordenado de pasos que nos lleva a la solución de un problema o alcance de un objetivo. Luego, hay que traducir el algoritmo elegido al idioma de la computadora.

Entonces, podemos decir que la resolución computacional de un problema consiste de dos etapas básicas:

1.2.1 Diseño algorítmico

Cotidianamente, hacemos uso de algoritmos para llevar adelante casi todas las actividades que realizamos: preparar el desayuno, sacar a pasear la mascota, poner en la tele un servicio de streaming para ver una película, etc. Cada una de estas tareas requiere llevar adelante algunas acciones de forma ordenada, aunque no hagamos un listado de las mismas y procedamos casi sin pensar.

Sin embargo, cuando estamos pensando la solución para un problema que va a resolver programando, debemos pensar uno por uno cuáles son todos los pasos a seguir, para asegurarnos de que cuando la computadora los siga, llegue a la solución. Suele ser útil escribir en borrador cuáles son esos pasos, de forma clara y ordenada, e incluso hacer diagramas. Una vez que hemos imaginado como resolver el problema mediante programación, podemos pasar a la siguiente etapa.

1.2.2 Codificación

Una vez que tenemos diseñada la solución al problema, hay que comunicársela a la computadora para que la siga. Para que ella pueda entender nuestro algoritmo, debemos traducirlo en un lenguaje de programación, que, como dijimos antes, es un idioma artificial diseñado para expresar cómputos que puedan ser llevados a cabo por equipos electrónicos, es decir es un medio de comunicación entre el humano y la máquina.

Al aprender sobre programación, comenzamos enfrentándonos a problemas simples para los cuales la etapa del diseño algorítmico parece sencilla, mientras que la codificación se torna dificultosa, ya que hay que aprender las reglas del lenguaje de programación. Sin embargo, mientras que con práctica rápidamente podemos ganar facilidad para la escritura de código, el diseño algorítmico se torna cada vez más desafiante al encarar problemas más complejos.

1.3 El lenguaje R y su importancia en Estadística y Ciencia de Datos

R es un lenguaje de programación y un entorno de software diseñado específicamente para el análisis estadístico y la visualización de datos. Fue creado por Ross Ihaka y Robert Gentleman como una implementación libre del lenguaje S, desarrollado en los laboratorios AT&T Bell. Desde su lanzamiento, R ha crecido hasta convertirse en una de las herramientas más utilizadas en Estadística, Ciencia de Datos e investigación en una amplia variedad de disciplinas. Su código es abierto y es mantenido por una comunidad activa de desarrolladores y usuarios, con actualizaciones constantes y una enorme cantidad de paquetes adicionales que amplían sus capacidades.

Una de las principales razones por las que R es tan popular es su flexibilidad. A diferencia de herramientas de software más rígidas, que solo permiten aplicar métodos predefinidos, R ofrece un lenguaje de programación completo que permite desarrollar soluciones adaptadas a problemas específicos. Esto significa que los usuarios pueden definir sus propias funciones, automatizar procesos y realizar simulaciones personalizadas, algo fundamental cuando se trabaja con problemas complejos que requieren enfoques innovadores.

Sin embargo, esta flexibilidad también implica una curva de aprendizaje más pronunciada en comparación con herramientas en las que sólo hay apuntar con el mouse y hacer clic para elegir algunas opciones en un menú. Algunos programadores provenientes de otros lenguajes pueden encontrar a R poco intuitivo o un tanto ambiguo en algunas cuestiones, pero es que ha sido pensado como una herramienta de programación para profesionales no formados en esa disciplina.

La comunidad de desarrolladores y usuarios de R ha desarrollado múltiples soluciones para hacer el lenguaje cada vez más eficiente y accesible. Existen paquetes optimizados para manejar grandes volúmenes de datos con rapidez y entornos o plataformas como RStudio, Shiny y Quarto que han ampliado el alcance de R, permitiendo desde el desarrollo de aplicaciones interactivas hasta la implementación de modelos en producción. Gracias a este continuo desarrollo del ecosistema R, este software es una opción potente y versátil para la Estadística y Ciencia de Datos.

Este libro, y la asignatura a la que pertenece, no se enfoca en las poderosas herramientas de análisis de datos que ofrece R, como la modelización estadística, la manipulación de datos o la visualización gráfica. En su lugar, enseñaremos fundamentos generales de programación, y los ejemplificaresmos particularemente con R. Por ejemplo, en lugar de usar funciones que ya fueron programadas por otras personas, reinventaremos la rueda y crearemos nuestras propias funciones; o en lugar de usar paquetes que nos ayudan a realizar procesos iterativos con gran eficiencia, exploraremos estructuras de control tradicionales como bucles. Es decir, frente a variados problemas vamos a dedicarnos a crear soluciones que ya existen y están disponibles en R, pero lo haremos con el fin de utilizar dicho lenguaje para aprender y ejercitar nociones básicas de programación. Esto nos ayudará a desarrollar un pensamiento algorítmico y ganar habilidad para generar soluciones propias y comprender con mayor profundidad lo que sucede “detrás de escena” en cada análisis.