A la luz de las transformaciones globales, y la emergencia de nuevas formas de alfabetización habilitantes para una integración y participación plena en la sociedad del siglo XXI, la búsqueda por abrir espacios para el pensamiento algorítmico y computacional en las aulas de clase ha comenzado a presentarse como una opción válida, con varios países optando por incluirlo en sus planes de estudio, ya sea como una asignatura, o como un tema transversal al currículo, o unidades en las ciencia o las matemáticas.
Pese a que la evidencia sugiere que la mejor estrategia es darle una asignatura completa, también es importante analizar la postura de la transversalidad, por cuanto permite ver que la programación más que un campo especializado de conocimiento, es más una forma de pensar y hacer sentido de la realidad, al mismo nivel que el razonamiento científico y matemático; estas dos últimas fuertemente vinculadas entre sí, hoy comienzan a requerir fuertemente conocimientos sobre lenguajes de programación.
De estos, dos se han vuelto muy populares en las ciencias (tanto exactas como sociales) por su capacidad de procesar y manejar datos, además de tener una curva de aprendizaje relativamente pequeña comparada a otros lenguajes: R y Python. Ambos gratuitos, con sintaxis similar, de alto estándar para uso profesional (distinto de la programación en bloque), y una enorme comunidad de asistencia online que permite resolver varios problemas, y promover el aprendizaje autodidacta (algo que este autor ha podido comprobar).
Para este caso utilizaremos R, aunque para el ejercicio presentado, no presenta grandes diferencias a si utilizásemos Python. Lo que haremos será resolver un problema matemático de cambios y relaciones, los que consisten en:
Esto por cuanto, como se aprecia en la siguiente tabla, es el área peor evaluada en el PISA para Chile.
| Indicador | Media OCDE | Media Chile | diferencia |
|---|---|---|---|
| cambio y relaciones | 493 | 411 | 82 |
| cantidades | 495 | 421 | 73 |
| formulación | 492 | 420 | 72 |
| espacio y formas | 490 | 419 | 71 |
| interpretar | 497 | 433 | 64 |
| incertidumbre | 493 | 430 | 62 |
Utilizando los documentos de la OCDE extraje y traduje el siguiente ejercicio de prueba.
Debido a los altos costos del combustible, del orden de 0.42 zeds por litro, los dueños de la nave NewWave están pensado en equiparla con navegación por cometa. Se estima que la navegación por cometa tiene el potenciar de recudir el consumo de combustible en un promedio de 20%. El consumo anual de combustible de la nave es de 3.500.000 lts, y el costo de equipar la nave con navegación por cometa es de 2.500.000 zeds. ¿Aproximadamente después de cuántos años de ahorro de combustible se cubrirá el costo de la instalación de navegación por cometa?
Como se puede apreciar, este ejercicio supera bastante el uso puramente mecánico de la matemática, e incluye un alto grado de razonamiento secuencial, y abstracción numérica. Un pensador avanzado, estaría tentado a comenzar a trazar números en un papel, en este caso propondremos lo mismo, pero en un entorno de programación. Los invito a descargar R (y su IDE Rstudio (deskpot)), copiar y ejecutar los comandos expuestos en las cajas de color gris -hago énfasis en que este es solo un ejemplo, pues hay muchas otras formas de resolver este problema.
Comencemos:
Dado que lo que se busca obtener es la cantidad de años para recuperar el costo de la inversión ($2.500.000), la fórmula general sería
\[\frac{Costo\hspace{0.2cm}Inversion}{Monto\hspace{0.2cm}ahorro\hspace{0.2cm}anual} = Años\hspace{0.2cm}recuperación\hspace{0.2cm}de\hspace{0.2cm}la\hspace{0.2cm}inversión \]
O expresado en términos verbales, el costo de la inversión distribuido entre el monto ahorrado por año. El costo de la inversión es un valor que conocemos, $2.500.000, lo que expresado en lenguaje de programación se vería así:
CostoInversion <- 2500000
Esto en R se lee “a la variable CostoInversión se le asigna un valor de 2500000”, las Variables nos permiten alojar en ellas distintos elementos tales como letras, listas de cosas, funciones entre otras. En este caso CostoInversion almacenará un número de valor 2.500.000. Luego nuestra Fórmula N°1 queda expresada como en la siguiente secuencia:
CostoInversion / AhorroAnual # El slash “ / “ significa división
# si la ejecutan les dará
# error, por cuanto AhorroAnual no ha
# sido asignada, de momento omítanla
options(scipen = 999) # Esto desactiva la notación científica en R
# Noten que CostoInversión puede ser manipulada como si fuera un número
CostoInversion <- 2500000
CostoInversion + 500000
## [1] 3000000
AhorroAnual es otra variable que desconocemos, pero tenemos el precio por litro 0,42, la cantidad de litros consumido anualmente, 3.500.000, y el porcentaje que ahorra la navegación por comenta, 20% (o 0.2 en proporción). Asignemos las variables:
PrecioLitro <- 0.42
ConsumoAnual <- 3500000
AhorroCometa <- 0.2
Dado esto el AhorroAnual estaría dado por la siguiente fórmula:
AhorroAnual <- (PrecioLitro * ConsumoAnual) * AhorroCometa # Asterisco “*” es multiplicación
# La lectura de esto es "se ahorra el 20% del total gastado anualmente"
Lo que está entre paréntesis corresponde al costo anual del consumo de petróleo, por lo que podemos simplificarlo de esta forma:
CostoAnual <- PrecioLitro * ConsumoAnual
AhorroAnual <- CostoAnual * AhorroCometa
Con esto, ya contamos con todo para poder calcular los años de recuperación del monto, expresado en
AnosRecuperacion <- CostoInversion / AhorroAnual
round(AnosRecuperacion, 1) # se aplica la función "round()" para redondear a 1 décima, por eso el 1
## [1] 8.5
El valor asignado a AñosRecuperacion, es de 8.5 (redondeado a una décima), vale decir, se toma 8 años y medio en recuperar la inversión.
Hasta aquí, es como cualquier ejercicio hecho en un papel, pero el poder de la programación yace en su capacidad de generalizar soluciones. Digamos por ejemplo que uno de los valores cambia, como el precio por litro, o el porcentaje de ahorro del cometa, la idea sería generar un sistema que permita realizar el cálculo indistinto de los valores que se asigne, dando un salto cualitativo en los niveles de abstracción.
Una forma de generalizar esto en matemáticas es por medio de las funciones, que para este caso se vería algo así:
\[f(PL,CA,CI,AC) = \frac{CI}{(PL*CA)*AC} \]
\[\text{Donde:}\\ \text{PL es el Precio por Litro}\\ \\ \text{CA es el Costo Anual}\\\text{CI es el Costo de la Inversión y}\\ \text{AC es el ahorro por uso de Cometa} \]
Ser capaz de generalizar una función como esta implica un ejercicio de orden cognitivo superior, que cuando se le incluye programación, permite operar con procedimientos reales, dinámicos, alterables y automatizables, algo imposible para el papel –mucho más si incluimos grandes cantidades de datos o variables.
Para traducir esta función a R, podemos hacerlo generalizando lo que realizamos anteriormente, y queda expresado de esta forma:
funcion_AnosRecuperacion <- function(PL, CA, CI, AC){
CostoAnual <- PL * CA
AhorroAnual <- CostoAnual * AC
AnosRecuperacion <- CI / AhorroAnual
AnosRecuperacion
}
# Notar que de la misma manera que alojábamos números en una variable, también podemos alojar funciones que luego podemos ejecutar.
# Ocupamos la nomenclatura de la Fórmula N°2 por simplificar, bien podríamos haber utilizado PrecioLitro en lugar de PL, y el resultado no cambiaría
Si luego corriésemos esta función con nuestros parámetros anteriores:
funcion_AnosRecuperacion(PrecioLitro,
ConsumoAnual,
CostoInversion,
AhorroCometa)
## [1] 8.503401
Nos da –redondeado a una décima- los 8,5 años que calculamos. Esto además nos permite aplicar la misma fórmula aún si cambiamos los parámetros. Digamos por ejemplo que el precio por litro aumentó en un 10% (o 1,10), ello se puede expresar de la siguente forma:
funcion_AnosRecuperacion( (PrecioLitro * 1.10),
ConsumoAnual,
CostoInversion,
AhorroCometa)
## [1] 7.730365
Por lo que la cantidad de años de recuperación, se ve reducida a 7,7.
Este cambio abre el espacio además a conversar y entender el procedimiento en su conjunto, todo en términos verbales. Dado que el uso de cometa permite un 20% ahorro como porcentaje de lo gastado, al aumentar uno de los parámetros asociados al Costo Anual (Consumo anual * Costo del litro), la cantidad absoluta de ahorro crece, y por lo mismo la cantidad de años para recuperar la inversión inicial se ve contraída. Una breve expresión lógica en programación nos permitiría entenderlo y evaluarlo:
# Cálculo con valores originales
CostoInversion <- 2500000
PrecioLitro <- 0.42
ConsumoAnual <- 3500000
AhorroCometa <- 0.2
CostoAnual <- PrecioLitro * ConsumoAnual
AhorroAnual <- CostoAnual * AhorroCometa
AnosRecuperacion <- CostoInversion / AhorroAnual # sabemos que da 8.5 redondeado
# Aumentamos en un 10% el PrecioLitro
PrecioLitro <- PrecioLitro * 1.10
CostoAnual <- PrecioLitro * ConsumoAnual
AhorroAnual <- CostoAnual * AhorroCometa
AnosRecuperacion_increment <- CostoInversion / AhorroAnual #cambiamos nombre a AñosRecuperacion para identificarlo
# luego comparamos ¿Se contrae la cantidad de años de recuperación de la inversión si aumenta el precio por litro?
# Expresamos la pregunta en términos de si el monto con el valor original es mayor que el valor aplicado el 10% de recargo
# R utiliza comparadores matemáticos conocidos, mayor/menor que "<,>", igual a "==", distinto de "<>", entre otros
AnosRecuperacion > AnosRecuperacion_increment
## [1] TRUE
# La expresión evaluada se lee "es AnosRecuperacion mayor que (>) AnosRecuperacion_increment?"
# Lo cual se evalúa como verdadero (8.5 > 7.7)
De esta forma, más que solo realizar la ejecución de un ejercicio repetitivo, lo que se hace es literalmente manipular la matemática en un proceso lógico y secuencial para resolver un problema.
Es importante que el docente se detenga en aquellos aspectos de abstracción y generalización del ejercicio, y el proceso de construcción de la función, por ejemplo dando espacio a interpretar por qué ciertos parámetros contribuyen a aumentar o reducir el monto final, pensar que significa una división en este caso, o por qué las variables se calculan de esa forma, pero sobre todo, abrirse a nuevas secuencias o funciones que puedan resolver el problema.
Consultas, no duden en escribir a esteban@scratchalsur.org