Bien sabido es, que la especie humana requirió millones de años de evolución hasta llegar a su punto actual. Acá, algún negativo, podría acotar la pregunta retórica de "tanto tiempo para esto?". Pero al margen de eso, si hay algo interesante en esto de la evolución, es que es un proceso de prueba y error. Y acá, el punto importante es el error.
No vamos a meternos a explicar los detalles de la evolución en términos genéticos, pero vamos a resumir en el hecho de que, los organismos simplemente, al reproducirse, a veces se la mandan, y a esto se le llama "error". Si bien uno en principio, de negativo nomás, escucha "error", y piensa en que calculó mal la cantidad de huevos para hacer el bizcochuelo, y por ende ahora se quedó sin bizcochuelo. O que calculó mal la cantidad de litros de pintura, y ahora quedó la habitación a medio terminar. O en "disculpe señor pero hubo un error y vamos a tener que cobrarle una comisión de uso de su tarjeta...". Y una cantidad innumerable de "errores" de nuestra sociedad actual, que siempre desencadenan alguna consecuencia nefasta para nuestra persona.
La idea de error en la evolución sería mejor expresada, y menos peyorativa, si pensamos como "una diferencia no intencional". Es decir que el resultado, es distinto del esperado. Nótese que no decimos nada acerca de si esta diferencia es buena o mala. Porque en definitiva, buena o mala para qué ? en qué contexto ?.
En fin. A veces esas diferencias, son justamente ventajas. Por ejemplo, se contaba la historia de un cierto bicho, como un insecto volador, que comenzó a mutar (en sucesivas generación), obviamente por "error" y entonces su color pasó a ser blanco.
Como vivía en una zona volcánica, que solía estar cubierta de cenizas bastante parecidas a ese blanco, los otros bicharracos ya no lo podían ubicar. Entonces, nadie se lo morfaba.
Eventualmente, el volcán dejó de estar en actividad, y ahora el bicho blanco se posaba sobre los arboles oscuros, y era una invitación para los demás hambrientos habitantes de la zona, que no dudaban en darse un manjar.
Eventualmente, a lo largo de los años, de nuevo, por esa de las cosas, el bichito pasó a color negro, y así de nuevo los demás animalitos tuvieron que cambiar su dieta.
Entonces, a veces, la evolución ayuda a las especies. Otras veces la condena. Pero ya no tengo ejemplo de eso, porque no tengo bicho que me la cuente.
Pero acá vamos a hacer un alto, porque no hay que pifiarla. Que eventualmente el bicho salga beneficiado, no quiere decir que estaba planificado. No quiere decir que ellos o alguien más se estuvo rompiendo la cabeza pensando en qué cosa cambiarle al pobre bicho para hacerlo "evolucionar". Simplemente sucede, y a veces es para bien o para mal del pobre animalito.
Por eso es que tomó tanto tiempo llegar a "esto".
Ahora, otro punto importante de la evolución, es que se va ramificando. Y no necesariamente una linea de evolución es mejor que otras.
El tema es que nosotros los humanos nos creemos los más capos, o tenemos algún tipo de complejo de inferioridad a nivel especie, que hace que todo el tiempo resaltemos los defectos de los otros pobres animalitos.
En definitiva, a lo que voy es que, el ser humano es el resultado (intermedio) de una linea de evolución, pero no es la definitiva, ni la mejor, ni la única.
Y acá finalmente, luego de tanto introducción entro al tema del post.
Cuán diferente podría ser la vida si hubieramos evolucionado de otra forma. O en una sociedad evolucionado de otra forma ?
Y pensaba, que, en nuestro narcisimo, siempre despreciamos a las pobres plantas, porque estan ahí quietitas, no hablan, no se mueven. No sirven para cuidar la casa, porque ni siquiera ladra, ni muerden (habría que ver si existe algún tipo de planta carnivora gigante que sirva de custodio). En fin, lo que se dice comúnmente como que "no sirven ni pa' espiar".
Y así nos olvidamos de la mayor ventaja que tiene la planta por sobre nosotros. Que no necesita comer!
Su necesidad se reduce a dos recursos que podríamos pensar que son gratuitos o casi inacabables: la luz del sol, y ciertos minerales de la tierra.
Pensar que si nosotros solo necesitáramos de eso, muchas cosas no existirían, como: la industria ganadera, la industria cerealera, los supermercados, los kioskos. Y por ende muchos problemas, como "el precio de la carne". O el kilo de tomates a 12$.
De hecho, podría no existir la plata!. Si el sol no se compra!, y la tierra, .. bue. Podría pensarse que en principio, no haría falta comprar y vender la tierra. Cuánta tierra necesitaría un vegetoide de estos?
Sin plata, ya cambia todo. No necesitariamos trabajar!. Al menos no para obtener dinero, lógicamente. Un podría pensar sin embargo en proyectos benéficos a la sociedad, como una especie de lupa gigante para aumentar o concentrar los rayos del sol en pos de más energía. O proyectos hidropónicos para poder vivir en las alturas o en lugares donde no hay mucha tierra.
Pero el punto es que la sociedad tal cual la conocemos no tendría sentido.
Los invito entonces, a pensar diferentes aspectos de nuestra vida si fueramos vetetoides.
miércoles, 8 de junio de 2011
Miedo a las interfaces
Mi primer post (no intro) es de programación :S
Igualmente, como todo, tiene un contenido social, y psicológico, pero se va a hacer dificil de entender entre tanta maraña de cosas tecnológicas y conceptos de programación.
La pregunta introductoria al tema es: por qué la gente le tiene miedo al diseño que separa interfaz de implementación ?
Algunos se escudan en la idea de que es sobrediseño hacer esta separación, cuando actualmente solo se desarrola una única implementación.
Cuánto overhead trae este sobrediseño me pregunto ?
Otra pregunta interesante, sería, cuánta penalidad me trae tener que hacerlo después ? Y acá entran muchos factores. Por ejemplo, si trabajo con varios artefactos maven, implicaría reversionar (generar una nueva versión) del artefacto core, y si la dependencia es transitiva a partir de varios otros artefactos, tendré que refactorizar y generar nuevas versiones para cada uno.
Además, de la incompatibilidad de versiones sobre otros clientes que ya codifiqué y liberé.
Otros reniegan del hecho de que al modelarlo con interfaces, se pierde la reutilización de código.
La pregunta acá sería, cuánto código estoy realmente reutilizando ?
Y el otro punto de fondo es: qué tan efectiva es la idea de definir tipos y relaciones entre ellos a través de herencia ?
Está claro, desde el nacimiento de la herencia, que es un mecanismo poco eficaz, para cualquiera de sus dos funciones:
En un lenguaje sin herencia múltiple, y con checkeos en tiempo de compilación, como java, la interface está directamente asociada con el concepto de polimorfismo, en su estado más puro. Claro, java tampoco tiene duck-typing.
En un lenguaje sin checkeo en tiempo de compilación, esta problemática sería trivial, porque simplemente puedo codificar una nueva impl que entienda los mismos mensajes y ya.
En java, en cambio, yo tengo que establecer el contrato de esos métodos, de antemano.
Entonces, me parece bien recomendar a un desarrollador no-experto, concentrarse en resolver los problemas de a uno, y no meterse a tratar de resolver todo el sistema de golpe. O a meterse en meta-niveles de programación, o meta-tareas.
Ahora, qué tan válido es seguir aplicando ese principio para un programador experimentado ? No está siendo ineficiente, solo por fanatismo ?
De todas estas estructuras mentales (porque, al final, parece que siempre buscamos lo mismo que criticamos, es decir, LA respuesta. LA forma de hacer las cosas que sea invariante, y que siempre aplique a todas las situaciones infaliblemente. El famoso silver bullet, pero conceptual, en este caso.), digo, la más simpática para mí es la de tomarse un minuto para analizar si el concepto que estamos definiendo, es decir el "tipo" merece ser considerado un concepto principal, extensible, o cuya implementación puede tener sentido variar.
Bueno ya. Me perdí un poco del objetivo del post.
Supongo ahora, en retrospectiva, que era cuestionar el por qué las personas le tienen idea a la división de interfaz vs implementación, que es una de esas prácticas que mucha gente hace de memoria. Pero en cambio, no les hacen ruido otras prácticas nefastas como las arquitecturas de DTO, o los dummy beans.
?
Igualmente, como todo, tiene un contenido social, y psicológico, pero se va a hacer dificil de entender entre tanta maraña de cosas tecnológicas y conceptos de programación.
La pregunta introductoria al tema es: por qué la gente le tiene miedo al diseño que separa interfaz de implementación ?
Algunos se escudan en la idea de que es sobrediseño hacer esta separación, cuando actualmente solo se desarrola una única implementación.
Cuánto overhead trae este sobrediseño me pregunto ?
Otra pregunta interesante, sería, cuánta penalidad me trae tener que hacerlo después ? Y acá entran muchos factores. Por ejemplo, si trabajo con varios artefactos maven, implicaría reversionar (generar una nueva versión) del artefacto core, y si la dependencia es transitiva a partir de varios otros artefactos, tendré que refactorizar y generar nuevas versiones para cada uno.
Además, de la incompatibilidad de versiones sobre otros clientes que ya codifiqué y liberé.
Otros reniegan del hecho de que al modelarlo con interfaces, se pierde la reutilización de código.
La pregunta acá sería, cuánto código estoy realmente reutilizando ?
Y el otro punto de fondo es: qué tan efectiva es la idea de definir tipos y relaciones entre ellos a través de herencia ?
Está claro, desde el nacimiento de la herencia, que es un mecanismo poco eficaz, para cualquiera de sus dos funciones:
- reutilizar código
- definir tipos (función semántica)
En un lenguaje sin herencia múltiple, y con checkeos en tiempo de compilación, como java, la interface está directamente asociada con el concepto de polimorfismo, en su estado más puro. Claro, java tampoco tiene duck-typing.
En un lenguaje sin checkeo en tiempo de compilación, esta problemática sería trivial, porque simplemente puedo codificar una nueva impl que entienda los mismos mensajes y ya.
En java, en cambio, yo tengo que establecer el contrato de esos métodos, de antemano.
Entonces, me parece bien recomendar a un desarrollador no-experto, concentrarse en resolver los problemas de a uno, y no meterse a tratar de resolver todo el sistema de golpe. O a meterse en meta-niveles de programación, o meta-tareas.
Ahora, qué tan válido es seguir aplicando ese principio para un programador experimentado ? No está siendo ineficiente, solo por fanatismo ?
De todas estas estructuras mentales (porque, al final, parece que siempre buscamos lo mismo que criticamos, es decir, LA respuesta. LA forma de hacer las cosas que sea invariante, y que siempre aplique a todas las situaciones infaliblemente. El famoso silver bullet, pero conceptual, en este caso.), digo, la más simpática para mí es la de tomarse un minuto para analizar si el concepto que estamos definiendo, es decir el "tipo" merece ser considerado un concepto principal, extensible, o cuya implementación puede tener sentido variar.
Bueno ya. Me perdí un poco del objetivo del post.
Supongo ahora, en retrospectiva, que era cuestionar el por qué las personas le tienen idea a la división de interfaz vs implementación, que es una de esas prácticas que mucha gente hace de memoria. Pero en cambio, no les hacen ruido otras prácticas nefastas como las arquitecturas de DTO, o los dummy beans.
?
Intro
Acá debería contar un poco cual es mi intención al crear un blog. De qué voy a escribir, cuales son mis planes. Planificar, organizar el tiempo, ordernar las ideas, controlar el contenido.
Todas actividades inútiles.
Por qué necesitamos controlarlo todo ? por qué necesitamos estructurar las ideas.
Eso es lo que me veo forzado a hacer todos los días en el trabajo, y también todos, en menor o mayor medida, en cualquier actividad de la vida.
Como: organizarse las actividades de la semana, para ir al banco a pagar las cuentas, o para ir a comprar regalos de cumpleaños (habrá algo más feo que tener que ir a comprar regalos por cumpleaños!, sucede cada año!). Planificar gastos, ahorros, proyecciones para sacar un crédito, para comprar una casa. Planificar las vacaciones. etc.
Por qué habría de hacerlo también en un blog ?
Es lógico entonces que mi blog intente escapar de toda esa persecución paranóica del orden y de la estructura.
Permítanme la primer licencia de haber escrito, a pesar de esto, una introducción al blog.
Igualmente, este punto de vista "nihilista" frente al orden, o si quieren anárquico, no es exáctamente un pseudo ateísmo, o contraposición al orden extremo. Simplemente es contingencial. Traducción, si un día tengo ganas de organizar la información, los posts, las ideas, etc, lo haré. Pero si no, no!.
Por qué "Guardián entre el Centeno" ?
Eso se responde fácil, lean el libro "El Guardián Entre El Centeno", de J.D. Salinger. También se encuentra en castellano como "El Cazador Oculto". Ambas traducciones malísimas al gallego. Si pueden léanlo en inglés entonces como "The Catcher in the Rye".
Si esperaban una explicación directa, no la van a tener. Lean y saquen sus propias conclusiones. Si diera una explicaciónd directa, iría en contra de lo que mencioné más arriba.
Entonces esta es mi "no-introducción" al blog.
Veremos que sale de todo esto !
Todas actividades inútiles.
Por qué necesitamos controlarlo todo ? por qué necesitamos estructurar las ideas.
Eso es lo que me veo forzado a hacer todos los días en el trabajo, y también todos, en menor o mayor medida, en cualquier actividad de la vida.
Como: organizarse las actividades de la semana, para ir al banco a pagar las cuentas, o para ir a comprar regalos de cumpleaños (habrá algo más feo que tener que ir a comprar regalos por cumpleaños!, sucede cada año!). Planificar gastos, ahorros, proyecciones para sacar un crédito, para comprar una casa. Planificar las vacaciones. etc.
Por qué habría de hacerlo también en un blog ?
Es lógico entonces que mi blog intente escapar de toda esa persecución paranóica del orden y de la estructura.
Permítanme la primer licencia de haber escrito, a pesar de esto, una introducción al blog.
Igualmente, este punto de vista "nihilista" frente al orden, o si quieren anárquico, no es exáctamente un pseudo ateísmo, o contraposición al orden extremo. Simplemente es contingencial. Traducción, si un día tengo ganas de organizar la información, los posts, las ideas, etc, lo haré. Pero si no, no!.
Por qué "Guardián entre el Centeno" ?
Eso se responde fácil, lean el libro "El Guardián Entre El Centeno", de J.D. Salinger. También se encuentra en castellano como "El Cazador Oculto". Ambas traducciones malísimas al gallego. Si pueden léanlo en inglés entonces como "The Catcher in the Rye".
Si esperaban una explicación directa, no la van a tener. Lean y saquen sus propias conclusiones. Si diera una explicaciónd directa, iría en contra de lo que mencioné más arriba.
Entonces esta es mi "no-introducción" al blog.
Veremos que sale de todo esto !
Suscribirse a:
Entradas (Atom)