Martin (2023) ¿Hacia una horizontalización de la Programación?

Mg. José-Manuel Martin Coronado
Data Scientist for Economics
Instituto de Econometría de Lima
www.institutoeconometria.com
Lima, 22 de enero de 2023

Aquellos que ya tienen un tiempo en la programación sabrán que existen diversas costumbres, o mejor dicho "buenas prácticas", en la elaboración del código. Una de ellas es la "verticalización del código", es decir, que el código escrito no debería superar cierto ancho recomendado por el programa (ó IDE) utilizado (Stata, R, Python, VS Code, Spyder, etc.). El ancho se puede representar a su vez en un limitado número de caracteres (letras, números o símbolos) a escribir por cada línea de código.

Una de las razones fundamentales para la verticalización del código es la facilidad de lectura, algo así como una columna de un período o diario electrónico, de modo que cada línea contendrá poca información fácil de identificar, entender y corregir. Esto a su vez tiene que ver con la simplicidad y eficiencia del código, que es un objetivo también deseado cuando se trabaja en equipos o se tiene "herederos" del código que un tercero elabora. Aunque ello tampoco debe llegar al extremo, al mismo tiempo que existen la posibilidad de hacer comentarios explicativos ó documentación complementaria.

Por ejemplo, si uno quiere imprimir una operación matemática simple, Y = C + I, donde C=1000 e I=800, puede hacerlo simplemente con el siguiente comando de Python:

print(1000+800)

Otra forma de hacerlo es mediante una creación ordenada de objetos (variables/valores), es decir,

C = 1000
I = 800
Y = C+I
print(Y) 

Esta fórmula es relativamente más consistente con el enfoque matemático, aunque esto último dependerá de la vocación didáctica o no del expositor matemático (economista, físico, ingeniero, etc) ya que podría perfectamente horizontalizarlo de la siguiente manera:

C, I =1000, 800
print(C+I)

O también de la siguiente manera:

C_I = [1000,800]
print(sum(C_I))

No obstante, el problema con este método es que uno debe estar muy atento a que los objetos insumo sean creados antes del objeto resultado, es decir que C e I sean creados antes que Y, de lo contrario el programa le dirá que no encuentra los insumos ya que aún no existen. 

Otra forma más "sofísticada" podría ser crear una función explícitamente, de la siguiente manera:

def PBI(C,I)
    return C+I
print(PBI(1000,800)

El/La lector/a puede notar que una línea que es casi inevitable es la de "mostrar" (print) el resultado de las operaciones matemáticas realizadas. Sin embargo, para simplificar aún más ello, se tiene la función lambda, que se utiliza de la siguiente manera:

print((lambda C,I: C+I)(1000,800))

Claramente este método es más eficiente, sobre todo porque ya incorpora la línea extra de impresión (print), aunque ya se hace un poco más difícil de leer in entender. Se encuentra compuesta por cinco partes: la orden de impresión (print), la función que hará el trabajo (lambda), las "variables" (objetos) utilizadas (C e I), la operación matemática a realizar con las "variables" (C+I), los valores que tendrán las "variables" (1000 y 800).

Ahora bien, si extendemos a la definición completa del PBI, producto bruto interno, deberíamos tener la siguiente función lambda:

print((lambda C,I,G,X,M: C+I+G+X-M)(1000,800,600,900,400))

Ahora sí está un poco más complicado de leer, donde probablemente la creación ordenada de objetos sea un poco más recomendable (aunque es cuestión de gustos al final):

C=1000
I=800
G=600
X = 900
M = 400
print(C+I+G+X-M)

Regresando al enfoque matemático, la horizontalización es deseada por aquellos operadores matemáticos que tienen una mayor vocación a la complejidad, operacional y visual, ya que existe la presunción de sabiduría, habilidad, validez y veracidad de estos postulados a diferencia de los más simples.  

Desde un enfoque de la programación, la horizontalización puede venir impulsada por la simplicidad y, sobre todo, por la eficiencia del código, es decir escribir lo mismo en menos líneas. Pero en este caso, la complejidad visual, esencialmente, es un costo que puede incrementarse exponencialmente, en particular para aquellos alumnos o programadores nuevos que están iniciandose en esta profesión y, tal vez, no tengan sólidas bases matemáticas abstractas

Comments

Popular posts from this blog

Endogeneidad y Exogeneidad en los Modelos Econométricos [MARTIN, JM.]

"De los modelos ARDL - Primera Parte" (Traducción)

¿Qué es un Proceso Generador de Datos ARIMA(1,1)? [J.M. MARTIN]