Yo soy una de esas personas que son capaces de quedarse hasta las 3 de la madrugada jugando con 3 líneas de código, o 3 líneas en una hoja de estilo, o 3 capas HTML solo para probar, ver y experimentar cual es la mejor combinación en ellas.
Les cambio el tipo de datos. Les cambio el orden de los parámetros. Juego con todos los detalles que se me pueden ocurrir hasta que, al final, me voy a dormir sin obtener ningún resultado trascendental.
Mejor dicho, soy un “proyecto de persona”.
Hacer todo eso es una pérdida de tiempo; ese tipo de cosas las hacen los que recien empiezan a programar en algún lenguaje, y están explorando ese nuevo universo de las variables, loops y esa cosa esotérica llamada recursión.
La programación es mucho más que solamente escribir 5 líneas de código usando el mejor nombre de variable y el mejor nombre de función, el mejor nombre de clase, los mejores tipos de datos, la mejor identación del código o la más eficiente forma de almacenar una fecha.
La programación no se trata de escribir 5 líneas de código, sino que la programación se trata básicamente de escribir 5 millones de líneas de código, y que todas y cada una de ellas haga lo que tienen que hacer de mejor forma posible.
En ese punto, dedicarse 15 minutos a ver si a una variable boolean se le pone el tipo “Boolean” o “Integer” es una completa pérdida de tiempo.
Lo que se debe hacer es generalizar la idea del programa y verlo desde más arriba, con un panorama más amplio. Uno se olvida de las variables, funciones, loops y tipos de datos, y piensa en términos más generales.
Uno deja de ver una vtable con una doble indireccion con un par de llamadas por medio de un doble puntero a una rutina en memoria con 2 argumentos, ambos punteros. O peor aun, ¿las indirecciones las hago con un puntero o tengo un arbol R-B? ¿y una tabla hash? ¿Cómo se maneja la saturación, es abierta, cerrada o la funcion de hash es perfecta?
En vez de eso, uno empieza a ver un Perro comiéndose una Banana.
¿O era una Banana dejándose comer por un Perro?
Esa es la idea de la abstracción. En vez de estar viendo 4 variables de instancia en una clase, estás viendo un Perro. Y una Banana. Y es Roja.
No digo que esté mal tomarse el tiempo de pensar si una variable es Integer o Float. Al contrario, en definitiva en algún momento hay que hacerlo; las computadoras no entienden lo que es un Perro, no saben si las Bananas son amarillas o rojas. No saben si el Perro se come la Banana, o si la Banana se come al Perro. Las computadoras solamente son capaces de reconocer algunos patrones de bits, y luego a partir de ello se las puede extender para reconocer otros patrones de bits.
El problema es que en el Software todo es abstracto. Aún los bits, los cuales son el punto de contacto entre el Software y el mundo real. Los bits son la única cosa “mas o menos” tangible que existe en la programación.
Y aun así, nadie los quiere ver. “¿Bits? ¡Deah!”
Y luego, en vez de ver un Perro, un Mono y un Oso Polar, comenzás a ver un Zoológico.
Y luego una ciudad, la cual capaz tiene un Zoológico. No interesa.
Y después, por qué no, un País. Algún País que capaz tenga Zoológicos. Y si no tiene, entonces le metemos en algún lado un Zoológico, total yo estoy siendo abstracto, ¿no?
Mejor aún, ¡Dos Zoológicos!
Esto es lo que Joel llama Arquitectos Astronautas. Y ahí empiezan los problemas, porque después de un largo rato te das cuenta que lo único que vos querías saber era el tamaño de una variable Boolean en bytes (en una de esas conversaciones altamente geekescas).
Por cierto, los Booleans son en realidad Integers.