miércoles, 23 de marzo de 2011

Intención del código (o, me descargo un poco)

Este post, probablemente, parezca una pelotudez. Probablemente alguien diga "esto es obvio"o "no me digas", pero, es que lo he visto tantas veces, me he topado con esto tanto, que empiezo a creer que no es tan obvio.


Me ha tocado leer/mantener código que no fue escrito por mi. Es decir, meterme a tocar, mejorar, fixear, código ajeno en vez de escribirlo desde cero. En esos casos, me he topado con cosas como esta (*):

Function Foobar(n){
    n = n * 3
    return n
}


El tema es el siguiente, dada una función escrita en algún lenguaje de programación, puedo saber si está bien?

Esa función, es correcta o no es correcta?? Digamos, desde el punto de vista de la sintaxis (suponiendo que eso es la sintaxis de algún lenguaje) puede no fallar. Pero, está bien? Cómo se que intención tenía? Qué se supone que hace? O que esperar? Por qué nos cuesta tanto documentar eso en comentarios?

En casos peores, he visto cosas como:

Function Foobar(n){ //Devuelve n multiplicado por 3
    n = n * 3
    return n
}


Donde, no solo sigo teniendo el problema de no saber si está bien o no, sino que, además, me dice algo que es obvio.

Entonces, queridos amigos programadores, cuando comentemos procuremos poner la intención de ese cacho de código. NO quiero que me digan lo que puedo ver leyendo el código, sino, justamente, lo que se les pasó por la cabecita cuando lo escribieron. Por qué? Porque es mucho más sencillo arreglarla (si fuera necesario) sabiendo que se supone que hace, que tener que deducirlo teniendo en cuenta quien la llama, por ejemplo. Además, si la función estuviera mal, es más complejo deducir que en realidad, quisieron poner, no se, n = n + 3, por decir algo, aumentando mis posibilidades de romper algo que estaba bien, pero que parecía mal.

Gracias

(*) Aclaración para los despistados, esa función es solo ilustrativa, no es un caso real =)

jueves, 10 de marzo de 2011

Magia Negra: Un ActiveRecord en pytnon

Pensando en un proyecto cuasi muerto que tengo, me vino a la mente que, aprovechando el código ya escrito y con muy poco esfuerzo/código más, puedo armar un framework que implemente ActiveRecord


Y acá está (solo está creado el espacio y subido un commit inicial) pero promete.
El nombre, inspirado en el efecto mágico y, un tributo a las viejas bandas del metal quizá?

Status: Muerto por falta de interés.