Reinventar la rueda

Un problema endémico en el mundo del desarrollo de software

¿Para qué reutilizar si puedo volver a inventarlo?

Ultima revisión: 15 de Marzo 2019

Quiero iniciar este artículo con una serie de ideas que me llevan dando vueltas en la cabeza desde hace tiempo sobre el desarrollo actual y cómo ha ido evolucionando el mundo de las aplicaciones. La realidad es que yo desarrollo principalmente aplicaciones web empresariales pero creo que también puedo hablar por los que desarrollan aplicaciones finales para un entorno específico, aunque como veréis en las problemáticas que expondré en muchos casos los desarrollos para una plataforma específica las resolvieron en su día y ahora se está volviendo a desvirtuar.

Hablaré principalmente desde el enfoque de mi lenguaje predilecto PHP y JavaScript.

El problema del frontend

Quizá una de las mayores mejoras que se ha introducido en la comunidad y en general en el desarrollo de aplicaciones web es la separación literal del desarrollo frontend / backend. Lo que ha abierto la puerta a un mundo de frameworks que antes era impensable. Por desgracia ha "quebrado" la comunidad que ahora se divide para perseguir gamusinos en frameworks que tienen una continuidad mínima y proyectos con unos tiempos de vida mínimos no aptos para producción en muchos casos.

Tras años y años, se ha conseguido diferenciar diversas tecnologías que parece que empiezan a asentar lo que podría ser un desarrollo efectivo. Pero la búsqueda de gamusinos por conseguir la mejor tecnología de frameworks ha creado un vacío que es necesario llenar.

Volvamos a pensar por un momento en aquellos tiempos donde se definía el concepto de navegador. Todos esos navegadores eran contendores de componentes invocados desde HTML.

A día de hoy estos navegadores están relegando la funcionalidad original de interpretar esos componentes a frameworks vía JavaScript para que los desarrolladores personalicen esos componentes a su gusto.

Aquí es donde veo el principal problema ¿Por qué damos por hecho que todo tipo de aplicaciones requieren soluciones a la última tecnología?

He creado y mantenido muchas aplicaciones de gestión en diferentes empresas en la que cada una requiere un diseño propio. Tanto físico (Que puede ser entendible) como de componentes. Y no es una necesidad real del negocio, si no una necesidad caprichosa de los programadores que no consiguen reutilizar de manera efectiva componentes de la comunidad en parte porque no hay un consenso generalizado.

¿Por qué hay que crear componentes una y otra vez?

Todavía no he encontrado un compendio de componentes mediante el cual implementes un fichero JavaScript desde un CDN e implemente los componentes:

  • Fechas, tags ...
  • Data Grid o listas de datos.
  • etc...

Casi todo esto estaba ya en el JQuery UI. ¿De verdad no echáis de menos la cohesión de esa librería pero con NPM y un framework más actual?

Y "lo peor", es que a día de hoy hay frameworks como Vue.js, Angular o React que hacen exactamente eso, la posibilidad de que cada desarrollador cree sus componentes y que los pueda integrar como elementos "nativos" del navegador en HTML. Lo curioso es que no son parte del problema, si no la solución pero nadie lo ve y me sorprende.

La solución radica en crear algún tipo de compendio de componentes fiable, independiente y rápido de usar. Claro que ya se han empezado a ver brotes verdes en este aspecto con los llamados frameworks de Frontend. Véase Materialize, Bootstrap...

No son malas soluciones pero en el fondo la mayoría de componentes que se requeriría para hacer las operaciones "complejas" no están implementados en estos frameworks.

Espero que poco a poco la comunidad vaya resolviendo este gran problema y que sin darnos cuenta hace que las empresas estén regalando horas de desarrollo sin sentido. En lugar de centrarse en el negocio.

El problema del backend

Con el paso de los años han ido surgiendo frameworks que han ido dejando anticuadas las técnicas de programación espagueti que iniciaron muchas webs y negocios en la década del 2000. Actualmente a finales de la década del 2010 estos frameworks han conseguido crear un ecosistema de desarrollo sin precedentes, mucho mas rápido y eficiente. Y realmente han mejorado mucho la forma de trabajar.

Sin embargo en mi opinión creo que todos los frameworks siguen sin dar respuesta a la necesidad del clásico problema CRUD. Los ORM's te permiten hacerlo todo mucho mas rápido pero nadie los usa de manera dinámica.

Creo que todo debería ser estructurado de manera que las operaciones habituales: Creación/Edición/Lectura/Creación Masiva/Edición masiva/Borrado/Filtrado deberían venir preparadas en cualquier sistema sin tener en cuenta posibles relaciones o variaciones de los modelos.

En línea de lo anterior ¿Por qué aun no existe una herramienta de filtrado genérica?

Decidme que no estáis hartos de filtrar bases de datos...

Y no es tan complejo de hacer, de hecho para uno de nuestros proyectos tenemos una que funciona de mil maravillas con MySQL y en breve con CouchDB. No es un código maravilloso para mostrar al mundo pero se podría trabajar en este sentido.

Y por otro lado lo creáis o no aun no se ha desarrollado de manera correcta un sistema de scaffolding que merezca la pena. Cosa que agilizaría muchísimo el desarrollo con determinados frameworks que son sota caballo y rey.