martes, 10 de enero de 2012

Abstracción, aplicaciones con pies de barro

Cuando desarrollamos aplicaciones, utilizamos varios mecanismos de abstracción que nos permiten, entre otras cosas, centrarnos en problemas funcionales, abstrayendonos de ciertos problemas técnicos. Por ejemplo con java o con .net un desarrollador no suele preocuparse por la gestión de memoria porque el recolector de basura de cada plataforma se encarga de eso.

Los propios lenguajes de programación no mas que abstracciones que permiten comunicarnos de forma sencilla con las máquinas.

La abstracción ha permitido que más desarrolladores puedan trabajar, ya que el nivel de conocimiento necesario para hacer el trabajo ha disminuido. Si tuviésemos que trabajar en ensamblador ¿cuanta gente sería capaz de software de calidad?

La abstracción bien entendida
Estamos viviendo una época que pasará a los anales de la historia, seguramente en unos años el final del siglo XX y el principio del XXI se conocerá como La revolución informática. Esta revolución no sería posible sin la abstracción, que permite que mucha gente pueda usar los ordenadores de diferente manera y cada vez con menos conocimiento.

Pero nunca debemos olvidar qué es lo que estamos usando o de lo qué nos estamos abstrayendo. A pesar de utilizar lenguajes que nos abstraen del comportamiento del micro procesador o del concepto de memoria, no podemos olvidarnos que estos elementos condicionan de forma muy importante el resultado.

Creo que un desarrollador debe conocer con un cierto nivel de detalle el comportamiento de la última capa de abstracción. Por ejemplo, un desarrollador web debe conocer http, qué pasa cuando se hace un post, qué es una petición ajax, etc.

Aplicaciones con pies de barro
Es muy importante tener afianzados conocimientos básicos sobre la tecnología que usamos, porque podremos evitar muchos problemas conociendo el contexto en el que trabajamos.
Microsoft creó Asp.Net WebForms como una forma de acercar de forma casi transparente a los desarrolladores de Winforms al entorno web. Con un Visual Studio no necesitas saber http, ni html, ni nada, tan solo arrastrando cajitas y con los asistentes incluidos en el IDE, puedes llegar a hacer aplicaciones de forma relativamente sencilla y rápida.
Por ejemplo al dibujar un botón, tan solo hay que hacer doble click sobre él para abrir una ventana donde pueda condificar la operación necesaria. Esta magia oculta el submit del form, el código funciona y todos felices y contentos.
Creo que ASP.Net WebForms es un gran framework de desarrollo web (a pesar de lo que muchos opinan), pero esta abstracción puede llegar a ser muy peligrosa en malas manos, ya que el desconocimiento de http puede provocar que se comentan errores, provocando problemas de rendimiento y de otra índole.

En el mundo java el uso de Hibernate es casi el estándar de acceso a datos. Este ORM oculta las comunicaciones de la base de datos, pero el desarrollador nunca debería olvidar que al final lo que se ejecuta son instrucciones SQL. Problemas muy comunes en los ORMs, como el n+1 select, vienen provocados por el desconocimiento de la abstracción.
El acceso a datos es una de las partes más importantes de la aplicación, un error en este punto puede provocar problemas catastróficos muy difíciles de solucionar.
Un ORM no es una tecnología trivial, su uso en cada aplicación debería ser estudiado con mucho cuidado y no usarse a la ligera. Como es un estándar de facto, muchos desarrolladores lo usan sin ser conscientes de lo que hacen.
  • Conocer la técnica de ORM es fundamental, no es una opción.
  • Nunca olviden que todo termina en una base de datos relacional; empezar con objetos y pensar OO no significa que tengamos que olvidarnos que el data base existe.
Estas dos frases han sido extraídas de un post de Fabio Maulo, donde da consejos a los nuevo usuarios de NHibernate y que pueden aplicarse a los desarrolladores de java.

Debemos evitar hacer aplicaciones con pies de barro, que se basan en algo que desconocemos, que se usa por costumbre, o porque a otros les ha funcionado, pero que no sabemos lo que hace y que en cualquier momento se puede desmoronar. 

Resumiendo, no debemos basarnos nunca en conocimiento casual, en algo que hace magia pero que no tenemos ni idea de cómo lo hace.

2 comentarios:

  1. Y la montaña vino a Mahoma... estoy de acuerdo en el trasfondo final, hace falta que la gente adquiera un mayor nivel de formación en las tecnologías que utiliza.

    ResponderEliminar
  2. Pero la pregunta es: Un desarrollador, tenga la responsabilidad que tenga en el proyecto, ¿debe conocer qué hace la tecnología que usa? yo creo que sí

    Por ejemplo, si hago consultas con HQL debo conocer el comportamiento de Hibernate como hace las selects, cuando carga las relaciones, buenas prácticas, posibles problemas, etc.

    ResponderEliminar